研究怎麼樣設計出好的Web API,從Request format、Response format、甚至於架構。
使用API 的核心思想
Client Server 之間只透過API 交換必要資料
而不是在ServerSideRender 後把整個HTML 畫面高頻率的傳送到Client。
如此可以將職責切乾淨之外,也可以提升校能。
透過API 的設計,也讓多平台應用程式不須重工、更好維護。
2008 年,Leonard Richardson 為 Web API 提出了下列 成熟度模型 :
- 層級 0:定義一個 URI,而所有作業都是此 URI 的 POST 要求。
- 層級 1:為個別資源建立個別 URI。
- 層級 2:使用 HTTP 方法來定義資源上的作業。
- 層級 3:使用超媒體 (HATEOAS,如下所述)。
設計架構
RESTful 是一種設計架構,符合設計架構的API 就稱為RESTful API。架構有兩大核心原則:
- 統一介面: 具有HTTP Methods、route與明確定義的request/response format。
- 無狀態: Server與Client不儲存連接歷史,每個請求都是獨立的。
在API Path 中以名詞表示主要作用的目標,以HTTP Methods 區分動作:
GET: Read
POST: Create, Upload
PUT: Update 全部
PATCH: Update 部分
DELETE: Delete
POST https://adventure-works.com/orders // Good,POST 到orders 代表新增order,
POST https://adventure-works.com/create-order // 避免,新增的英文有很多種,以簡潔為重,故盡量不要在path 中寫動詞
注意事項
避免實體被揭露
避免建立跟資料實體(entity) 一模一樣資料結構的API 介面,以免有內部實作公開造成資安問題。
避免過度嵌套
例如 /customers/1/orders/99/products,表示取得顧客1訂單編號99 中的商品,當複雜度提升會造成難以維護,故應該讓 URI 保持相對簡單。
References:
https://jianline.com/restful-api/
https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/