表征狀態轉移(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格。
目前在三種主流的Web服務實現方案中,因為REST模式的Web服務與復雜的SOAP和XML-RPC對比來講明顯的更加簡潔,越來越多的web服務開始采用REST風格設計和實現。例如,Amazon.com提供接近REST風格的Web服務進行圖書查找;雅虎提供的Web服務也是REST風格的。
三種主流的Web服務實現方案:
1,表征狀態轉移(英文:Representational State Transfer,簡稱REST),
2,簡單對象訪問協議(SOAP,全寫為Simple Object Access Protocol)是一種標準化的通訊規范,主要用于Web服務(web service)中。
3,XML-RPC是一個遠程過程調用(遠端程序呼叫)(remote procedure call,RPC)的分布式計算協議,通過XML將調用函數封裝,并使用HTTP協議作為傳送機制
。后來在新的功能不斷被引入下,這個標準慢慢演變成為今日的SOAP協定。
何為REST,
REST 從資源的角度來觀察整個網絡,認為分布在網絡各處的資源由URI確定,而客戶端的應用通過URI來獲取資源的Representational(有的翻譯成表征或具象),獲得這些表征致使這些應用程序轉變了其狀態。隨著不斷獲取資源的表征,客戶端應用不斷地在轉變著其狀態,所謂表征狀態轉移(Representational State Transfer)。
REST是設計風格而不是標準。
REST原則(The REST architectural style constrains):
Ø 統一接口(unifrom interface)
Ø 所有的事物都是資源且通過URI來使用資源
(data and functionality are considered resources,and these resources are accessed using URIs,typically links on the web)
Ø 客戶端和服務器結構
Ø 使用無狀態的通信協議如HTTP
(constrains an architecture to a client-server architecture ,and is designed to use a stateless communication protocol ,typically HTTP)
Ø 對資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
Ø 資源的多重表現形式,可以是XML或者HTML當然也可以是任何其他的格式。
通過操作資源的表現形式來操作資源。
Ø 能夠利用Cache機制增進性能
Ø 層次化的系統
Ø 隨需代碼 - Javascript (可選)
RESTful Web 服務
符合以上REST原則的Web 服務就是一個RESTful Web 服務(也稱為 RESTful Web API)
RESTful Web 服務(也稱為 RESTful Web API)是一個使用HTTP并遵循REST原則的Web服務。它從以下三個方面資源進行定義:
- URI,比如:
http://example.com/resources/
。 - Web服務接受與返回的互聯網媒體類型,比如:JSON,XML ,YAML 等。
- Web服務在該資源上所支持的一系列請求方法(比如:POST,GET,PUT或DELETE)。
構建 RESTful 應用程序的最困難的部分在于確定要公開哪些資源。解決了這個問題之后,再使用開源 Restlet 框架構建 RESTful Web 服務就是小菜一碟了。
該表列出了在實現RESTful Web 服務時HTTP請求方法的典型用途。
HTTP 請求方法在RESTful Web 服務中的典型應用[1]
資源 |
GET |
PUT |
POST |
DELETE |
一組資源的URI,比如http://example.com/resources/ |
列出 URI,以及該資源組中每個資源的詳細信息(后者可選)。 |
使用給定的一組資源替換當前整組資源。 |
在本組資源中創建/追加一個新的資源。 該操作往往返回新資源的URL。 |
刪除 整組資源。 |
單個資源的URI,比如http://example.com/resources/142 |
獲取 指定的資源的詳細信息,格式可以自選一個合適的網絡媒體類型(比如:XML、JSON等) |
替換/創建 指定的資源。并將其追加到相應的資源組中。 |
把指定的資源當做一個資源組,并在其下創建/追加一個新的元素,使其隸屬于當前資源。 |
刪除 指定的元素。 |
PUT 和 DELETE 方法是冪等方法。GET方法是安全方法 (不會對服務器端有修改,因此也是冪等的)。
不像基于SOAP的Web服務,RESTful Web服務并沒有的“正式”標準[2]。 這是因為REST是一種架構,而SOAP只是一個協議。雖然REST不是一個標準,但在實現RESTful Web服務時可以使用其他各種標準(比如HTTP,URL,XML,PNG等)。
(HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳(傳參形式),這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。)
HTTP不是一種傳輸協議(transport protocol),而是一種應用協議(application protocol)。它采用TCP作為下層傳輸(underlying transport),但它擁有自己的語義(否則它就沒什么用處了)。僅將HTTP作為傳輸,是不恰當的。
URIs:(Uniform Resource Id entifiers)
個人總結:
1,REST是ROA的,跟SOAP WEB服務架構不同。
REST架構是以資源為中心的,它推崇發揮HTTP協議至極致而不是僅將HTTP作為傳輸協議來用(如像我過去的WEB服務架構中只用HTTP的POST、GET方法或在SOAP僅用了HTTP的POST方法來傳遞數據)
REST充分利用HTTP的GET、POST、PUT、Delete方法來實現對資源的操作,利用HTTP的Cache機制來輕松實現了REST的緩存
2,REST用到WADL,SOAP用到了WSDL,WADL是以資源為中心的,WSDL是以操作(接口)為中心
3,資源間的互動是通過鏈接(link)來實現的
4,其實REST并不擅長于面向事務的應用,擅長于在面向資源的應用。
5,REST中的WADL僅支持HTTP協議,SOAP支持HTTP,FTP,SMTP,MQ等
posted on 2012-05-21 20:45
jimmy2009 閱讀(159)
評論(0) 編輯 收藏 所屬分類:
分析設計