API 設計練習題 (Practice - API Design)


Part 1:API 設計決策框架(1-05)

Q1(Recall):1-05 PDF 的決策樹有哪兩個提問?分別導向哪些選項?


Q2(Recall):REST、GraphQL、RPC 各自的「設計導向」是什麼?


Q3(Application):你在設計一個內部訂單服務給其他微服務呼叫,應該選什麼?為什麼?


Q4(Application):產品經理說「行動 App 在弱網路下載入很慢,因為 API 回傳一堆用不到的欄位」。你會推薦什麼?


Part 2:REST 架構風格(1-06)

Q5(Recall):以下哪些 HTTP 方法是冪等的?(A) GET (B) POST (C) PUT (D) PATCH (E) DELETE


Q6(Recall):Path Parameter、Query Parameter、Request Body 各自適合什麼用途?


Q7(Recall):REST 的 Over-fetching 和 Under-fetching 分別是什麼?


Q8(Recall):REST 中 401 和 403 狀態碼的差別是?


Q9(Application):以下 API 設計哪些是反模式?怎麼改?
(A) POST /updateUser
(B) DELETE /users/123
(C) GET /deleteUser?id=123
(D) PUT /users/123 帶完整 user body
(E) POST /getUserList


Q10(Analysis):為什麼 GET 不應該帶 Request Body?


Q11(Analysis):為什麼重試非冪等 API(如 POST /payments)很危險?怎麼解?


Part 3:GraphQL(1-07)

Q12(Recall):GraphQL 的三種操作分別是什麼?各自對應什麼用途?


Q13(Recall):GraphQL 的 N+1 問題是什麼?如何解決?


Q14(Recall):為什麼 GraphQL 的 HTTP cache 比 REST 困難?


Q15(Application):一個電商 App 首頁要顯示「使用者資料 + 最近訂單 + 未讀通知」。用 REST 和 GraphQL 分別怎麼做?


Q16(Analysis):為什麼面試官常建議「不要預設推 GraphQL」?


Part 4:RPC 與 gRPC(1-08)

Q17(Recall):gRPC 使用什麼序列化格式?為什麼比 JSON 快?


Q18(Recall):gRPC 支援哪四種呼叫模式?各舉一個使用場景。


Q19(Application):在面試中,對外 API 和內部微服務通訊分別應該用什麼協定?


Q20(Analysis):gRPC 的「耦合度高」具體表現在哪裡?怎麼緩解?


Part 5:API Security(1-09)

Q21(Recall):Authentication 和 Authorization 的差異是什麼?


Q22(Recall):以下配對何者正確?
(A) Authentication = 你能做什麼
(B) Authorization = 你是誰
(C) JWT 通常放在 Authorization: Bearer header
(D) OAuth 2.0 主要用於內部微服務通訊


Q23(Recall):RBAC 和 ABAC 的差異是什麼?各舉一個例子。


Q24(Application):設計一個公開的「第三方應用存取用戶 Google Drive」的授權流程,應該用什麼機制?


Q25(Application):公司有一個內部管理系統,需要控制 Admin / Editor / Viewer 的權限。前端是 SPA,後端是多個微服務。你會怎麼組合 AuthN + AuthZ?


Q26(Analysis):JWT 有哪些常見安全陷阱?如何避免?