該使用 SDK 還是 WebApi 的形式提供服務?

大家在使用 dotnet 或其他可以打包成功開套件做分享的程式語言時,可能都會想到一個問題

  1. 現在 WebApi 那麼盛行,我該如何抉擇要使用 Web Api 還是 套件 的形式發布我的服務、功能呢?
  2. 我覺得我新寫的功能好棒棒,我想發布成 nuget package 分享給團隊,但是不確定合不合適

這邊我簡單梳理一下一些需要考量的點~

備註1: 這篇算是過往前輩教我的一些心法整理,配合我自己後續的開發經驗所整理的一些小資訊

備註2: 由於我主要還是開發 dotnet 的服務,因此以下都會以 dotnet 的角度出發

套件的開發評估

  1. 簡單的邏輯運算
  2. 簡單的資料組合
  3. 盡可能只倚賴微軟套件或常見的主流套件,並且會跟著相依套件進行更版
  4. 提供的功能單一,且有高內聚特性
  5. 當套件更新時,使用此套件的應用程式不需要即時更新也能維持功能不出錯
  6. 提供對特定版本的 WebApi 或 資料庫 連線與調用功能的能力
  1. 不要依賴太多外部套件 (除非是要做那個套件的額外擴充)
  2. 盡量不要有網路以外的 IO 處理 (會允許網路 IO 是要與 API 溝通)
  3. 若使用者不使用你的套件,應該也要有相對簡單的方式達成一樣的目的
  4. 套件提供的功能應該要有高內聚、低耦合的特性
  5. 套件的 API 設計要簡單明瞭,且職責明確
  6. 盡可能提供有彈性的注入方法

    最好提供專用的注入方法,避免內部實作物件暴露

  7. 一定要有公開介面
  8. 內部實作可以的話不要使用 public

Web Api 的開發評估

  1. 需要獨立運作
  2. 需要頻繁與資料庫互動
  3. 需要處理複雜邏輯
  4. 需要更新後能夠立即反映新的邏輯在使用此 Web Api 的系統
  5. 需要同時提供多版本功能
  6. 除了 dotnet 系統外,也需要提供服務給前端等非 dotnet 生態系的系統

其他參考資料