用JSON-server模擬REST API(三) 進階使用

前面演示瞭如何安裝並運行 json server , 和使用第三方庫真實化模擬數據 , 下面將展開更多的配置項和數據操做。css

配置項

在安裝好json server以後,經過 json-server -h 能夠看到以下配置項:前端

json-server [options] <source>

Options:
  --config, -c       指定 config 文件                  [默認: "json-server.json"]
  --port, -p         設置端口號                                   [default: 3000]
  --host, -H         設置主機                                   [默認: "0.0.0.0"]
  --watch, -w        監控文件                                           [boolean]
  --routes, -r       指定路由文件
  --static, -s       設置靜態文件
  --read-only, --ro  只容許 GET 請求                                    [boolean]
  --no-cors, --nc    禁止跨域資源共享                                   [boolean]
  --no-gzip, --ng    禁止GZIP                                          [boolean]
  --snapshots, -S    設置快照目錄                                     [默認: "."]
  --delay, -d        設置反饋延時 (ms)
  --id, -i           設置數據的id屬性 (e.g. _id)                     [默認: "id"]
  --quiet, -q        不輸出日誌信息                                     [boolean]
  --help, -h         顯示幫助信息                                       [boolean]
  --version, -v      顯示版本號                                         [boolean]

Examples:
  bin db.json
  bin file.js
  bin http://example.com/db.json

既能夠經過命令行方式單行配置,如node

json-server db.js -p 3003 -d 500 -q -r ./routes.json

,也能夠經過 json-server.json 文件進行配置後:git

# /mock/json-server.json

{
    "host": "0.0.0.0",
    "port": "3003",
    "watch": false,
    "delay": 500,
    "quiet": true,
    "routes": "./routes.json"
}

運行github

json-server db.js

返回靜態文件

/mock 下創建 public 目錄,便可直接訪問其下的全部靜態文件,包括但不限於
js, css ,markdown 文件等。web

地址欄輸入 http://localhist:3003/readme.md 便可訪問如下文件正則表達式

# /mock/public/readme.md

# hello Mr DJ,這節奏不要停

移動設備訪問

經過 json server 創建的rest api服務默承認以在局域網中經過WIFI訪問接口。
windows下面經過 ipconfig 查找到電腦的局域網地址.mac設備是經過 ifconfig | grep "inet " | grep -v 127.0.0.1 查看。
好比個人電腦局域網ip是 192.168.0.6,在手機上訪問 http://192.168.0.6:3003 便可。npm

自定義路由

能夠經過自定義路由的形式,簡化數據結構,或是創建高彈性的web api,例如json

# /mock/routes.json

{
  "/news/:id/show": "/news/:id",
  "/topics/:id/show": "/news/:id",
    
}

訪問 /news/1/showtopics/1/show 均返回指定的 /news/1 內容。windows

* 須要注意的是,路由必須以 / 開頭

npm啓動

相比在終端中直接輸入各類命令,我更喜歡利用 node scripts 來處理任務,在 /mock 下創建文件 package.json,而後運行 npm run mock

# /mock/package.json

{
  "scripts": {
    "mock": "json-server db.js"
  }
}

數據過濾

數據過濾是 json server 中很是強力的功能。經過url上簡單的query字段,便可過濾出各類各樣的數據。
示例數據源:

[
    {
        "id": 0,
        "title": "元小總小把清保住影辦歷戰資和總由",
        "desc": "共先定製向向圓適者定書她規置鬥平相。要廣確但教金更前三響角面等以白。眼查何參提適",
        "tag": "值集空",
        "views": 3810,
        "images": [
            "http://dummyimage.com/200x100/79f2a5&text=別角置",
            "http://dummyimage.com/200x100/f28279&text=收面幾容受取",
            "http://dummyimage.com/200x100/7993f2&text=作件"
        ]
    },
    {
        "id": 1,
        "title": "物器許條對越復術",
        "desc": "方江周是府整頭書生權部部條。始克識史但給又約同段十子按者感律備。關長廠平難山從合",
        "tag": "分七眼術保",
        "views": 4673,
        "images": [
            "http://dummyimage.com/200x100/79f2a5&text=別角置"
        ]
    },
    {
        "id": 2,
        "title": "但學卻連質法計性想般最",
        "desc": "以羣親它天即資幾行位具回同務度。場養驗快但部光天火金時內我。任提教毛辦結論感看還",
        "tag": "響六",
        "views": 4131,
        "images": [
            "http://dummyimage.com/200x100/79f2a5&text=別角置",
            "http://dummyimage.com/200x100/f28279&text=收面幾容受取",
            "http://dummyimage.com/200x100/7993f2&text=作件"
        ]
    },
    ...
    {
        "id": 99,
        "title": "則羣起然線部其深我位價業紅候院",
        "desc": "爲高值務須西生型住斷況裏聽。志置開用她你然始查她響元還。照員給門次府此據它後支越",
        "tag": "何你",
        "views": 2952,
        "images": [
            "http://dummyimage.com/200x100/79f2a5&text=別角置"
        ]
    }
]

屬性值(Filter)

使用 . 操做對象屬性值

// 獲取圖片數量爲3,且標籤字數爲2的新聞

GET /news?images.length=3&tag.length=2

分割(Slice)

使用 _start_end 或者 _limit (response中會包含 X-Total-Count)

// 獲取id=10開始的5篇新聞

GET /news?_start=10&_limit=5

// 獲取id=20開始,id=35結束的新聞

GET /news?_start=20&_end=35

排序(Sort)

使用 _sort_order (默認使用升序(ASC))

// 按照瀏覽數量降序排列

GET /news?_sort=views&_order=DESC

運算符(Operators)

使用 _gte_lte 選取一個範圍

// 選取瀏覽量在2000-2500之間的新聞

GET /news?views_gte=2000&views_lte=2500

使用 _ne 排除一個值

// 選擇tag屬性不是 "國際新聞" 的分類

GET /news?tag_ne=國際新聞

使用 _like 進行模糊查找 (支持正則表達式)

// 查找title中含有 "前端" 字樣的新聞 

GET /news?title_like=前端

全文檢索(Full-text search)

使用 q,在對象所有value中遍歷查找包含指定值的數據

// 查找新聞所有字段包含 "強拆" 字樣的數據

GET /news?q=強拆

關係圖譜(Relationships)

獲取包含下級資源的數據, 使用 _embed

GET /news?_embed=comments
GET /news/1?_embed=comments

獲取包含上級資源的數據, 使用 _expand

GET /news?_expand=post
GET /news/1?_expand=post

做爲中間件

除了獨立做爲rest api 服務器以外, json server 一樣能夠做爲諸如 Express 之類框架的中間件使用,具體API詳見 json server模塊

參考資料

json-server源碼 : json-server
mockjs源碼 : mockjs
demo : 示例代碼

全文完

相關文章
相關標籤/搜索