JSON Server 簡介
在前後端分離下,Angular 需要倚賴後端 API 才能對資料庫存取,在實務上,當 API 規格確立後,前端工程師不可能等後端工程師寫好 API 才開始開發,而是一起同時開發,因此前端工程師需要有假 API 才能開發測試。
前端工程師不必為了假 API 安裝後端環境與資料庫,只要安裝 JSON Server,就能模擬出假 API。
Version
JSON Server 0.12.0
安裝 JSON Server
使用 NPM 安裝
1 | $ npm install -g json-server |
將 JSON Server 安裝在 global 環境。
啟動 JSON Server
1 | ~$ cd MyProject |
- 進入
MyProject
專案目錄 - 在專案目錄下建立
json-server
目錄 - 啟動 JSON Server,指定
db.json
為資料庫檔案
若 db.json
檔案存在,則 JSON Server 會以此檔案為資料庫,若不存在,則會建立新的 db.json
檔案。
- 建立
json-server
目錄 - 進入
json-server
目錄 - 在
json-server
目錄啟動 JSON Server,並將db.json
檔案建立在json-server
目錄下 - JSON Server 在
json-server
目錄下產生db.json
檔案 db.json
預設已經有預設資料了- JSON Server 預設提供了網址可供測試
測試 JSON Server
預設 db.json
已經有資料,可藉此測試 JSON Server 是否有成功啟動。
1 | http://localhost:3000/posts |
使用 Postman 測試 http://localhost:3000/posts
,確定能抓到資料。
1 | http://localhost:3000 |
使用瀏覽器測試 http://localhost:3000
,確定 JSON Server 內建 Web server 已經成功啟動。
HTTP Request Method
JSON Server 支援開發中最常用的 GET
、POST
、PUT
、PATCH
與 DELETE
等 request method。
GET
用於取得 resource。
1 | http://localhost:3000/posts |
取得所有 post
資料。
- 選擇
GET
- 輸入
http://localhost:3000/posts
- 按
Send
送出 request - 回傳 JSON 物件陣列
1 | http://localhost:3000/posts/1 |
取得 id
為 1
的 post
資料。
- 選擇
GET
- 輸入
http://localhost:3000/posts/1
- 按
Send
送出 request - 回傳 JSON 物件
POST
用於建立 resource。
1 | http://localhost:3000/posts |
建立新的一筆 post
資料。
- 選擇
POST
- 輸入
http://localhost:3000/posts
- 選擇
Body
- 選擇
raw
格式 - 選擇
JSON (application/json)
格式 - 要新增的 JSON 物件
- 按
Send
送出 request - 回傳所新增的 JSON 物件,並包含
id
- 開啟
/json-server/db.json
- 剛剛新增的
post
已經寫入db.json
PUT
用於更新完整 resource。
1 | http://localhost:3000/posts/2 |
更新 id
為 2
的完整 post
資料。
- 選擇
PUT
- 輸入
http://localhost:3000/posts/2
- 選擇
Body
- 選擇
raw
格式 - 選擇
JSON (application/json)
格式 - 要更新的 JSON 物件 (不用含
id
,要包含全部欄位) - 按
Send
送出 request - 回傳整筆 JSON 物件,並包含
id
- 開啟
/json-server/db.json
- 剛剛更新的
post
已經寫入db.json
使用
PUT
要小心,他是將整個 JSON 物件寫入原來的id
,也就是說原本有3
個欄位,若PUT
時的 JSON 物件只有 2 個欄位,則PUT
後就只剩下2
個欄位。
PATCH
用於更新部分 resource。
1 | http://localhost:3000/posts/2 |
更新 id
為 2
的部分 post
資料。
- 選擇
PUT
- 輸入
http://localhost:3000/posts/2
- 選擇
Body
- 選擇
raw
格式 - 選擇
JSON (application/json)
格式 - 要更新的 JSON 物件 (不用含
id
,不用包含全部欄位) - 按
Send
送出 request - 回傳整筆 JSON 物件,並包含
id
- 開啟
/json-server/db.json
- 剛剛更新的
post
已經寫入db.json
,且只更新1
個欄位資料。
DELETE
用於刪除 resource。
1 | http://localhost:3000/posts/2 |
- 選擇
DELETE
- 輸入
http://localhost:3000/posts/2
- 按
Send
送出 request - 回傳空的 JSON 物件
- 開啟
/json-server/db.json
- 剛剛更新的
post
資料已經被刪除。
修改資料
JSON Server 並沒有搭配資料庫,因此也不需要 Sequel Pro 或 DataGrip 之類的工具連到資料庫,它只是個文字檔。
/json-server/db.json
- 開啟
/json-server/db.json
- 每個 field 相當於資料庫的 table 名稱,可自行修改,後面接的是 JSON 物件陣列,也可以自行修改 JSON 建立假資料
建立 Snapshot
在實務上有時會想將目前的資料先存起來做備份,當作 golden sample,JSON Server 可以幫我們將目前的所有資料備份成 snapshot。
熱鍵:S + enter
- 在 terminal 下輸入熱鍵
S + enter
- JSON Server 會亂數產生檔案,將目前的
db.json
做 snapshot
自訂新 Route
JSON Server 預設是以 table 名稱作為 route,但實務上 API 的 route 可能不一樣,如 /api/posts
與 api/posts/1
。
新增 routes.json
json-server/routes.json
1 | { |
將 /api/ports
指向原本的 /posts
。
將 /api/posts/1
只像原本的 /posts/1
。
- 新增
json-server/routes.json
- 編輯 routes 的對應規則
套用新 Route
1 | ~/MyProject/json-server$ json-server db.json --routes routes.json |
重新啟動 JSON Server,加上 —-routes
參數,指定套用 routes.json
。
重新啟動 JSON Server,並加上
—-routes
參數與routes.json
JSON Server 提示載入
routes.json
顯示新增的 route
測試新 Route
1 | http://localhost:3000/api/posts |
取得所有 post
資料。
- 使用新的
http://localhost/api/posts
測試 - 一樣回傳 JSON 物件陣列
1 | http://localhost:3000/api/posts/1 |
取得 id 為 1
的 post
資料。
- 使用新的
http://localhost/api/posts/1
測試 - 一樣回傳 JSON 物件
Conclusion
- JSON Server 讓我們不用安裝後端環境,也不用安裝資料庫,就可以快速建立前端開發測試用的 API。
- JSONPlaceholder 其實就是以 JSON Server 架設,若為了 demo 方便,可直接使用 JSONPlaceholder,但若在實務上使用,JSON Server 的彈性更高。
- 本文僅針對實務上最常用的功能介紹 JSON Server,更進階的功能請參考 reference 部分。