RESTful API設計風格

RESTful API是一種設計風格,設計模式,並不是標準,它可以讓程式語言的API更加易於使用和維護。
主要是把每個網址當做資源Resource來看,針對同一個資源做不同的HTTP方法之後,會得到不同的結果

假設今天要獲取使用者的資料
URL可能會寫成
/users_get/1
/get_users/1
/get_userList
/reach_userList
/get_userAll
/reach_userAll
每一個人寫得都不同,API很混亂不一致,難以理解功能,不知道那URL是幹嘛的,搞不好過一陣子當初寫的人都不知道是什麼意思

因此,我們可以借助RESTful的理念,無論是哪位開發者,可以有個統一的規範

可以改寫成以下
獲取全部使用者資料 /GET /users
獲取使用者id為1的資料 /GET /users/1

設計RESTful API的基本原則:

1. 使用合適的HTTP方法:使用HTTP方法來表示操作類型

  • GET: 用於從伺服器獲取資源
  • POST: 用於在伺服器上新增資源
  • DELETE: 用於刪除現有的資源
  • PUT / PATCH: 用於更新現有的資源

這邊以Ruby on rails舉例

HTTP方法 路徑 Controller Action 說明
GET /users UserController index 使用者列表
POST /users UserController create 新增使用者
GET /users/new UserController new 新增使用者的頁面
GET /users/:id/edit UserController edit 編輯使用者的頁面
GET /users/:id UserController show 檢視單一使用者
PATCH /users/:id UserController update 更新單一使用者
PUT /users/:id UserController update 更新單一使用者
DELETE /users/:id UserController destroy 刪除單一使用者

2. 使用清晰的URI:URI應該具有可讀性,並且應該反映資源的層次結構。
3. 使用名詞而不是動詞:URI中應該包含資源名詞,而不是動詞;例如,使用/users表示使用者資源

不要使用以下命名

  • /getUsers
  • /createUser
  • /updateUser
  • /deleteUser

4. 支援多種數據格式:RESTful API應該支援多種數據格式,如JSON和XML,以滿足不同客戶端的需求。

5. 使用狀態碼:使用HTTP狀態碼來表示操作的結果,例如200 表示OK成功、404 Not Found表示資源不存在、500 表示伺服器錯誤等。

優點:

  • HTTP方法以及資源Resource兩者切割分離,確保明確的操作行為,降低複雜度
  • 每個 API 專注做一件事,提高各種組合的可能性

缺點:

  • 若一次需要操作多個資源Resource,還是得乖乖發送多個Request,效能方面較差
  • 網路上所有東西都是資源,將資源名詞抽象化其實不容易。定義正確資源名詞的URI,並使用HTTP方法去操作它

資源」為主體,透過API去操作資源時,一次就是針對一個資源,如果有什麼複雜的需求,就是要多發幾次 request 才能辦到,聽起來雖然很麻煩很像缺點,但如果是開放給第三方串接的 API,大多時候你是不知道別人會怎樣使用你的資料,既然都不知道,那一次一個資源為單位的Request,其實是非常明確切分的,反正要怎麼組合這些資料,是串接者自己的事情了。

參考資料
為什麼要用 RESTful API