Loading AI tools
有关网络服务的一种编程范式 来自维基百科,自由的百科全书
表現層狀態轉換(英語:Representational State Transfer,縮寫:REST)是Roy Thomas Fielding博士於2000年在他的博士論文[1]中提出來的一種全球資訊網軟體架構風格,目的是便於不同軟體/程式在網路(例如網際網路)中互相傳遞資訊。表現層狀態轉換是根基於超文字傳輸協定(HTTP)之上而確定的一組約束和屬性,是一種設計提供全球資訊網絡服務的軟體構建風格。符合或相容於這種架構風格(簡稱為 REST 或 RESTful)的網路服務,允許使用者端發出以統一資源識別碼存取和操作網路資源的請求,而與預先定義好的無狀態操作集一致化。因此表現層狀態轉換提供了在網際網路的計算系統之間,彼此資源可互動使用的協作性質(interoperability)。相對於其它種類的網路服務,例如SOAP服務,則是以本身所定義的操作集,來存取網路上的資源。
目前在三種主流的Web服務實現方案中,因為REST模式與複雜的SOAP和XML-RPC相比更加簡潔,越來越多的Web服務開始採用REST風格設計和實現。例如,Amazon.com提供接近REST風格的Web服務執行圖書查詢;Yahoo提供的Web服務也是REST風格的。
需要注意的是,REST是設計風格而不是標準。REST通常基於HTTP、URI、XML以及HTML這些現有的廣泛流行的協定和標準。
每個資源都可以通過URI訪問到。
也就是一個個可以認知的資源,比如文件,音樂,影片等資訊,都可以通過唯一的URI確定。
就是我們通過客戶端可以修改原資源的狀態。
這樣重表達的客戶端可以知道如何處理。
處理以超媒體為基礎的狀態變化。
REST架構風格最重要的架構限制有6個[2]:
請求中包含了各種獨立資源的標識,例如,在Web服務中的URI。資源本身和傳送給客戶端的標識是獨立。例如,伺服器可以將自身的資料庫資訊以HTML、XML或者JSON的方式傳送給客戶端,但是這些可能都不是伺服器的內部記錄方式。
當客戶端擁有一個資源的標識,包括附帶的元資料,則它就有足夠的資訊來刪除這個資源。
每一個訊息都包含足夠的資訊來描述如何來處理這個資訊. 例如,媒體類型 (media-type) 就可以確定需要什麼樣的剖析器來分析媒體資料.
同使用者訪問Web伺服器的Home頁面相似,當一個 REST 客戶端訪問了最初的REST應用的URI之後,REST 客戶端應該可以使用伺服器端提供的連結,動態的發現所有的可用的資源和可執行的操作。隨著訪問的進行,伺服器在回應中提供文字超連結,以便客戶端可以得到當前可用的操作。客戶端無需用確定的編碼的方式記錄下伺服器端所提供的動態應用的結構資訊。
應該注意區別應用的狀態和連接協定的狀態。HTTP連接是無狀態的(也就是不記錄每個連接的資訊),而REST傳輸會包含應用的所有狀態資訊,因此可以大幅降低對HTTP連接的重複請求資源消耗。
符合REST設計風格的Web API稱為RESTful API。它從以下三個方面資源進行定義:
http://example.com/resources
。下表列出了在實現RESTful API時HTTP請求方法的典型用途。
資源 | GET | PUT | POST | DELETE |
---|---|---|---|---|
一組資源的URI,比如https://example.com/resources
|
列出URI,以及該資源組中每個資源的詳細資訊(後者可選)。 | 使用給定的一組資源替換當前整組資源。 | 在本組資源中建立/追加一個新的資源。該操作往往返回新資源的URL。 | 刪除整組資源。 |
單個資源的URI,比如https://example.com/resources/142
|
取得指定的資源的詳細資訊,格式可以自選一個合適的網路媒體類型(比如:XML、JSON等) | 替換/建立指定的資源。並將其追加到相應的資源組中。 | 把指定的資源當做一個資源組,並在其下建立/追加一個新的元素,使其隸屬於當前資源。 | 刪除指定的元素。 |
PUT和DELETE方法是冪等方法。GET方法是安全方法(不會對伺服器端有修改,因此當然也是冪等的)。
不像基於SOAP的Web服務,RESTful Web服務並沒有「正式」的標準[4]。這是因為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> ... </item> </purchase-order>
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.