2 个版本

0.1.4 2020年12月16日
0.1.0 2020年12月12日

#12 in #cms

Apache-2.0

22KB
132

邻居

你愿意做我的邻居吗?

一个简单的CMS,最初作为一个JSON API用户管理系统。

安装

邻居使用SQLx ORM来管理到Postgres数据库的连接。必须使用SQLx的CLI界面来安装模式。

首先,安装CLI

cargo install --version=0.2.0 sqlx-cli --no-default-features --features postgres

然后,将example.env复制到.env并编辑生成的文件以匹配您的本地配置

cp example.env .env

最后,创建Neighbor数据库

sqlx database create
sqlx migrate run

要重新开始使用一个干净的数据库,您可以删除旧的数据库并重新创建

sqlx database drop
sqlx database create
sqlx migrate run

使用

使用Cargo运行Neighbor,例如

cargo run --release

关于

邻居仍然处于非常早期的开发阶段。它受到了Drupal 6中找到的CMS功能的启发,并希望最终成为其自身的灵活内容管理系统。

初始目标是提供在这两部分系列文档中记录的功能,其中我们使用了Django,结果是一个用于单页应用程序的Rust后端:[https://www.tag1consulting.com/blog/building-api-django-20-part-i](https://www.tag1consulting.com/blog/building-api-django-20-part-i)

邻居目前是一个由Actix和Tokio提供支持的独立API,使用PostgreSQL数据存储。最终目标是支持其他框架(如Tide和async_std)以及其他数据存储(如MySQL)。

API

人物

创建

路径:/api/person 方法:POST 请求类型:sitter::person::PersonRequest 响应类型:sitter::person::Person

POST一个json编码的sitter::person::PersonRequest以创建一个新的Person。在成功的情况下返回新创建的json编码的Person,包括分配的uuid。

示例
curl -X POST -H "Content-Type: application/json" -d '{"name":"Some Body","email":"[email protected]","pass":"Po(iUhJihU3$xS"}' https://127.0.0.1:5335/api/person
{"id":"5d62b617-67b6-4a3d-a2f1-f392f0ed64fd","name":"Some Body","email":"[email protected]","pass":"$argon2id$v=19$m=32768,t=1,p=4$KPjETcw8yJXhhTXqkKzj683/WYv5Av80$iBq4KS27a+C0SafTx2eSZQ"}
curl -X POST -H "Content-Type: application/json" -d '{"name":"Somebody Else","email":"[email protected]","pass":"123456abcdef"}' https://127.0.0.1:5335/api/person
{"id":"1d66f0f4-88e8-4454-bd7e-445624bfd994","name":"Somebody Else","email":"[email protected]","pass":"$argon2id$v=19$m=32768,t=1,p=4$KoH+adS/iJWO/mK7XzKHWZ4YaJOJCfnP$+vPFthc+/wnKHIJ2dktkWw"}

更新

路径:/api/person/{id} 方法:PUT 请求类型:sitter::person::PersonRequest 响应类型:sitter::person::Person

PUT一个json编码的sitter::person::PersonRequest以更新现有的Person,通过在路径中指定其uuid来控制应更新的Person。在成功的情况下返回一个json编码的更新后的Person。

示例
curl -X PUT -H "Content-Type: application/json" -d '{"name":"Somebody","email":"[email protected]","pass":""}' https://127.0.0.1:5335/api/person/5d62b617-67b6-4a3d-a2f1-f392f0ed64fd
{"id":"5d62b617-67b6-4a3d-a2f1-f392f0ed64fd","name":"Somebody","email":"[email protected]","pass":"$argon2id$v=19$m=32768,t=1,p=4$KPjETcw8yJXhhTXqkKzj683/WYv5Av80$iBq4KS27a+C0SafTx2eSZQ"}

注意:@TODO 目前的意图是,当设置空的“pass”时,不更改密码,并且当“pass”不为空时,可以使用它来更改密码。目前“pass”被完全忽略。

列表

路径:/api/person 方法:GET 请求类型:无 响应类型:Vecsitter::person::Person

发出一个空的GET请求以接收一个json编码的所有sitter::Person对象的列表。

@TODO 分页。

示例
curl https://127.0.0.1:5335/api/person
[{"id":"1d66f0f4-88e8-4454-bd7e-445624bfd994","name":"Somebody Else","email":"[email protected]","pass":"$argon2id$v=19$m=32768,t=1,p=4$KoH+adS/iJWO/mK7XzKHWZ4YaJOJCfnP$+vPFthc+/wnKHIJ2dktkWw"},{"id":"5d62b617-67b6-4a3d-a2f1-f392f0ed64fd","name":"Somebody","email":"[email protected]","pass":"$argon2id$v=19$m=32768,t=1,p=4$KPjETcw8yJXhhTXqkKzj683/WYv5Av80$iBq4KS27a+C0SafTx2eSZQ"}]

读取

路径: /api/person/{id} 方法: GET 请求类型: 无 响应类型: Vecsitter::person::Person

发送一个包含特定 Uuid 的空 GET 请求,以接收匹配的 sitter::Person 对象的 json 编码列表。

示例
curl https://127.0.0.1:5335/api/person/5d62b617-67b6-4a3d-a2f1-f392f0ed64fd
[{"id":"5d62b617-67b6-4a3d-a2f1-f392f0ed64fd","name":"Somebody","email":"[email protected]","pass":"$argon2id$v=19$m=32768,t=1,p=4$KPjETcw8yJXhhTXqkKzj683/WYv5Av80$iBq4KS27a+C0SafTx2eSZQ"}]

依赖项

~52MB
~1M SLoC