只要一個json文件3分鐘搭建一個json伺服器

2020-12-23 程式設計師柳大俠

json-server是一款json數據伺服器,可以對json文件、js腳本生成的json數據、遠程json數據進行RESTFUL風格的增刪改查操作,可以通過參數、分頁、排序、全文搜索、關聯查詢、範圍查詢等進行複雜查詢,對開發者特別是前端開發者是一款非常好用的開發工具。

官網:https://www.npmjs.com/package/json-server

官網

下面我們來介紹具體的用法,

首先確保你本地安裝了node.js。

安裝json-server

npm install -g json-server

創建一個json文件 db.json

{ "posts": [ { "id": 1, "title": "測試標題1", "author": "張三" }, { "id": 2, "title": "測試標題2", "author": "李四" } ], "comments": [ { "id": 1, "body": "這裡是內容體1", "postId": 1 }, { "id": 2, "body": "這裡是內容體2", "postId": 2 } ], "profile": { "name": "測試json" }}

指定json文件運行服務,命令行運行以下命令

json-server --watch db.json

運行服務

伺服器就這麼搭建好了,就是這麼的快,可能還不要3分鐘。

增刪改查-請求示例

請求方式遵循restful風格,

GET-查詢、POST-新增、PUT-修改、PATCH-修改屬性、DELETE-刪除

get請求-查詢

可以看到資源路徑都列在控制臺裡了,瀏覽網址http://localhost:3000/posts ,出現以下結果,posts路徑就是json文件裡的key

[ { "id": 1, "title": "測試標題1", "author": "張三" }, { "id": 2, "title": "測試標題2", "author": "李四" }]

POST請求-新增

使用POST請求會添加一條新記錄,如POST請求:http://localhost:3000/posts,返回新記錄的id。

{ "id": 3}

json文件也被更改

{ "posts": [ { "id": 1, "title": "測試標題1", "author": "張三" }, { "id": 2, "title": "測試標題2", "author": "李四" }, { "id": 3 } ], "comments": [ { "id": 1, "body": "這裡是內容體1", "postId": 1 }, { "id": 2, "body": "這裡是內容體2", "postId": 2 } ], "profile": { "name": "測試json" }}

PUT請求-修改

PUT請求會修改一條記錄,如請求:http://localhost:3000/posts/3,我們在請求body裡輸入以下修改內容:

{ "title":"這是修改的內容", "author":"王五"}

json文件變成了

{ "posts": [ { "id": 1, "title": "測試標題1", "author": "張三" }, { "id": 2, "title": "測試標題2", "author": "李四" }, { "title": "這是修改的內容", "author": "王五", "id": 3 } ], "comments": [ { "id": 1, "body": "這裡是內容體1", "postId": 1 }, { "id": 2, "body": "這裡是內容體2", "postId": 2 } ], "profile": { "name": "測試json" }}

PATCH請求-修改單個屬性

PATCH與PUT的區別在於,PUT的請求內容需要包含整個對象除id外的所有屬性PATCH的請求內容可以是單個屬性。

比如我們PATCH請求:http://localhost:3000/posts/3,body為

{ "title":"這是修改的內容xxxx"}

json文件裡id為3的記錄僅title屬性發生改變,其他欄位不變

{ "posts": [ { "id": 1, "title": "測試標題1", "author": "張三" }, { "id": 2, "title": "測試標題2", "author": "李四" }, { "title": "這是修改的內容xxxx", "author": "王五", "id": 3 } ], "comments": [ { "id": 1, "body": "這裡是內容體1", "postId": 1 }, { "id": 2, "body": "這裡是內容體2", "postId": 2 } ], "profile": { "name": "測試json" }}

DELETE請求-刪除

DELETE請求會刪除一條數據,如請求:http://localhost:3000/posts/3

刪除後的json文件內容發生改變,可以看到id為3的記錄沒了:

{ "posts": [ { "id": 1, "title": "測試標題1", "author": "張三" }, { "id": 2, "title": "測試標題2", "author": "李四" } ], "comments": [ { "id": 1, "body": "這裡是內容體1", "postId": 1 }, { "id": 2, "body": "這裡是內容體2", "postId": 2 } ], "profile": { "name": "測試json" }}

過濾id

瀏覽 http://localhost:3000/posts/1,代表讀取post裡id為1的那條數據,注意不是代表第1條,而是id為1的那條。

{ "id": 1, "title": "測試標題1", "author": "張三"}

過濾參數

瀏覽 http://localhost:3000/posts?author=張三

[ { "id": 1, "title": "測試標題1", "author": "張三" }]

如果有多級也可以用「.」+屬性名查詢如 http://localhost:3000/posts?author.name=張三

排序

通過「_sort」指定排序屬性和「_order」指定asc順序還是desc倒序查詢,如:http://localhost:3000/posts?_sort=id&_order=desc

分頁

通過「_page」和「_limit」進行分頁查詢,如查詢第一頁,每頁20條查詢寫法:http://localhost:3000/posts?_page=1&_limit=20

截取部分

通過「_start」、「_end」和「_limit」參數查詢,如從20條開始查詢10條數據:http://localhost:3000/posts/1/comments?_start=20&_limit=10

不等於查詢

通過「屬性名_ne」寫法如:http://localhost:3000/posts?id_ne=1

[ { "id": 2, "title": "測試標題2", "author": "李四" }]

大於等於/小於等於查詢

通過「屬性名_gte」查詢大於等於,通過「屬性名_lte」查詢小於等於,寫法如:http://localhost:3000/posts?views_gte=10&views_lte=20

like查詢

通過「屬性名_like」的寫法查詢如http://localhost:3000/posts?title_like=標題1

[ { "id": 1, "title": "測試標題1", "author": "張三" }]

全文搜索

通過q查詢參數如: http://localhost:3000/posts?q=標題

[ { "id": 1, "title": "測試標題1", "author": "張三" }, { "id": 2, "title": "測試標題2", "author": "李四" }]

關聯查詢

通過_embed參數請求如:http://localhost:3000/posts?_embed=comments ,代表posts關聯comments。

[ { "id": 1, "title": "測試標題1", "author": "張三", "comments": [ { "id": 1, "body": "這裡是內容體1", "postId": 1 } ] }, { "id": 2, "title": "測試標題2", "author": "李四", "comments": [ { "id": 2, "body": "這裡是內容體2", "postId": 2 } ] }]

指定埠

命令增加 --port參數

json-server --watch db.json --port 3004

使用js腳本生成數據代替json

創建一個index.js文件用於生成數據

module.exports = () => { const data = { users: [] } // Create 1000 users for (let i = 0; i < 1000; i++) { data.users.push({ id: i, name: `user${i}` }) } return data}

運行服務指定js文件

json-server index.js

使用遠程地址加載數據

json-server http://example.com/file.jsonjson-server http://jsonplaceholder.typicode.com/db

作為靜態文件伺服器

創建一個public目錄,創建一個內容為hello world的index.html文件。

mkdir publicecho 'hello world' > public/index.htmljson-server db.json

訪問 http://localhost:3000/ ,根路徑會默認顯示public目錄下的內容,會顯示index.html的內容。

'hello world'也可以通過--static參數指定其他路徑的目錄

json-server db.json --static ./some-other-dir

自定義請求路由

創建一個 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

以下訪問左邊的路徑分別對應右邊的原始請求效果

/api/posts ==》 /posts/api/posts/1 ==》 /posts/1/posts/1/show ==》 /posts/1/posts/javascript ==》 /posts?category=javascript/articles?id=1 ==》 /posts/1更多功能可以通過json-server的官網查閱,希望本文對你有所幫助。

相關焦點

  • 深入 .NET Core 基礎:deps.json, runtimeconfig.json 以及 dll
    如果您已經是一個 .NET Core 的開發者,並且好奇 *.deps.json 或者 *.runtimeconfig.json 文件是做什麼的,我也會涵蓋這些內容。我將會終止 Visual Studio 的魔法,而一直使用命令行工具。
  • JSON解析:JSON對象還能這樣???
    key2":"value2"...}, {"key1":"value1", "key2":"value3"...}...]而需要處理的數據格式很明顯是純粹的key - value,也就是這種格式:{"key1" : {"key1":"value1", "key2":"value2"...}, "key2" : {"key1":"value1", "key2":"value3"...}...}
  • npm配置文件package.json裡面的欄位你知道多少
    來聊聊npm的配置文件吧!創建一個前端項目目前都離不開npm包管理工具,所以根目錄必須有一個package.json文件如何創建呢?name: 項目(包,模塊)名稱-- 沒有特殊的要求,駝峰或者橫線分隔都可以也是最常用的version: 版本號(~1.2.3)(1.2.3)(^1.2.3)-- 大版本和小版本-- 1代表大版本
  • 如何搭建國際版我的世界伺服器
    不久前,我通過學習與摸索,成功地在雲端建了一個國際版1.16.1MC純淨版伺服器,並用HMCL客戶端開始了愉快的划水。寫這篇文章,是為了記錄一下自己的建服歷程,並且希望能幫助到一些需要的朋友。如果您沒有建服經驗,在做好支出預算的情況下,可以按照本文【除了租用伺服器以外的】內容搭建一個MC伺服器。
  • Facebook:如何在Golang中搭建GraphQL?
    全文共9939字,預計學習時長25分鐘多年來,人們一直在使用REST API來滿足開發需求,但得完成大量不必要的調用後,開發者才能靈活使用。例如,如果Web和行動裝置所需的數據不同,我們還須針對Web和行動裝置創建兩個不同的端點。
  • 大家一般用什麼工具測試HTTP和json接口?
    歷程以前webservice接口,用soapUI可視化界面測試;到了Restful興起的時候測試json接口我就開始用Python編寫。下面列舉幾個市面上會提到的工具:Postman。Apifox。原則是:只要達到測試的目的,不管使用什麼工具,或是什麼程式語言都可以。測試接口這裡我以Python程式語言為例,進行一個post接口請求。是不是很簡單,就能模擬請求,以及得到響應的信息。
  • 樹莓派|NextCloud搭建專屬私有同步雲盤
    百度網盤限速大家都懂沒有會員的痛,手機拍的照片太多,又想隨時方便歸檔瀏覽,今天小壹教大家樹莓派搭建私有雲盤,讓你方便管理文件照片。效果:環境準備樹莓派 4B+4G系統:Raspberry Pi OS (32-bit) with desktop網盤軟體:NextCloud18.0.4LAMP環境搭建1.環境搭建APACHE: Apache/2.4.25 (Raspbian)MYSQL: Ver 15.1 Distrib 10.3.22
  • 3分鐘短文|Linux 使用curl發起post請求的4個常用方式
    引言cURL是一種命令行實用程序,用於使用一種受支持的協議,從遠程伺服器傳輸數據,或將數據傳輸到遠程伺服器。默認情況下,已安裝在macOS和大多數Linux發行版上。開發人員可以使用cURL來測試API接口,查看響應頭和發出HTTP請求。
  • JSON.stringify() 的 5 個秘密特性
    zoomdong連結:https://juejin.im/post/5e842da76fb9a03c854610c7原文作者:原文作者:Prateek Singh原文連結:https://medium.com/javascript-in-plain-english/5-secret-features-of-json-stringify-c699340f9f27
  • 「分享」|hexo搭建個人博客
    如果你有自己的伺服器,並且想更多推廣出去的話,那可就要好好多打理啦。本文採用的主要是hexo來搭建。以下內容如果是用sudo apt-get install的話,缺少依賴時應先運行sudo apt-get update,其他的內容後續想到再補充。1.
  • 利用VPS搭建私人觀影平臺
    答案是有的,我們可以藉助於PLEX+transmission相結合的方式打造一個你自己的私人觀影小蜜。當然是有更好的方式的,比如NAS,但苦於投入對於目前的我來說有些大,故暫不考慮,有朝一日待我錢財充盈再來考慮。缺點?當然也是不少的,比如需要一定的技術基礎,需要一定的小額資金投入去購買自己的伺服器。
  • python入門第十三課:文件的讀寫與分析介紹,異常處理和代碼重構
    1、第一行的是一個with as語句,它先執行open()函數,然後將open()的返回值賦值給file_object。2、open()函數,它的作用是打開一個文件,並返回一個文件的對象。參數'testfile.txt'是要打開的文件名,參數encoding='UTF-8'指用UTF-8的編碼解析文件。
  • Python處理音頻文件的實用姿勢
    但如果是想從音頻裡消除人聲,只要背景音樂,就需要對音頻內容做些處理。一個假設:一般背景音樂的左右聲道不同,這樣才有立體聲效果;而人聲左右聲道相同。比如spleeter就是一個利用已有機器訓練模型來分離聲音信號的模塊,具體使用時支持3種聲音分離模式:2stems:人聲和其他聲音4stems:人聲、貝斯、鼓和其他聲音
  • 區分Protobuf 3中缺失值和默認值
    增加標識欄位是通過額外增加一個欄位來達到區分的目的。例如:增加一個has_show_field欄位標識is_show是否為有效值。如果has_show_field為true則is_show為有效值,否則認為is_show未設置值。
  • 戰神引擎手遊架設單機和伺服器詳細流程
    教程準備1、戰神引擎復古手遊服務端和配套客戶端2、公網伺服器一臺,有固定IP,開所有埠,如果架設單機,那麼電腦是Win7/Win10系統就行3、安卓籤名工具,如果要蘋果玩,要買籤名,15-18元一個。安卓手機免費籤名。第一步:把戰神引擎服務端解壓到D盤,必須要放在D盤,放在其他的盤裡面,會因為路徑的問題,導致報錯。
  • 一張圖教你快速玩轉vue-cli3
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言本文系統的梳理了vue-cli3搭建項目的常見用法,目的在於讓你快速掌握獨立搭建vue項目的能力。