如何打造一個漂亮乾淨俐落的 RESTful API
1. 路由設計(Endpoints)
-
使用名詞,不用動詞
✅/users、/orders/123
❌/getUsers、/createOrder -
用複數表示資源
-
/users→ 所有使用者 -
/users/123→ 指定使用者
-
-
巢狀結構反映資源關係
/users/123/orders→ 指定使用者的訂單
2. HTTP 方法(Verbs)
-
GET → 讀取
-
POST → 新增
-
PUT → 完整更新
-
PATCH → 部分更新
-
DELETE → 刪除
範例:
-
GET /users→ 取得所有使用者 -
POST /users→ 建立新使用者 -
GET /users/123→ 查詢 ID=123 的使用者 -
PUT /users/123→ 覆蓋使用者資料 -
PATCH /users/123→ 更新使用者部分資料 -
DELETE /users/123→ 刪除使用者
3. 資料格式(Representation)
-
一致回傳 JSON(除非另有需求)。
-
欄位命名:小寫 + 下底線/駝峰一致性
- 建議駝峰:
createdAt,userName
- 建議駝峰:
回應範例:
{
"id": 123,
"name": "Alice",
"email": "alice@example.com",
"createdAt": "2025-09-13T10:30:00Z"
}
4. 錯誤處理(Error Handling)
-
使用標準 HTTP 狀態碼:
-
200 OK→ 成功 -
201 Created→ 成功建立 -
400 Bad Request→ 客戶端錯誤 -
401 Unauthorized→ 未登入 -
403 Forbidden→ 沒權限 -
404 Not Found→ 找不到 -
500 Internal Server Error→ 伺服器錯誤
-
-
回傳清楚的錯誤訊息:
{
"error": "ValidationError",
"message": "Email format is invalid",
"field": "email"
}
5. 分頁與查詢(Filtering & Pagination)
-
Query Parameters
/users?role=admin&status=active
-
分頁標準做法
/users?page=2&limit=20
-
回傳分頁資訊:
{
"data": [...],
"meta": {
"page": 2,
"limit": 20,
"total": 145
}
}
6. 版本控制(Versioning)
-
在 URL 或 Header 指定版本:
-
/api/v1/users -
Header:
Accept: application/vnd.myapp.v1+json
-
7. 文件與一致性
-
自動文件化(例如 Swagger / OpenAPI)。
-
一致的結構與風格 → 讓團隊協作更順暢。
✅ 總結:
一個漂亮乾淨的 RESTful API =
👉 直覺的 URL 結構(名詞化、分層清楚)
👉 語意正確的 HTTP 方法
👉 一致的資料格式與錯誤回應
👉 支援分頁、查詢、版本化
👉 有清楚的文件與風格指南