JSON Sever 简介
JSON Sever[1] 是一个可以快速帮助你建设一个基于 JSON 文件的数据库服务。
安装完 json-server 依赖后,你只需要提供一个 db.json 文件,就能拥有一个功能完善的 REST API 资源服务。非常适合 Mock 数据服务的搭建和处理工作。目前已在 Github 上收获超 72.2k 颗星了。
图片
著名的 JSONPlaceholder 模拟服务[2]就是基于 JSON Sever 搭建而成的免费服务。
图片
下面就来介绍。
项目初始化和启动
初始化项目:
mkdir json-server-demo
cd mkdir json-server-demo
pnpm init
安装 My JSON Server 服务器,并使用 VS Code 打开:
pnpm install json-server
code .
项目中添加数据库文件 db.json:
{
"posts": [
{
"id": "1",
"title": "a title",
"views": 100
},
{
"id": "2",
"title": "another title",
"views": 200
}
],
"comments": [
{
"id": "1",
"text": "a comment about post 1",
"postId": "1"
},
{
"id": "2",
"text": "another comment about post 1",
"postId": "1"
}
],
"profile": {
"name": "typicode"
}
}
这里我们定义了 3 个终端资源:posts、comments 和 profile,你可以把这 3 个资源简单理解成是关系型数据库里的 3 个表格。
编辑 package.json 添加脚本,启动项目:
{
"scripts": {
"server": "json-server db.json"
},
}
npm run server
终端输出:
图片
可以看到 db.json 中的 3 个终端资源分别映射成了 3 个终端路由:/posts、/comments、/profile。接下来,我们就可以针对这 3 个终端路由进行 CURL(增删改查了)了。
增删改查 /posts 路由
3 个终端资源我们就不全部举例了,就以 /posts 为例。携带 posts 数据的 db.json 在 json-server 启动后,开箱就会提供以下路由的支持:
# 获取全部资源
GET /posts
# 获取某个资源
GET /posts/:id
# 创建资源
POST /posts
# 更新资源(全量)
PUT /posts/:id
# 更新资源(局部)
PATCH /posts/:id
# 删除资源
DELETE /posts/:id
下面在终端使用 curl 测试。
1、获取资源(全部)
curl http://localhost:3000/posts
[
{
"id": "1",
"title": "a title",
"views": 100
},
{
"id": "2",
"title": "another title",
"views": 200
}
]
2、获取资源(某一个)
curl http://localhost:3000/posts/1
{
"id": "1",
"title": "a title",
"views": 100
}
3、创建资源
curl -X POST -H "Content-Type: application/json" -d "{\"id\":\"3\", \"title\":\"foo\", \"views\": 0}" http://localhost:3000/posts
发现,db.json 中增加了 1 条 id 为 3 的记录。
图片
注意,如果重复执行以上 curl 创建指令会在 db.json 中增加 2 条同样的记录。JSON Sever 并不会帮我们做校验处理,所以在创建资源是要保证你的数据 id 的唯一性。
4、更新资源(全量)
curl -X PUT -H "Content-Type: application/json; charset=UTF-8" -d "{\"title\": \"foo\", \"views\": 101}" http://localhost:3000/posts/1
发现,db.json 中 id 为 1 的记录被更新了。
图片
5、更新资源(局部)
curl -X PATCH -H "Content-Type: application/json; charset=UTF-8" -d "{\"title\": \"bar\"}" http://localhost:3000/posts/1
db.json 中 id 为 1 的记录被更新了。
图片
6、删除资源
curl -X DELETE http:/localhost:3000/posts/1
db.json 中 id 为 1 的记录被删除了。
图片
高级用法
当然,除了简单的增删改查之外。这些资源还支持过滤、分页等功能。
1、过滤
比如根据用户 id 过滤:
curl -X GET http://localhost:3000/posts?id=3
[
{
"id": "3",
"title": "foo",
"views": 0
}
]
甚至支持范围过滤:
curl -X GET http://localhost:3000/posts?views_gt=3
[
{
"id": "2",
"title": "another title",
"views": 200
}
]
_gt 表示“great than”,也就是 > 的意思。?views_gt=3 就表示过滤出阅读量过 3 的 post。
全部的过滤符号包括:
- _gt → >
- _lt → <
- _lte → <=
- _gte → >=
- _ne → !=
2、分页
JSON Server 还支持以 page、per_page(默认 10) 参数的形式查询分页数据。
浏览器访问 http://localhost:3000/posts?_page=1&_per_page=1
查看效果:
图片
如此,我们便查询到了第 1 页数据。返回的分页数据放在 data 中,数据中总共有 2 条数据(items),按照每页一条数据总共 2 页数据(pages),下一页是第 2 页(next)。
其他更多用法[3],大家可以参照官方仓库的 README 进行查看,常用功能就是以上这些了。
总结
本文向大家介绍 JSON Sever 这一个基于 JSON 文件帮助你快速搭建 REST API 服务的工具库。
JSON Sever 的安装和使用起来起来非常方便,数据的增删改查都是通过修改背后的 db.json 文件内容实现的,非常适合 Mock 数据服务的搭建。
当然,我甚至认为,一定程度上它也可以作为一个小型、简易的数据存储使用。
好了,希望本文的介绍会对你的工作或者生活有所帮助,感谢你的阅读,再见。
参考资料
[1]JSON Sever: https://github.com/typicode/json-server
[2]JSONPlaceholder 模拟服务: https://jsonplaceholder.typicode.com/guide/
[3]其他更多用法: https://github.com/typicode/json-server?tab=readme-ov-file#params