表現層狀態轉換(REST,英文:Representational State Transfer)是Roy Thomas Fielding博士於2000年在他的博士論文中提出來的一種全球資訊網軟體架構風格,目的是便於不同軟體/程式在網路(例如網際網路)中互相傳遞信息。表現層狀態轉換是根基於超文本傳輸協定(HTTP)之上而確定的一組約束和屬性,是一種設計提供全球資訊網絡服務的軟體構建風格。匹配或兼容於這種架構風格(簡稱為 REST 或 RESTful)的網路服務,允許客戶端發出以統一資源標識符訪問和操作網路資源的請求,而與預先定義好的無狀態操作集一致化。因此表現層狀態轉換提供了在網際網路的計算系統之間,彼此資源可互動使用的協作性質(interoperability)。相對於其它種類的網路服務,例如 SOAP服務則是以本身所定義的操作集,來訪問網路上的資源。
在三種主流的Web服務實現方案中,因為REST模式與複雜的SOAP和XML-RPC相比更加簡潔,越來越多的web服務開始採用REST風格設計和實現。例如,Amazon.com提供接近REST風格的Web服務運行圖書查詢;雅虎提供的Web服務也是REST風格的。
基本介紹
- 中文名:表現層狀態轉換
- 外文名:Representational State Transfer
- 縮寫:REST
- 提出者:Roy Thomas Fielding博士
- 提出時間:2000
要點及標準,可重新表達的狀態遷移的特徵,具體說明,關於狀態,套用於Web服務,實現舉例,REST的優點,
要點及標準
- 資源是由URI來指定。
- 對資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協定提供的GET、POST、PUT和DELETE方法。
- 通過操作資源的表現形式來操作資源。
- 資源的表現形式則是XML或者HTML,取決於讀者是機器還是人,是消費web服務的客戶軟體還是web瀏覽器。當然也可以是任何其他的格式。
可重新表達的狀態遷移的特徵
- 統一接口(Uniform Interface)
1. 以資源為基礎
每個資源都可以通過URI訪問到。
也就是一個個可以認知的資源,比如文檔,音樂,視頻等信息,都可以通過獨立的URI確定
2. 通過重表達的客戶端可以管理原資源
就是我們通過客戶端可以修改原資源的狀態
3. 返回信息足夠描述自己
這樣重表達的客戶端可以知道如何處理
4. 超媒體是套用狀態的引擎
處理以超媒體為基礎的狀態變化
- Stateless
無狀態
- Cacheable
可快取
- Client-Server
客戶伺服器分離模式,任何一個客戶端與伺服器都是可替換的
- Layered System
分層的系統,客戶端不知道他聯繫的是不是最終伺服器
- Code on Demand (optional)
伺服器可以將能力擴展到客戶端,如果客戶端可以執行的話。這個功能是可選擇的。
具體說明
REST架構風格最重要的架構約束有6個:
- 客戶-伺服器(Client-Server)
- 通信只能由客戶端單方面發起,表現為請求-回響的形式。
無狀態(Stateless)
- 通信的會話狀態(Session State)應該全部由客戶端負責維護。
快取(Cache)
- 回響內容可以在通信鏈的某處被快取,以改善網路效率。
統一接口(Uniform Interface)
- 通信鏈的組件之間通過統一的接口相互通信,以提高互動的可見性。
分層系統(Layered System)
- 通過限制組件的行為(即每個組件只能“看到”與其互動的緊鄰層),將架構分解為若干等級的層。
按需代碼(Code-On-Demand,可選)
- 支持通過下載並執行一些代碼(例如Java Applet、Flash或JavaScript),對客戶端的功能進行擴展。
關於狀態
應該注意區別套用的狀態和連線協定的狀態。HTTP連線是無狀態的(也就是不記錄每個連線的信息),而REST傳輸會包含套用的所有狀態信息,因此可以大幅降低對HTTP連線的重複請求資源消耗。
套用於Web服務
匹配REST設計風格的Web API稱為RESTful API。它從以下三個方面資源進行定義:
- 直觀簡短的資源地址:URI,比如:http://example.com/resources/。
- 對資源的操作:Web服務在該資源上所支持的一系列請求方法(比如:POST,GET,PUT或DELETE)。
圖一列出了在實現RESTful API時HTTP請求方法的典型用途。
PUT和DELETE方法是冪等方法。GET方法是安全方法(不會對伺服器端有修改,因此當然也是冪等的)。
不像基於SOAP的Web服務,RESTful Web服務並沒有“正式”的標準。這是因為REST是一種架構,而SOAP只是一個協定。雖然REST不是一個標準,但大部分RESTful Web服務實現會使用HTTP、URI、JSON和XML等各種標準。
實現舉例
例如,一個簡單的網路商店套用,列舉所有商品,
GET http://www.store.com/products
呈現某一件商品,
GET http://www.store.com/products/12345
下單購買,
POST http://www.store.com/orders<purchase-order> <item> ... </wiki></purchase-order>
REST的優點
- 可更高效利用快取來提高回響速度
- 通訊本身的無狀態性可以讓不同的伺服器的處理一系列請求中的不同請求,提高伺服器的擴展性
- 瀏覽器即可作為客戶端,簡化軟體需求
- 相對於其他疊加在HTTP協定之上的機制,REST的軟體依賴性更小
- 不需要額外的資源發現機制
- 在軟體技術演進中的長期的兼容性更好