2009-10-14 176 views
366

REST系統和RESTful系統有什麼區別?REST和RESTful有何區別

從我幾乎所有的read所謂的REST服務實際上是RESTful服務。那麼兩者有什麼區別?

+3

問題的原因是因爲如果您閱讀鏈接中的文章並查看Fielding博士對大多數REST實現的看法,那麼他們根本就不是REST系統。它們表現出REST式行爲,但不能歸類爲REST系統。 – AwkwardCoder 2009-10-14 20:45:46

+4

我讀過這篇文章,但我不認爲這導致他在語義上無用的區別。 – JasonTrue 2009-10-14 20:50:22

+3

關於REST的維基百科文章 - http://en.wikipedia.org/wiki/Representational_State_Transfer - 第二段 - 「符合REST約束通常被稱爲」RESTful「。」 – Nate 2009-10-15 03:09:42

回答

354

Representational state transfer (REST)是一種軟件體系結構。正如Roy Fielding的論文所述,REST是一種「架構風格」,它基本上利用了Web的現有技術和協議。

RESTful通常用於指代實現這種體系結構的Web服務。

+82

所以REST是架構和RESTful的一個形容詞? – 2014-05-19 21:07:43

+6

@manei_cc - 基本上,是的。 – 2014-05-19 21:32:17

+3

@manei_cc:雖然在實踐中您會發現名爲RESTful的服務不遵循REST體系結構,並且基本上類似於REST類,REST類等。因此,請始終注意,「RESTful服務」不一定是使用REST架構,但Justin Ethier寫道:_exploits Web_的現有技術和協議。 – Azder 2014-07-05 07:59:06

84

「休息」是一個建築範例。 「RESTful」描述使用該範例。

+0

'建築師'是什麼?的網址?像'https:// translation.googleapis.com/language/translate/v2'這是REST風格嗎? – UnKnown 2017-07-07 16:48:15

+2

REST體系結構需要很多特性。您不能僅僅通過展示URL來說明遵循REST原則的內容。 – SingleShot 2017-07-08 21:12:22

35

正如賈森在評論中所說,RESTful只是用作描述尊重REST約束的一個形容詞。

9

具象狀態傳輸(REST)是一種軟件體系結構的分佈式超媒體系統,如萬維網的樣式。代表性狀態轉移這一術語在他的博士論文中由Roy Fielding 1 [2]在2000年引入和定義。 Fielding是超文本傳輸​​協議(HTTP)規範版本1.0和1.1的主要作者之一。 符合REST約束條件被稱爲「RESTful」。 Source:Wikipedia

7

Web服務本質上是網站的內容被計算機程序使用,而不是人。 REST是一套體系結構原則,規定Web服務應該最大限度地利用HTTP和其他Web標準,以便程序獲得人們已經可以從Web上獲得的所有好東西。 REST常常與SOAP Web服務以及其他「遠程過程調用」面向的Web服務形成對照。

Stefan Tilkov在Parleys.com的REST上的演示文稿相當不錯,especially this one

對於一本書,你不可能比理查森和魯比的Restful Web Services更好。

+0

下有正確的回答所以一個普通的網站可以被認爲是一個REST應用程序? – 2016-04-29 23:14:58

+1

@yoyo_fun:是的,一個普通的網站也可以用RESTful構建。在某種抽象層次上,服務器是否將HTML返回給人類,或者JSON(比如說)是否是程序並不重要。 – 2016-09-24 23:46:13

10

感謝您的答案。

  1. 使用HTTP方法明確: 由亞歷克斯·羅德里格斯,這表明一個RESTful Web服務有4個它們的基本特徵閱讀this article
  2. 無國籍。
  3. 公開與目錄結構相似的URI。
  4. 傳輸XML,JavaScript對象表示法(JSON)或二者兼有。
+0

它實際上有6個約束。 – IronBlossom 2014-09-28 12:09:43

+1

@IronBlossom關心更新與缺少的兩個答案? – 2016-09-30 15:15:34

25

REST代表代表性狀態轉移。這意味着國家本身並沒有轉移,而僅僅是它的代表。最常見的例子是基於純HTML服務器的應用程序(無javascript)。瀏覽器對應用程序本身一無所知,但通過鏈接和資源,服務器能夠將應用程序的狀態傳輸到瀏覽器。如果按鈕通常會在常規Windows應用程序中更改狀態變量(例如頁面打開),那麼在瀏覽器中,您將有一個代表這種狀態更改的鏈接。

這個想法是使用超媒體。也許可以創建新的超媒體類型。可能我們可以用javascript/AJAX擴展瀏覽器並創建新的自定義超媒體類型。我們將有一個真正的REST應用程序。

這是我REST代表的簡短版本,問題是它很難實現。我個人說RESTful,當我想參考REST的原則時,但我知道我沒有真正實現REST的整個概念。我們並不真正說SOAP,因爲你使用SOAP或不使用SOAP。我認爲大多數人不會像它創建者Roy Fielding所設想的那樣進行REST,我們實際上實現了RESTful或REST架構。你可以看到他的dissertation,你會發現REST的縮寫,但不是RESTful這個詞。

42

基於REST的服務/建築VC RESTful服務/建築

爲了區分或比較這些2,你應該知道什麼是REST。 REST(代表性狀態傳輸)基本上是有一些原則發展的建築風格......

  • 應該是無狀態的

  • 它應該只使用URI

  • 從服務器訪問所有資源
  • 它沒有內置加密

  • 它不具備會話

  • 它使用一個且只有一個協議,該協議是HTTP

  • 爲執行CRUD操作,就應該使用HTTP動詞如GET,POST,PUT和DELETE

  • 它應該只在形式返回結果JSON或XML,原子,的OData等(輕量級的數據)的

REST基於服務遵循一些上述原則,而不是所有的,而RESTFUL意味着它遵循所有上述原則。它與基於對象的語言(它支持所有的OOPS概念,例如C++,C#)和麪向對象的語言(它支持一些OOP特性,如JavaScript,VB)的概念類似。示例是ASP Dot NET MVC 4是'基於REST'的,而Microsoft WEB API是'RESTFul'。 MVC僅支持上述REST原則中的一部分,而WEB API支持上述所有REST原則。

MVC只支持從REST API

  • 我們可以訪問該資源使用URI

    以下
  • 它支持HTTP動詞從服務器訪問資源

  • 它可以以JSON,XML形式返回結果,即HTTPResponse。

但在WEB API的同時

  • 我們可以使用會話

  • 我們可以讓它有狀態

  • 我們可以從返回的視頻或圖像主要違反REST原則的控制器動作方法

這就是爲什麼MVC是基於REST的,而WEB API支持所有上述原則並且是RESTFul。

+3

我不明白爲什麼這已被低估,這個答案帶來了很多澄清信息的問題。 – Marcovecchio 2016-02-25 13:44:26

+2

目前爲止最好的解答 – Limon 2016-10-07 14:04:08

+1

這是最佳答案。 – 2016-11-08 16:09:41

0

有4個級別的理查德森成熟度模型中定義的API。這些定義爲:

  • 級別0:任何系統的所有apis(SOAP或RPC屬於此類別)都有一個端點。等級0 apis也可以類似於「命令」。

  • 等級1:一個ResourceUri描述的系統。這是一個定義了多個基於實體的URI的系統(而不是像0級系統那樣只有一個端點)。這些URI可以使用不同的http操作(POST,GET,PUT等)來針對該資源實施不同的操作。

  • 級別2:又名級別1瓦特/柔順使用標準HTTP方法/動詞和多狀態碼的響應

  • 3級的:又名級別2加HATEOAS(包括在響應超媒體,其描述附加呼叫你可以)

雖然1級,2級和3級可視爲REST系統,只有嚴格的等級(又名2級和3級)被認爲是REST風格。

所以基本上所有的RESTful API中的REST API的,但不是所有的REST API是基於REST的

definition of the Richardson Maturity Model

0

REST描繪的軟件架構,應用到客戶端服務器通信。

RESTful實現REST架構和它們使用REST的客戶端的網關。