WEB PROTOCOLS · 90
REST / CRUD / HTTP Status:把 Resource Operation 映射到 Protocol Contract
REST 不是「一定要用某種 URL 格式」。在入門層,先學會把 resource、HTTP method、status、representation 建成一致 contract。這樣 client/server 才能針對同一語意溝通。
Learning outcomes
- 能以 resource 設計基本 REST endpoint。
- 能將 CRUD 與 GET/POST/PATCH/DELETE 對應。
- 能選常見 2xx/4xx/5xx status。
- 能區分 idempotent operation 的基本概念。
1. Resource-oriented routes
GET /courses
GET /courses/42
POST /courses
PATCH /courses/42
DELETE /courses/42URL 主要描述 resource;method 描述 operation intent。
2. CRUD mapping
| CRUD | 常見 HTTP |
|---|---|
| Create | POST |
| Read | GET |
| Update | PATCH / PUT |
| Delete | DELETE |
3. Success statuses
200 OK
201 Created
204 No Content建立 resource 常用 201;無 body 的成功 delete/update 可考慮 204。實際 contract 應一致。
4. Client vs Server failure
400 invalid input
401 unauthenticated
403 forbidden
404 not found
409 conflict
500 unexpected server error
503 temporarily unavailableStatus 應幫 client 分類下一步,不是所有錯都回 200 + {ok:false}。
5. Idempotency 基本概念
同一個 GET 重送通常不應改 server state;PUT/DELETE 常設計成重送後結果一致。POST create 則可能每次新增一筆,因此 retry 需要更小心。
DELETE /courses/42
DELETE /courses/42
final desired state:
course 42 does not existProject checkpoint:Request Map Final
替 Course API 定義 CRUD endpoints、success/error statuses、request/response JSON,再用 Network panel 驗證。
POST /courses
→ 201
{
"id": 42,
"title": "JavaScript"
}
invalid input
→ 400
{
"error": "invalid_title"
}Debug evidence:Client 說「新增失敗」
先看 status:400 是 input contract、401/403 是 identity/permission、409 是 state conflict、500 才是 unexpected server failure。分類後再進下一層。
Knowledge check
- Resource URL 為什麼不必塞 action verb?
- 401 與 403 差在哪?
- POST retry 為什麼可能比 GET 危險?
- 設計一組 Course CRUD API contract。