專注 API 管理、DevOps 整合、自動化測試與軟體品質工程的顧問服務
這是一個真實發生在許多團隊的故事:
週五下午四點,後端工程師小明心想:「這個 userAge 欄位好像沒在用了,而且我們已經有 birthDate 了,為了讓 API 乾淨一點,我把它刪掉好了。」 小明按下 Commit,開心下班過週末。
週五晚上七點,客服電話被打爆。所有舊版的 iOS App 用戶在開啟「個人頁面」時全部閃退。 原因很簡單:舊版 App 還在讀取 userAge,但這個欄位突然憑空消失,導致 App 解析 JSON 失敗 (Null Pointer Exception)。
這就是所謂的 Breaking Change (破壞性變更)。 在微服務與前後端分離的架構下,後端工程師往往無法精確知道「誰正在使用我的 API」。靠「通靈」或「口頭詢問」來判斷欄位能不能改,是極度危險的。
今天我們要聊聊,如何用 SmartBear Swagger (SwaggerHub) 來建立一道「防呆機制」。
簡單來說,就是「會讓客戶端 (Client) 出錯的變更」。 常見的破壞性變更包括:
刪除欄位:如上述案例。
修改欄位名稱:把 id 改成 userId。
修改資料型別:把字串 "123" 改成數字 123。
新增「必填」參數:原本呼叫不用參數,現在變成一定要傳參數才能動。
反之,如果是「新增一個非必填欄位」,通常被視為安全變更 (Non-breaking change),因為舊的客戶端只會忽略它,不會報錯。
我們不應該依賴工程師的記憶力來避免 Breaking Change。在 SmartBear Swagger (SwaggerHub) (前身是 SwaggerHub) 中,系統內建了強大的自動檢測功能:
當你在編輯器中修改 OpenAPI Spec 時,Swagger (SwaggerHub) 會即時比對你現在的版本與上一個發布的版本。 如果你試圖刪除一個已存在的 Operation 或欄位,系統會立刻彈出 “Breaking Change” 的紅色警告標章。
這就像是編輯器在對你大喊:「嘿!住手!這樣改會害死前端喔!」
傳統的 Code Review 都是看 Git 的文字比對 (Diff),在一堆 YAML 縮排中很難看出結構變化。 Swagger (SwaggerHub) 提供了 Visual Diff (視覺化比對) 功能。它會並排顯示兩個版本的 API 文件,並用顏色標示出:
🟢 綠色:新增的 Endpoint。
🔴 紅色:被刪除的危險區域。
🟡 黃色:被修改的定義。
技術主管在審核 API 變更時,不需要懂複雜的程式碼,只要看顏色就能秒懂這次改版有沒有風險。
如果業務需求真的必須刪除那個欄位怎麼辦?這時候你需要的是 API Versioning (版本策略)。
在 Swagger (SwaggerHub) 中,我們可以輕鬆管理多個版本:
v1.0 (Locked):標記為「已發布」,供現有 App 使用。這份 Spec 是唯讀的,確保沒有人能偷偷改壞它。
v2.0 (Draft):從 v1.0 複製 (Fork) 出來的新版本。在這裡,你可以大膽地刪除 userAge,進行破壞性重構。
前端團隊可以看著 v2.0 的文件開發新版 App,而舊版 App 繼續安穩地呼叫 v1.0 的接口。直到所有舊用戶都更新 App 後,我們再將 v1.0 下架 (Deprecate)。
這就是 「平行版本管理」 的真諦。
很多團隊的 API 災難,都是源於「我以為這個改動很小」。
導入 SmartBear Swagger (SwaggerHub) 的價值在於,它將「檢查 Breaking Change」這件事,從依賴工程師的細心,轉變為依賴系統的自動化。
別讓一次小小的 Commit,成為毀掉週末假期的兇手。善用版本控管與自動檢測,讓你的 API 迭代既快速又安全。
解決了版本衝突,我們的 API 定義已經很安全了。但如果公司有 50 個微服務,每個服務都自己定義了一套「使用者模型 (User Model)」,那豈不是另一種混亂? 下一次,我們要來探討如何利用 「Domain 模組化設計」,像玩樂高一樣組裝你的 API,達成真正的企業級標準化。
想要了解更多?趕快和我們聯絡!