本文

REST 是 Representational State Transfer 的縮寫,是一種設計模式,RESTful API 就是遵循這種設計模式所創造的 API。

那 RESTful 是怎樣的一個設計模式呢?

首先組成 RESTful API 三大要素有:

組成要素 說明
1、Nouns (名詞) 一組獨一無二的 URL 用來定義網址。
2、Verbs (動詞) 用來描述對 URL 所執行的動作,也就是 HTTP Method。
3、Content Types(資源呈現方式) API 資源呈現的方式 EX:JSON、XML。

以前幾篇的 API 為範例:

Method router 說明
GET api/Product 取得商品列表
POST api/Product 新增商品
PATCH api/Product 修改商品資訊
DELETE api/Product/85 商除指定商品

固定的 Router,但使用 Method 來區分要進行的動作,好處是不會有五花八門的 router 出現,一旦用了此種模式,大家就能輕易區分 API 會做些甚麼,我該取用哪隻 API。

常見的 Method 有以下幾種:

Method 說明
GET 讀取資料
POST 新增資料,亦可作為其他動詞使用。
PUT 更新
PATCH 部分更新資料
DELETE 刪除資料

備註: POST 被視作萬用動詞,可以作為其他動作。
例如:當需要取得商品資訊時需要多傳幾個參數給 API 就可以使用 POST。

RESTful 的特點

  • 1、統一介面(Uniform Interface) – 統一的 API 接口,EX: api/Product。
  • 2、無狀態。(Stateless) – 伺服器不能儲存客戶端的資訊, 每一次從客戶端傳送的請求中, 要包含所有的必須的狀態資訊。
  • 3、快取(Cacheability) – 在 Server 端可以透過快取機制加快回應速度,EX:GET 過的資料如果沒有被改變過,就可以透過快取機制在下一次,有相同 API 較用服務時更快的回應。
  • 4、分層系統架構 (Layered System) – Client 並不會知道在API怎麼通過 Server 跟資料庫拿到資料的,就可以在這些 Server 做負載平衡、共享快取等提高擴充性,也便於做安全性作業。
  • 5、客戶端與伺服器分離(Client-Server) – 將 Client 與 Server 分開是為了將使用者介面所關注的邏輯和資料儲存所關注的邏輯分離開來,有助於提高使用者介面的跨平台的可移植性;通過簡化伺服器模組也有助於伺服器模組的可延伸性。

後記

RESTful 目前對我來說最大的特點就是大家都能快速依照規範好的結構開發,例如我們現在前後端的合作模式就是一開始先訂好 API 規格, EX:

Method:DELETE
Router:/api/Product

API輸入:
/api/Product/{ProductId}

ProductId:int //商品編號

API輸出:
{
    "result": true,
    "message": "刪除商品成功"
}

result:bool    //是否成功
message:string //提示訊息

接下來前後端就可以分別開發,互相不會干擾對方進行,之後再進行串測即可;這種合作模式我覺得滿有效率的,推薦給大家。

參考連結