別讓每個微服務都重新定義「User」!利用 Domain 模組化設計達成真正的標準化

微服務的「碎片化」惡夢

微服務架構 (Microservices) 的初衷是解耦 (Decoupling),讓每個服務可以獨立開發、獨立部署。這聽起來很棒,但在 API 設計上,這往往演變成一場災難。

試想一下,你們公司有「訂單服務」、「會員服務」和「物流服務」。這三個服務都需要用到 「使用者資料 (User Profile)」。 結果發生了什麼事?

  • Team A (訂單) 定義的 User 有 user_idemail

  • Team B (會員) 定義的 User 有 uide-mail (多了一個連字號)。

  • Team C (物流) 定義的 User 有 idcontact_email

雖然都在講同一個「人」,但欄位名稱完全不同。這導致前端團隊在串接時,必須寫三套不同的邏輯來解析資料。這不叫「獨立」,而是「疊床架屋」(Reinventing the wheel)且製造混亂。

今天我們要聊聊,如何利用 SmartBear Swagger (SwaggerHub) 的 Domains (領域) 功能,來終結這種各自為政的亂象。

什麼是 API Domains (領域模型)?

在寫程式時,我們都知道要把共用的函式抽出來變成 Common LibraryModule,讓大家去引用 (Import),而不是到處複製貼上程式碼。

API Domains 的概念一模一樣,只是它應用在 OpenAPI Spec 上。

透過 SmartBear Swagger (SwaggerHub),架構師可以建立一個獨立的 “Global Shared Domain” 專案,在裡面定義企業通用的資料模型與標準回應。例如:

  • Schema: User, Product, ErrorModel

  • Parameters: Pagination (分頁參數), AuthorizationHeader

  • Responses: 400 BadRequest, 500 ServerError

像玩樂高一樣組裝 API

一旦建立了這個共用元件庫,各個微服務團隊在設計自己的 API 時,就不需要重新手寫 User 的定義了。

他們只需要在自己的 Swagger 檔中寫一行引用語法: $ref: 'https://api.swaggerhub.com/domains/my-company/shared-models/1.0.0#/definitions/User'

這就像是在堆樂高。中央廚房已經把標準的「樂高積木」做好了,開發者只需要把它們「組裝」起來,專注在該服務特有的商業邏輯即可。

這麼做有什麼好處?

1. 真正的標準化 (Standardization)

全公司的 API 都使用同一個 ErrorModel。這意味著前端可以寫一套統一的錯誤處理機制 (Error Handling),不用擔心這個 API 回傳 error_msg,那個 API 回傳 message

2. 維護成本大降 (Maintainability)

想像一下,如果法規改變,要求所有「金額」欄位必須精確到小數點後四位。

  • 沒有 Domains:你要去檢查 50 個微服務的 Spec,手動修改 50 次。漏改一個就是 Bug。

  • 有 Domains:你只要修改共用庫裡的那一個 Money 定義,所有引用它的 50 個 API 就會自動獲得更新(或收到更新通知)。

3. 加速開發 (Speed)

工程師不用再煩惱「分頁參數要怎麼命名?」,直接引用標準的分頁元件。省去了思考瑣碎細節的時間,開發速度自然變快。

結論:別讓微服務變成「微孤島」

微服務強調的是「鬆耦合 (Loose Coupling)」,但這不代表資料模型也要「鬆散」。

透過 SmartBear Swagger (SwaggerHub) 的 Domains 功能,我們可以在保持團隊獨立性的同時,在數據結構層面達成高度的統一。

記住,好的架構師不會讓工程師一直做重複的事。建立好你們的企業級元件庫,讓 API 開發從「手工業」進化為「模組化組裝」吧!

💡 下一步

當我們的圖畫好了(API Spec),元件也標準化了(Domains),但這些設計圖如果只躺在 Hub 裡,是沒辦法變成真正的程式碼的。 下一次,我們要來探討 DevOps 整合。如何讓 Swagger (SwaggerHub) 上的一個「Save」動作,自動觸發 Git 的流程,甚至自動生成 SDK?讓我們打通 Design-First 與 GitOps 的任督二脈。

想要了解更多?趕快和我們聯絡