JSON Server:快速搭建你自己的简易 REST API 服务

开发 前端
本文向大家介绍 JSON Sever 这一个基于 JSON 文件帮助你快速搭建 REST API 服务的工具库。JSON Sever 的安装和使用起来起来非常方便,数据的增删改查都是通过修改背后的 db.json 文件内容实现的,非常适合 Mock 数据服务的搭建。

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

责任编辑:武晓燕 来源: 写代码的宝哥
相关推荐

2023-03-31 08:25:08

零代码开源项目

2023-08-01 07:25:38

Expresso框架API

2024-06-12 00:00:00

2016-09-23 20:04:26

2023-11-19 20:16:43

RESTAPIPOST

2013-10-14 09:29:20

RESTJSONJava

2009-09-27 14:58:47

Python HTTP

2022-10-09 07:21:21

wordpress数据库mysql

2012-02-16 11:32:18

ibmdw

2012-02-24 15:28:33

ibmdw

2022-07-26 07:05:50

PythonAPI语法

2022-02-10 23:38:23

API架构设计

2012-06-27 09:47:05

ibmdw

2024-10-16 09:49:18

2024-01-23 09:08:47

软件架构REST

2022-01-05 12:09:16

异步队列集群

2022-08-12 07:39:30

数字化集成微服务

2023-09-21 11:20:46

2014-03-06 09:23:19

Git服务器Github

2023-08-14 09:00:00

APIgRPCREST
点赞
收藏

51CTO技术栈公众号