參考資料:

 

REST - 維基百科,自由的百科全書 - Wikipedia

 

REST

維基百科,自由的百科全書

表徵性狀態傳輸(英文:Representational State Transfer,簡稱REST)是Roy Fielding英語Roy Fielding博士在2000年他的博士論文中提出來的一種軟體架構風格。

目前在三種主流的Web服務實現方案中,因為REST模式與複雜的SOAPXML-RPC相比更加簡潔,越來越多的web服務開始採用REST風格設計和實現。例如,Amazon.com提供接近REST風格的Web服務進行圖書查找;雅虎提供的Web服務也是REST風格的。

要點及標準

需要注意的是,REST是設計風格而不是標準。REST通常基於使用HTTPURI,和XML以及HTML這些現有的廣泛流行的協議和標準。

  • 資源是由URI來指定。
  • 對資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
  • 通過操作資源的表現形式來操作資源。
  • 資源的表現形式則是XML或者HTML,取決於讀者是機器還是人,是消費web服務的客戶軟體還是web瀏覽器。當然也可以是任何其他的格式。

REST的要求

  • 客戶端和伺服器結構
  • 連接協議具有無狀態性
  • 能夠利用Cache機制增進性能
  • 層次化的系統
  • 所需代碼 - Javascript (可選)

關於狀態

應該注意區別應用的狀態和連接協議的狀態。HTTP連接是無狀態的(也就是不記錄每個連接的資訊),而REST傳輸會包含應用的所有狀態資訊,因此可以大幅降低對HTTP連接的重複請求資源消耗。

應用於 Web 服務

符合 REST 設計風格的 Web API 稱為 RESTful API。它從以下三個方面資源進行定義:

  • 直觀簡短的資源地址:URI,比如:http://example.com/resources/
  • 傳輸的資源:Web服務接受與返回的網際網路媒體類型,比如:JSONXML ,YAML 等。
  • 對資源的操作:Web服務在該資源上所支持的一系列請求方法(比如:POST,GET,PUT或DELETE)。

下表列出了在實現 RESTful API 時 HTTP 請求方法的典型用途。

HTTP 請求方法在 RESTful API 中的典型應用
資源GETPUTPOSTDELETE
一組資源的URI,比如http://example.com/resources/ 列出 URI,以及該資源組中每個資源的詳細資訊(後者可選)。 使用給定的一組資源替換當前整組資源。 在本組資源中創建/追加一個新的資源。 該操作往往返回新資源的URL。 刪除 整組資源。
單個資源的URI,比如http://example.com/resources/142 獲取 指定的資源的詳細資訊,格式可以自選一個合適的網絡媒體類型(比如:XML、JSON等) 替換/創建 指定的資源。並將其追加到相應的資源組中。 把指定的資源當做一個資源組,並在其下創建/追加一個新的元素,使其隸屬於當前資源。 刪除 指定的元素。

PUT 和 DELETE 方法是冪等方法。GET方法是安全方法 (不會對伺服器端有修改,因此當然也是冪等的)。

不像基於SOAP的Web服務,RESTful Web服務並沒有的「正式」標準。 這是因為REST是一種架構,而SOAP只是一個協議。雖然REST不是一個標準,但在實現RESTful Web服務時可以使用其他各種標準(比如HTTP,URL,XML,PNG等)。

實現舉例

例如,一個簡單的網絡商店應用,

列舉所有商品,

GET http://www.store.com/products

呈現某一件商品,

GET http://www.store.com/product/12345

下單購買,

POST http://www.store.com/order
<purchase-order>
  <item> ... </item1>
</purchase-order>

REST的優點

  • 可更高效利用快取來提高響應速度
  • 通訊本身的無狀態性可以讓不同的伺服器的處理一系列請求中的不同請求,提高伺服器的擴展性
  • 瀏覽器即可作為客戶端,簡化軟體需求
  • 相對於其他疊加在HTTP協議之上的機制,REST的軟體相依性更小
  • 不需要額外的資源發現機制
  • 在軟體技術演進中的長期的相容性更好

實現