JSON服务器(json-server)

时间:2020-02-23 14:35:22  来源:igfitidea点击:

今天,我们将研究一个非常方便的工具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服务器提供了其他一些有用的选项,例如排序,搜索和分页。