表象化狀態轉變(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟體架構風格。
目前在三種主流的Web服務實現方案中,因為REST模式的Web服務與複雜的SOAP和XML-RPC對比來講明顯的更加簡潔,越來越多的web服務開始採用REST風格設計和實現。例如,Amazon.com提供接近REST風格的Web服務進行圖書查找;雅虎提供的Web服務也是REST風格的。
目錄[隱藏] |
[編輯] 宗旨
REST 從資源的角度來觀察整個網路,分佈在各處的資源由URI確定,而客戶端的應用通過URI來獲取資源的表形。獲得這些表形致使這些應用程序轉變了其狀態。隨著不斷獲取資源的表形,客戶端應用不斷地在轉變著其狀態,所謂表形化的狀態轉變(Representational State Transfer)。
這一觀點不是憑空臆造的,而是通過觀察當前Web網際網路的運作方式而抽象出來的。Roy Fielding 認為,
「 | 設計良好的網路應用表現為一系列的網頁,這些網頁可以看作的虛擬的狀態機,用戶選擇這些連結導致下一網頁傳輸到用戶端展現給使用的人,而這正代表了狀態的轉變。 | 」 |
[編輯] 要點及標準
需要注意的是,REST是一種設計風格而不是一個標準。REST通常基於使用HTTP,URI,和XML以及HTML這些現有的廣泛流行的協議和標準。
- 資源是由URI來指定。
- 對資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
- 通過操作資源的表形來操作資源。
- 資源的表現形式則是XML或者HTML,取決於讀者是機器還是人,是消費web服務的客戶軟體還是web瀏覽器。當然也可以是任何其他的格式。
[編輯] REST的要求
- 客戶端和伺服器結構
- 連接協議具有無狀態性
- 能夠利用Cache機制增進性能
- 層次化的系統
- Code On Demand - Javascript
[編輯] 關於狀態
應該注意區別應用的狀態和連接協議的狀態。REST對於連接的無狀態性實際上要求每次經過無狀態的連接協議傳送的信息必須包含應用中所有的狀態信息。
[編輯] 實現舉例
例如,一個簡單的網路商店應用,
列舉所有商品,
GET http://www.store.com/products
具體某一件商品,
GET http://www.store.com/product/12345
下單購買,
POST http://www.store.com/order, <purchase-order> <item> ... </item> </purchase-order>
[編輯] REST的優點
- 可以利用緩存Cache來提高響應速度
- 通訊本身的無狀態性可以讓不同的伺服器的處理一系列請求中的不同請求,提高伺服器的擴展性
- 瀏覽器即可作為客戶端,簡化軟體需求
- 相對與其他疊加在HTTP協議之上的機制,REST的軟體依賴性更小
- 不需要額外的資源發現機制
- 在軟體技術演進中的長期的兼容性更好