[API] 為什麼有時候需要版本控管?
前言
API 一開始通常都很單純。
前端要什麼,後端就回什麼。
但當系統開始被更多人使用,API 一旦改動,就可能影響既有前端、App、第三方串接,甚至是已經發布出去的舊版本程式。
這時候就會遇到一個問題:API 要怎麼改,才不會把舊使用者弄壞?
什麼情況會破壞相容性?
不是所有 API 修改都需要新版本。
例如新增一個 response 欄位,多數情況下不會破壞舊呼叫端:
1 | { |
但以下這些改動就比較危險:
- 移除既有欄位。
- 改變欄位型別。
- 改變欄位名稱。
- 改變錯誤格式。
- 改變必要參數。
- 改變原本的業務規則。
例如原本 id 是數字:
1 | { |
突然改成字串:
1 | { |
對後端來說可能只是小改,但對呼叫端來說可能會直接壞掉。
常見版本寫法
最常見的方式是把版本放在 URL:
1 | /api/v1/users |
優點是直覺,看到網址就知道版本。
也有人會放在 header:
1 | Accept: application/vnd.example.v2+json |
這種方式比較乾淨,但對初學者或一般內部系統來說,URL 版本通常比較容易理解與維護。
不要太早過度設計
雖然 API versioning 很重要,但也不代表每個小專案一開始都要切很多版本。
如果系統只有自己使用,或還在快速開發期,過度設計版本反而會增加維護成本。
我覺得比較實際的做法是:
- 先讓 API 格式一致。
- 對外公開前想清楚 response 結構。
- 有破壞相容性的改動時,再考慮新版本。
- 舊版本保留一段過渡期。
版本控管是為了保護使用者,不是為了讓架構看起來很厲害。
結語
API 一旦被別人依賴,就不再只是後端自己家的事情。
每一次改動都要想:
- 會不會讓舊呼叫端壞掉?
- 是否需要保留舊版本?
- 是否有清楚的遷移方式?
- 文件是否同步更新?
好的 API 不只是能回資料,也要讓使用者能穩定地依賴它。
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Hikari 的工程筆記!
如果您喜歡我寫的文章,幫我按個5下讚吧!感謝您的鼓勵和支持!
評論
WalineGitalk