2 个版本
0.1.4 | 2020年12月16日 |
---|---|
0.1.0 | 2020年12月12日 |
#12 in #cms
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