表現層狀態轉換 (REST) 架構
- 主從式架構 (Client-Server)
- 無狀態 (Stateless)
- 可緩存 (Cacheability)
- 統一接口 (Uniform Interface)
- 分層系統 (Layered system)
- 按需代碼 (Code on demand) (可選的)
主從式架構 (Client-Server)
應用在實現時,按邏輯上將客戶端與服務端分離開來,使得任何一個客戶端實例都可以向同一服務器發出請求。依照扮演角色的不同,客戶端與服務端的特徵區別如下:
- 服務端:
- 被動的角色
- 等待用戶端的請求
- 將處理請求的結果回傳給客戶端
- 客戶端:
- 主動的角色
- 發送請求
- 等待服務器處理請求結果的反饋
主從式架構客戶端與服務端分離的特性,改善了應用跨平台的可攜性,同時藉由服務端組件的簡化,大幅地改善整體架構的縮放性。進而使得個別服務端組件得以獨立地開發迭代,支持整體架構應付多樣化的運維需求。
無狀態 (Stateless)
客戶端與服務端間的信息請求響應關係上,要注意服務端不負責記錄請求方的用戶狀態。也就是每一個請求都包含了該服務邏輯所需的完整訊息。因此,通信的會話狀態 (Session State) 要由客戶端來負責維護。
可緩存 (Cacheability)
基於資源所設計的 REST 架構,其資源可自我定義宣告,決定是否快取該請求響應的內容,並且在通信的過程中被緩存。進而改善網絡效率,並且提高系統的可伸展性。這個緩存的機制,可在客戶端上實現,也可以部署在服務端,甚者多半是採取兩者並進的方式。
統一接口 (Uniform Interface) 原則
“一旦開發者熟悉系統中某個特定的應用程式接口 (API) ,該名開發者將能根據相同的經驗與原則把相似的對接門徑運用在系統的其他資源上”
資源 (Resoruce) 是 REST 架構的核心,系統中每個特定資源皆對應著邏輯上唯一的統一資源標識符 (URI) ,且根據標識符來提供創建,擷取,編輯和刪除數據的方法。
因此,為了實現統一接口 (Uniform Interface) 原則,REST 架構需具備四個接口約束 (Interface Constraints) :
- Identification of resources :資源通過標識符辨識。
- Manipulation of resources through representations :通過 Content-Type HTTP 標頭,客戶端可以向服務端指定數據發送的表現形式。
- Self-descriptive messages :資源的操作方式,通過 HTTP 的標準方法來實現。
- Hypermedia as the engine of application state :應用的狀態由請求端的請求方式來決定,例如:客戶端可通過發送基於 POST 方法的請求來創建資源,進而改變應用的狀態。
簡言之,統一接口 (Uniform Interface) 原則的四個約束條件,通過標示符定義了資源,客戶端向服務器指定偏好的格式,藉著 HTTP 的標準方法來描述操作,進而改變應用中,特定資源的狀態。
分層系統 (Layered system)
一般來說,客戶端無法清楚的知道其請求對象是否是整個通信鏈的最終服務器。請求對象對於客戶端來說,是一個抽象的多層結構,透過邏輯上分層迭代的設計,使得系統的伸縮性大為增加,並且更容易的配置各種輔助性的機制,例如:負載平衡,共享的緩存,還有強制的安全管理政策。
按需代碼 (Code on demand) (可選的)
一般來說,服務端響應所反饋的是資源表現層的靜態形式。然而在特定的情況下,通過傳輸一段可執行或是編譯好的代碼給客戶端,進而達到服務器擴展或是說自訂客戶端特定功能的執行是被允許的。