← HTTP / Browser Protocols

WEB PROTOCOLS · 90

REST / CRUD / HTTP Status:把 Resource Operation 映射到 Protocol Contract

REST 不是「一定要用某種 URL 格式」。在入門層,先學會把 resource、HTTP method、status、representation 建成一致 contract。這樣 client/server 才能針對同一語意溝通。

Learning outcomes

1. Resource-oriented routes

GET    /courses
GET    /courses/42
POST   /courses
PATCH  /courses/42
DELETE /courses/42

URL 主要描述 resource;method 描述 operation intent。

2. CRUD mapping

CRUD常見 HTTP
CreatePOST
ReadGET
UpdatePATCH / PUT
DeleteDELETE

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 unavailable

Status 應幫 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 exist

Project 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

  1. Resource URL 為什麼不必塞 action verb?
  2. 401 與 403 差在哪?
  3. POST retry 為什麼可能比 GET 危險?
  4. 設計一組 Course CRUD API contract。