JSON服务器(json-server)
今天,我们将研究一个非常方便的工具json-server,它可以在一分钟内为您提供一个模拟剩余的json服务器。
在常规企业应用程序中,您需要使用许多团队和第三方API。
想象一下,您必须调用第三方静态Web服务,该服务将使您可以使用JSON数据。
您的时间安排很紧,因此您不能等待他们完成工作然后再开始自己的工作。
如果您希望有一个样机Rest Web服务来为您获取演示数据,那么json-server是您正在寻找的工具。
JSON服务器
JSON Server是一个节点模块,可用于在不到一分钟的时间内创建演示剩余json网络服务。
您只需要一个JSON文件即可获取示例数据。
安装JSON服务器
您应该在计算机上安装NPM。
如果没有,请参考这篇文章以安装NPM。
下面显示了一个在我的机器上安装输出信息的" liner"命令。
$npm install -g json-server npm WARN deprecated [email protected]: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree. /usr/local/bin/json-server -> /usr/local/lib/node_modules/json-server/bin/index.js - [email protected] node_modules/json-server/node_modules/raw-body/node_modules/bytes /usr/local/lib └─┬ [email protected] ├─┬ [email protected] │ └── [email protected] ├─┬ [email protected] │ └── [email protected] ├─┬ [email protected] │ └─┬ [email protected] │ └── [email protected] ├─┬ [email protected] │ └─┬ [email protected] │ ├── [email protected] │ └─┬ [email protected] │ └── [email protected] └─┬ [email protected] ├─┬ [email protected] │ └─┬ [email protected] │ └── [email protected] └─┬ [email protected] └─┬ [email protected] └─┬ [email protected] └── [email protected] $
检查json服务器版本和选项
$json-server -v 0.8.10 $json-server -help /usr/local/bin/json-server [options] <source> Options: --config, -c Path to config file [default: "json-server.json"] --port, -p Set port [default: 3000] --host, -H Set host [default: "0.0.0.0"] --watch, -w Watch file(s) [boolean] --routes, -r Path to routes file --static, -s Set static files directory --read-only, --ro Allow only GET requests [boolean] --no-cors, --nc Disable Cross-Origin Resource Sharing [boolean] --no-gzip, --ng Disable GZIP Content-Encoding [boolean] --snapshots, -S Set snapshots directory [default: "."] --delay, -d Add delay to responses (ms) --id, -i Set database id property (e.g. _id) [default: "id"] --quiet, -q Suppress log messages from output [boolean] $
运行JSON服务器
现在是时候启动我们的json服务器了。
以下是包含我的员工json数据的示例文件。
{ "employees": [ { "id": 1, "name": "hyman", "salary": "10000" }, { "name": "David", "salary": "5000", "id": 2 } ] }
这里的重点是数组即员工的名称。
JSON服务器将基于此创建REST API。
让我们用上述文件启动json服务器。
$json-server --watch db.json \{^_^}/hi! Loading db.json Done Resources https://localhost:3000/employees Home https://localhost:3000 Type s + enter at any time to create a snapshot of the database Watching...
不要关闭此终端,否则它将杀死json-server。
以下是示例CRUD请求和响应。
JSON Server GET –阅读所有员工
$curl -X GET -H "Content-Type: application/json" "https://localhost:3000/employees" [ { "id": 1, "name": "hyman", "salary": "10000" }, { "name": "David", "salary": "5000", "id": 2 } ] $
根据json-server的ID获取员工
$curl -X GET -H "Content-Type: application/json" "https://localhost:3000/employees/1" { "id": 1, "name": "hyman", "salary": "10000" } $
JSON服务器POST –创建员工
$curl -X POST -H "Content-Type: application/json" -d '{"name": "Lisa","salary": "2000"}' "https://localhost:3000/employees" { "name": "Lisa", "salary": 2000, "id": 3 } $
JSON Server PUT –更新员工数据
$curl -XPUT -H "Content-Type: application/json" -d '{"name": "Lisa", "salary": "8000"}' "https://localhost:3000/employees/3" { "name": "Lisa", "salary": 8000, "id": 3 } $
JSON服务器DELETE –删除员工
$curl -X DELETE -H "Content-Type: application/json" "https://localhost:3000/employees/2" {} $curl -GET -H "Content-Type: application/json" "https://localhost:3000/employees" [ { "id": 1, "name": "hyman", "salary": "10000" }, { "name": "Lisa", "salary": 8000, "id": 3 } ] $
如您所见,json-server通过简单的JSON创建了供我们使用的演示API。
请注意,所有的PUT,POST,DELETE请求都将保存到db.json文件中。
现在,GET和DELETE的URI相同,而POST和PUT请求的URI相同。
好了,我们也可以使用简单的映射文件来创建自定义URI。
json-server自定义路由
创建一个具有自定义路由的文件,供我们的json服务器使用。
routes.json
{ "/employees/list": "/employees", "/employees/get/:id": "/employees/:id", "/employees/create": "/employees", "/employees/update/:id": "/employees/:id", "/employees/delete/:id": "/employees/:id" }
我们还可以更改json服务器端口并像第三方API一样进行仿真,只需在实际服务就绪时更改基本URL,您就可以使用了。
现在,如下所示再次启动JSON服务器。
$json-server --port 7000 --routes routes.json --watch db.json (node:60899) fs: re-evaluating native module sources is 不支持. If you are using the graceful-fs module, please update it to a more recent version. \{^_^}/hi! Loading db.json Loading routes.json Done Resources https://localhost:7000/employees Other routes /employees/list -> /employees /employees/get/:id -> /employees/:id /employees/create -> /employees /employees/update/:id -> /employees/:id /employees/delete/:id -> /employees/:id Home https://localhost:7000 Type s + enter at any time to create a snapshot of the database Watching...
它显示了我们定义的自定义路线。
具有自定义路由的json-server示例
以下是一些命令及其自定义路由输出示例。
$curl -X GET -H "Content-Type: application/json" "https://localhost:7000/employees/list" [ { "id": 1, "name": "hyman", "salary": "10000" }, { "name": "Lisa", "salary": 8000, "id": 3 } ] $curl -X GET -H "Content-Type: application/json" "https://localhost:7000/employees/get/1" { "id": 1, "name": "hyman", "salary": "10000" } $curl -X POST -H "Content-Type: application/json" -d '{"name": "Lisa","salary": "2000"}' "https://localhost:7000/employees/create" { "name": "Lisa", "salary": 2000, "id": 4 } $curl -XPUT -H "Content-Type: application/json" -d '{"name": "Lisa", "salary": "8000"}' "https://localhost:7000/emloyees/update/4" { "name": "Lisa", "salary": 8000, "id": 4 } $curl -XDELETE -H "Content-Type: application/json" "https://localhost:7000/employees/delete/4" {} $curl -GET -H "Content-Type: application/json" "https://localhost:7000/employees/list" [ { "id": 1, "name": "hyman", "salary": "10000" }, { "name": "Lisa", "salary": 8000, "id": 3 } ] $
JSON服务器提供了其他一些有用的选项,例如排序,搜索和分页。