2008-09-18 87 views
146

今天在REST上參加了一個有趣的演示,然而,我想不出一個理由(也沒有人介紹)爲什麼REST在使用和實現方面比基於SOAP的服務棧更好或更簡單。爲什麼會使用REST而不是基於SOAP的服務?

爲什麼「真實世界」中的任何人使用REST而不是基於SOAP的服務的原因是什麼?

+36

Web服務是指SOAP風格的Web服務嗎?因爲據我所知,你也可以使用RESTful Web服務。 – 2010-02-18 15:26:57

回答

152

較少的開銷(不SOAP信封包裹每調用)

減少重複(HTTP已經表示像刪除操作,PUT,GET,等等已經以其他方式在SOAP信封來表示)。

更加標準化 - 對HTTP操作的瞭解和操作一致。一些SOAP實現可能會非常挑剔。

更具人性化可讀性和可測試性(更難以通過瀏覽器測試SOAP)。

不需要使用XML(好吧,你不需要使用SOAP,但因爲你已經在解析信封,所以它很難理解)。

圖書館使SOAP(種類)變得容易。但正如我所指出的那樣,你正在抽象出很多冗餘。理論上講,SOAP可以超越其他傳輸,以避免在層上做類似的事情,但實際上幾乎所有的SOAP工作都是通過HTTP進行的。

+1

我想補充一點,跨平臺的SOAP通信也可以是PITA(不是SOAP的重要組成部分?)。 – 2008-09-18 07:14:27

+7

也可以與HTTP基礎結構一起工作 - 例如GETs被積極緩存以及使用最後修改的和etags – 2008-09-18 09:05:16

+0

與Web瀏覽器一起工作,爲您的服務提供通用客戶端也有幫助:) – 2008-09-18 09:05:58

12

我假設當你說 「Web服務」 你的意思是SOAP和WS- *標準集。 (否則,我可以爭辯說,REST服務「網絡服務」。)

規範性的說法是REST服務更接近於網頁的設計 - 即HTTP和相關基礎設施的設計。因此,使用REST服務將與現有的網絡工具和技術更加兼容。

當然,一旦你深入細節,你會發現這兩種方法在不同場景下都有優勢。這是你感興趣的具體細節嗎?

34

RESTful服務比基於SOAP的服務要簡單得多。原因在於REST基於正常的HTTP請求,它使得可以根據正在進行的請求類型(GET = retrive,POST = write,DELETE = remove等等)來推斷意圖,並且是完全無狀態的。另一方面,你可能會認爲它不太靈活,因爲它消除了包含請求上下文的消息信封的概念。

根據我的經驗,SOAP一直是企業內服務的首選,REST一直被作爲公開API提供服務。

在.NET框架中使用類似WCF的工具,將服務作爲REST或SOAP實現是非常簡單的。

一些相關閱讀:

+9

我的理解是,可以使用WSDL文件來生成類以公開Web服務方法。這肯定會讓服務的使用和調用函數一樣容易?你能否再解釋一下你的看法? – 2009-05-11 16:10:22

6

趕緊去讀讀Roy Fielding的最優秀的dissertation的話題。他做出了一個很好的例子,當他寫作時(2000年),他確實是WAY

0

這是超級簡單,苗條。你可以用瀏覽器通過http動詞:GET。 我還沒有發現瀏覽器可以輕鬆地手動執行通用http POST請求

6

REST與實現無關並且更加透明,這使它非常適合公共API,尤其是對於像Flickr,Amazon或Digg這樣的大型網站正在使用他們的API作爲營銷工具,並且真正希望人們消費他們的數據。他們不需要想要手持1000多名試圖調試他們的腳本語言選擇的錯誤的SOAP庫的新手開發人員。

與SOAP和WSDL相比,它更適合內部應用程序,在這些應用程序中,您在兩端都有嵌入式庫和已知的可靠人員。 (你可能不需要關心Internet規模的負載平衡,HTTP緩存等等)。然後你可以獲得自我記錄的API,保存類型等等,而不需要做任何工作。

4

REST允許您的非變異操作(通常使用GET動詞)爲緩存。也就是說,由客戶端緩存和/或由代理緩存。這可能是一個巨大的勝利!

9

開銷並不像重要的架構那麼重要。

REST不是一個協議,它是一個鼓勵良好可擴展設計的體系結構。 通常會選擇它,因爲RPC中的自由度過大可能會導致糟糕的設計。

另一個原因是基於HTTP的RESTful協議的可預測成本,因爲它可以利用現有技術(主要是代理)。 RPC初始成本相當低,但隨着負荷強化趨勢顯着增加。

0

以下是一個數據點:Amazon以REST和SOAP格式提供它的API,85%的使用率是REST。

REST更容易實現,更易於理解和提高性能。