文件化不是做完才補,是設計的一部分

一句話總結:好的 API 文件應該自動產生、即時更新,而不是某個工程師在 deadline 前一天趕出來的 PDF。

結論先講:用 OpenAPI 規範定義 API,工具自動產生文件和 client SDK。手寫的文件一定會過期,自動產生的才能跟 code 同步。

OpenAPI:API 的真相只有一份

OpenAPI Specification(前身叫 Swagger)是描述 RESTful API 的標準格式。你用 YAML 或 JSON 定義 API 的結構,然後工具自動幫你產生好看的互動式文件。

為什麼要用 OpenAPI 而不是手寫文件?因為手寫文件有個致命問題:它一定會跟 code 脫節。 上線一個月後,新增了三個欄位、改了一個錯誤碼,文件還是舊的。然後前端工程師拿著文件來找你,你說「喔那個已經改了」,前端工程師的眼神你自己想像。

常見的工具鏈:

  • Swagger UI:把 OpenAPI spec 渲染成互動式頁面,可以直接在上面試打 API
  • Redoc:比 Swagger UI 好看,適合對外的 API 文件
  • swagger-jsdoc:從 JSDoc 註解自動產生 OpenAPI spec,code 即文件
  • tsoa / NestJS Swagger:從 TypeScript 裝飾器自動產生,更無痛

我的建議是 code-first:先寫 code,用裝飾器或註解自動產出 spec。這樣 API 改了,文件自動跟著改。

API 測試工具

文件寫好了,接下來要能測試。幾個好用的工具:

  • Postman:最廣泛使用,支援集合、環境變數、自動化測試。團隊共享 collection 很方便
  • Insomnia:更輕量,介面簡潔,不想用 Postman 的可以試試
  • Thunder Client:VS Code 擴充,不離開編輯器就能測 API
  • curl / httpie:命令列工具,CI/CD 整合用

五個最常見的 API 設計陷阱

陷阱一:命名不一致

同一個團隊裡,A 工程師寫 /getUsers,B 工程師寫 /user-list,C 工程師寫 /fetch_orders。三種命名風格並存,前端工程師每串一個 endpoint 都要查文件。

解法很簡單但執行很難——制定 API Style Guide 並在 Code Review 嚴格把關。更好的做法是用 spectral 這類 linter 工具自動檢查 OpenAPI spec 是否符合規範。

陷阱二:JWT 存 localStorage

前一篇已經說過了,但因為太多教學文章這樣教,值得再強調一次:localStorage 在 XSS 面前毫無防禦力。 Access Token 存記憶體、Refresh Token 存 HttpOnly Cookie,沒有第三種選擇。

陷阱三:沒有速率限制

你的 API 裸奔在網路上,任何人都能無限制地打。結果?DDoS 打你、暴力破解你的登入、爬蟲抓光你的資料、API 雲端帳單炸掉。

全域速率限制是基本,敏感端點(登入、密碼重設、驗證碼發送)要更嚴格。用 API Gateway 層級的限制效率最高。

陷阱四:沒有版本管理

API 改了一個欄位名稱,所有 client 同時炸掉。

從第一天就用 /v1/ 前綴。新版本上線後,舊版本要給一個 deprecation 期。在回應 header 加 DeprecationSunset 標頭通知 client「你用的版本快下架了」。

陷阱五:錯誤格式亂七八糟

有的 endpoint 回 { message: "..." },有的回 { error: "..." },有的直接回純文字。前端每串一個 API 都要寫特殊的 error handling。

解法:實作全域錯誤處理 middleware,所有錯誤都經過同一個格式化層再回傳。格式統一了,前端一個 interceptor 就搞定。

HATEOAS:知道就好

HATEOAS 是 REST 的最高成熟度等級——回應裡包含相關操作的連結,讓 client 可以「探索」API。理論上很美,實務上大多數前端在編譯時就確定了 API 路徑,根本不會動態解析這些連結。

除非你在設計一個需要高度動態探索的公開 API(像 GitHub API 那種規模),不然 HATEOAS 就是「面試會問,工作不會用」的東西。

系列總結

四篇走完了 API 設計的全貌:

篇章核心重點
RESTful 基礎URL 命名、HTTP 方法語義、狀態碼、分頁、版本管理
認證機制JWT + Access/Refresh Token、OAuth 2.0、API Key、Rate Limiting
實戰程式碼Express Router、JWT Middleware、Rate Limiter
文件化 + 陷阱OpenAPI 自動產生文件、五個常見設計陷阱

API 設計不只是技術選擇,更是團隊協作的基礎。一致性優先、安全性不妥協、文件即契約、版本管理從第一天開始。

系列文章:

延伸閱讀:

「API 文件就像遺囑——你不會想在需要的時候才發現它沒寫。」