乐趣区

关于前端:jsonserver30秒无代码搭建一个完整的REST-API服务基础入门

场景

在公司进行 React 或者 Vue 我的项目开发的过程中,在后端尚未筹备好接口时,咱们须要进行数据 mock 来实现页面渲染、模仿前后端交互。

之前咱们都是这么做的:

1. 采纳本地静态数据 json 的形式来模仿接口数据,然而这种形式咱们只能去读取数据,无奈对数据进行增删改等操作。

2. 在本地搭建一个基于 node.js 的服务器,然而这样须要咱们本人写代码去手动搭建本地服务器。

3. 装置 mock.js, 模仿接口去申请 mock 生成的数据,然而 mock.js 生成的数据具备随机性,不肯定使咱们须要的数据。

json-server 退场

理解了过来前端如何模仿接口数据进行联调的几种形式的毛病后,一种新的数据模仿形式 -JSON-Server。

json-server 是基于 Node.js 的服务器,能够间接把一个 json 文件托管成一个具备全 RESTful 格调的 API, 并反对跨域、jsonp、路由订制、数据快照保留等性能的 web 服务器。

JSON-Server 官网文档:https://github.com/typicode/j…

这是官网文档对 json-server 介绍的第一句话:

Get a full fake REST API with zero coding in less than 30 seconds (seriously)

翻译过去就是 30 秒之内搭建一个残缺的 RESTFUL 格调的 API 服务,0 代码, 这个是不是开玩笑的

从这句话中咱们就能够看到 json-server 的劣势:

1.0 代码疾速搭建

2. 完全符合 RESTFUL 格调的 API 服务实现

装置

npm install -g json-server 全局装置

我的项目文件创建和数据初始化

新建 db.json

{
  "products": [
    {
      "name": "华为",
      "id": 1,
      "price": 4000,
      "specs": {"width": 11}
    },
    {
      "name": "苹果",
      "id": 2,
      "price": 5000,
      "specs": {"width": 12}
    },
    {
      "name": "小米",
      "id": 3,
      "price": 6000,
      "specs": {"width": 13}
    }
  ]
}

db.json 能够了解为本地一个数据库,当咱们拜访对应的增删改查路由接口时,db.json 中的数据是实时更新的

我的项目配置

1. 自定义配置

 能够在 package.json 文件中的 scripts 中进行如下配置:"json-server": "json-server --watch db.json --port 3006"

2. 而后执行 yarn json-server 命令

3. 当初拜访 http://localhost:3006/products 就能够获取所有的商品数据了

根底

### get 申请

  /products 申请所有商品
  /products/2 申请 id 为 2 的商品
  /products?name= 华为 申请 name 为华为的商品 

### post 申请

  /products
  参数 params:{
      "name": "vivo",
      "id": 4,
      "price":3600
  }
  向商品列表中增加一条商品 

### put 申请(全副更新)

  /products/5
  params:{
    "name": "联想 666",
    "price":3250
  }
  将 id 为 5 的商品的对象全副替换为 {"id":5,"name": "联想 666","price":3250}

### patch 申请(局部更新)

  /products/4
  params:{price:3200}
  将 id 为 4 的商品的 price 值改为 3200 其余的属性值不变 

### delete 申请

  /products/1 删除 id 为 1 的商品

## 进阶
##### 过滤查问

/products?name= 小米 &price_gte=6500 合并查问 name 为小米并且 price 大于 6500 元的商品
/products?specs.width=13 规格的宽度为 13 的商品 

#### 条件查问 _gte 大于 _lte 小于 _ne 不等于 _like 蕴含 (含糊查问)

 /products?price_gte=4600 价格大于 4600 的商品
 /products?price_lte=8000 价格小于 8000 的商品 

##### 分页查问

 /products?_page=2&_limit=5 获取第二页的数据 每页申请 5 条 

##### 排序查问

 /products?_sort=price&_order=desc 依据价格进行排序 排序形式为 desc 降序  asc 升序 

##### 任意切片查问

 /products?_start=2&_end=4 从索引值为 2 到索引值为 4 之间的数据 

#### 全文检索查问

 /products?q= 米 查问全副数据中蕴含”米“关键字的数据

json-server 路由配置

很多时候咱们须要的路由接口可能不是简略的 http://localhost:3000/products 这种格局的,而是
http://localhost:3000/api/pro… 这是咱们就须要对路由接口进行自定义配置。

新建一个 routes.json 文件,进行如下配置

  "/api/*": "/$1",
  "/:resource/:id/show": "/:resource/:id",
  "/posts/:category": "/posts?category=:category",
  "/articles\?id=:id": "/posts/:id"
}

启动命令配置

json-server db.json --routes routes.json

根据 routes.json 文件的配置进行路由重定向:

/api/products # → /products 
 *** 当拜访 /api/products 路由接口时,服务器会重定向到 /products 来拜访数据,上面的路由配置以此类推 ***
/api/products/1  # → /products/1
/products/1/show # → /products/1
/products/ 小米 # → /products?name= 小米
/products?id=1 # → /products/1

json-server 自定义配置

自定义配置能够通过上面两种形式进行配置

1. 新建 json-server-config.json

进行命令行配置:json-server –c json-server-config.json db.json 这样的话上面的配置就起作用了

{
  "port": 5000,              // 自定义端口
  "watch": true,             // 主动监听变动
  "static": "./public",      // 动态文件门路
  "read-only": false,        // 是否只能应用 GET 申请
  "no-cors": false,          // 是否反对跨域
  "no-gzip": false,          // 是否反对压缩
  "routes": "route.json"     // 路由配置地址
}
2.json-server 命令行应用
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  (host 地址)                           [default: "localhost"]
  --watch, -w        Watch file(s) (监听 json 文件)                                    [boolean]
  --routes, -r       Path to routes file (路由配置文件) 
  --middlewares, -m  Paths to middleware files (中间件文件)                          [array]
  --static, -s       Set static files directory (动态文件门路)
  --read-only, --ro  Allow only GET requests(是否只反对 get 申请)                          [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"]
  --foreignKeySuffix, --fks  Set foreign key suffix, (e.g. _id as in post_id)
                                                                 [default: "Id"]
  --quiet, -q        Suppress log messages from output                 [boolean]
  --help, -h         Show help (帮忙信息)                                        [boolean]
  --version, -v      Show version number (版本信息)                              [boolean]

命令行执行:
1.source 能够是 json 文件也能够是 js 文件
2. 命令行配置举例说明
json-server -c xxx.config.json –routes routes.json -p 8001 -i pid …. db.json

chrome 插件 web 前端助手 FeHelper 工具

当咱们在浏览器上申请 /products 时,获取到 db.json 中的 json 数据

装置了 FeHelper 后,在浏览器上咱们的数据主动进行格式化,而且 json 数据也能够进行折叠、排序、下载数据等性能,是不是咱们展现的 json 数据也变得好看了!!!


chrome 浏览器装置流程:1. https://github.com/zxlie/FeHelper/tree/master/apps/static/screenshot/crx
   从 github 上下载最新版本的 crx 文件
2.chrome 浏览器地址栏输出:chrome://extensions/ 并关上
3. 右上角开启开发者模式
4. 拖拽 crx 到以后页面,实现装置

理解了 json-server 的根本应用后,咱们在搭建本人的本地 React 或者 Vue 我的项目时,就能够应用 json
-server 搭建本地服务器,对数据库 db.json 外面的数据进行增删改查,不必再放心刷新页面后,操作的数据失落。

接下来就让咱们在理论我的项目中去应用下 json-server 吧!!!

作者对于 json-server 的了解属于根底入门级别,对于文章中的了解或者应用谬误,望各位大神不吝指出,对于 json-server 有那些须要补充的也能够进行评论,作者不胜感激。排版码字不易,感觉对您有所帮忙,就帮忙点个赞吧!

退出移动版