[收藏]REST -维基百科
表征狀態轉移(英文: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機制增進性能
- 層次化的系統
- 隨需代碼 - Javascript (可選)
- 關于狀態
應該注意區別應用的狀態和連接協議的狀態。REST對于連接的無狀態性實際上要求每次經過無狀態的連接協議傳送的信息必須包含應用中所有的狀態信息。
RESTful Web 服務
RESTful Web 服務(也稱為 RESTful Web API)是一個使用HTTP并遵循REST原則的Web服務。它從以下三個方面資源進行定義:
- URI,比如:http://example.com/resources/。
- Web服務接受與返回的互聯網媒體類型,比如:JSON,XML ,YAML 等。
- Web服務在該資源上所支持的一系列請求方法(比如:POST,GET,PUT或DELETE)。
該表列出了在實現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等)。
實現舉例
例如,一個簡單的網絡商店應用,
列舉所有商品,
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的軟件依賴性更小
- 不需要額外的資源發現機制
- 在軟件技術演進中的長期的兼容性更好
實現
- Ruby on Rails1.2以后的版本支持REST model。
- JBoss RESTEasyJBoss的REST實現
參考資料
- http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm Roy Fielding的博士論文《Architectural Styles and the Design of Network-based Software Architectures》
- http://www.xml.com/pub/a/2002/02/06/rest.html 第二代web服務,Paul Prescod。
轉載于:https://www.cnblogs.com/ac1985482/archive/2013/02/25/2932270.html
總結
以上是生活随笔為你收集整理的[收藏]REST -维基百科的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 找回创新能力 才是苹果的救命稻草
- 下一篇: mac中的放置java类库扩展的位置