3 个版本
使用旧的 Rust 2015
0.0.1-alpha.5 | 2018 年 3 月 2 日 |
---|---|
0.0.1-alpha.4 | 2018 年 2 月 26 日 |
0.0.1-alpha.3 | 2017 年 11 月 27 日 |
#1217 in 编码
81KB
2K SLoC
焊接
完整的模拟 REST API 生成器。
该项目深受 json-server 启发,用 Rust 编写。
概要
我们的首要目标是根据给定的数据源(JSON)生成一个模拟 API。它可能存在错误、缺失的功能,但如果您做出贡献,所有这些都会得到修复。
版本 CHANGELOG
技术
安装
git clone https://github.com/serayuzgur/weld.git
cd weld
cargo run
使用方法
运行
可执行文件可以接受配置路径,否则它将使用默认的 ./weld.json
。如果我们以项目文件夹作为根目录,命令应该看起来像以下之一。如果您使用 cargo build --release
版本,将 debug
更改为 release
。
./target/debug/weld
./target/debug/weld weld.json
./target/debug/weld <path_to_config>.json
./target/release/weld
./target/release/weld weld.json
./target/release/weld <path_to_config>.json
配置
配置文件是一个非常简单的 json 文件,用于保存服务器和数据库属性。
{
"server": {
"host": "127.0.0.1",
"port": 8080
},
"database": {
"path": "db.json"
}
}
数据库
数据库是一个简单的 json 文件。
{
"owner": {
"name": "seray",
"surname": "uzgur"
},
"posts": [
{
"author": {
"name": "seray",
"surname": "uzgur"
},
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 1,
"tags": [
{
"id": 1,
"name": "tech"
},
{
"id": 2,
"name": "web"
}
],
"title": "Rust Rocks!"
},
{
"author": {
"name": "kamil",
"surname": "bukum"
},
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 2,
"tags": [
{
"id": 1,
"name": "tech"
},
{
"id": 2,
"name": "web"
}
],
"title": "TypeScript is Awesome"
}
],
"version": "10.1.1"
}
在这里,owner
和 posts
是表。它们可以是空的数组/对象,但它们必须以这种方式存在。
注意: id
:列是必须的,所有解析都使用它。
API
API 使用方法很简单。目前它不支持过滤器和其他查询参数。以下是您可以进行的调用列表,包括示例。
- 获取列表 <host>:<port>/<table> GET
- 获取记录 <host>:<port>/<table>/<id> GET
- 插入记录 <host>:<port>/<table> POST
- 更新记录 <host>:<port>/<table>/<id> PUT
- 删除记录 <host>:<port>/<table>/<id> DELETE
- 获取嵌套 <host>:<port>/<table>/<id><field>/<id>... GET
获取列表
url: http://127.0.0.1:8080/posts
method: GET
body: empty
response:
[
{
"author": "serayuzgur",
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 1,
"title": "Rust Rocks!"
},
{
"author": "kamilbukum",
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 2,
"title": "TypeScript is Awesome"
}
]
获取记录
url: http://127.0.0.1:8080/posts/1
method: GET
body: empty
response:
{
"author": {
"name": "seray",
"surname": "uzgur"
},
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 1,
"tags": [
{
"id": 1,
"name": "tech"
},
{
"id": 2,
"name": "web"
}
],
"title": "Rust Rocks!"
}
插入记录
url: http://127.0.0.1:8080/posts
method: POST
body:
{
"author": {
"name": "hasan",
"surname": "mumin"
},
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 3,
"tags": [
{
"id": 1,
"name": "tech"
},
{
"id": 2,
"name": "web"
}
],
"title": "KendoUI Rocks!"
}
response:
{
"author": {
"name": "hasan",
"surname": "mumin"
},
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 3,
"tags": [
{
"id": 1,
"name": "tech"
},
{
"id": 2,
"name": "web"
}
],
"title": "KendoUI Rocks!"
}
更新记录
url: http://127.0.0.1:8080/posts/3
method: PUT
body:
{
"author": {
"name": "hasan",
"surname": "mumin"
},
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 3,
"tags": [
{
"id": 1,
"name": "tech"
},
{
"id": 2,
"name": "web"
}
],
"title": "KendoUI Rocks!"
}
response:
{
"author": {
"name": "hasan",
"surname": "mumin"
},
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 3,
"tags": [
{
"id": 1,
"name": "tech"
},
{
"id": 2,
"name": "web"
}
],
"title": "Angular Rocks!"
}
删除记录
url: http://127.0.0.1:8080/posts/3
method: DELETE
body: empty
response:
{
"author": {
"name": "hasan",
"surname": "mumin"
},
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.",
"id": 3,
"tags": [
{
"id": 1,
"name": "tech"
},
{
"id": 2,
"name": "web"
}
],
"title": "KendoUI Rocks!"
}
获取嵌套
url: http://127.0.0.1:8080/posts/1/author
method: GET
body: empty
response:
{
"name": "seray",
"surname": "uzgur"
}
url: http://127.0.0.1:8080/posts/1/author/name
method: GET
body: empty
response:
"seray"
url: http://127.0.0.1:8080/posts/1/tags/1
method: GET
body: empty
response:
{
"id": 1,
"name": "tech"
}
查询API
字段选择
使API消费者能够选择返回字段。这还将减少网络流量并加快API的使用速度。
GET /cars?fields=manufacturer,model,id,color
分页
GET /cars?_offset=10&_limit=5
-
添加 _offset 和 _limit(响应中包含 X-Total-Count 头)。
-
要向用户发送总条目数,请使用自定义HTTP头:X-Total-Count。
-
内容范围偏移 – 限制 / 计数。
-
offset:请求返回的第一个元素的索引。
-
limit:请求返回的最后一个元素的索引。
-
count:集合中元素的总数。
-
-
Accept-Range资源最大。
-
resource:分页的类型。必须指明正在使用的资源,例如:客户端、订单、餐厅、……
-
max:单个请求中可以返回的最大元素数。
排序
- 允许对多个字段进行升序和降序排序。
- 使用带有下划线的 sort 作为
_sort
。 - 在代码中,降序描述为
-
,升序描述为+
。
GET /cars?_sort=-manufactorer,+model
运算符
- 添加
_filter
查询参数,然后继续使用字段名、操作和值通过,
分隔。 - 模式
_filter=<fieldname><operation><value>
。 - 支持的操作。
=
等于!=
不等于<
小于<=
小于等于>
大于>=
大于等于~=
类似于|=
在(值必须用|
分隔)
GEThttp://127.0.0.1:8080/robe/users?_filter=name=seray,active=true
全文搜索
- 添加
_q
。
GET /cars?_q=nissan
许可
MIT许可(MIT)版权所有(c)2017 Seray Uzgur
特此授予任何获得此软件及其相关文档副本(“软件”)的人免费使用该软件的权利,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向提供软件的人提供软件,以便他们可以进行上述操作,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论是因合同、侵权或其他原因而产生的,无论是否与软件或软件的使用或其他方式有关。
依赖关系
~10–18MB
~238K SLoC