今天在REST上參加了一個有趣的演示,然而,我想不出一個理由(也沒有人介紹)爲什麼REST在使用和實現方面比基於SOAP的服務棧更好或更簡單。爲什麼會使用REST而不是基於SOAP的服務?
爲什麼「真實世界」中的任何人使用REST而不是基於SOAP的服務的原因是什麼?
今天在REST上參加了一個有趣的演示,然而,我想不出一個理由(也沒有人介紹)爲什麼REST在使用和實現方面比基於SOAP的服務棧更好或更簡單。爲什麼會使用REST而不是基於SOAP的服務?
爲什麼「真實世界」中的任何人使用REST而不是基於SOAP的服務的原因是什麼?
較少的開銷(不SOAP信封包裹每調用)
減少重複(HTTP已經表示像刪除操作,PUT,GET,等等已經以其他方式在SOAP信封來表示)。
更加標準化 - 對HTTP操作的瞭解和操作一致。一些SOAP實現可能會非常挑剔。
更具人性化可讀性和可測試性(更難以通過瀏覽器測試SOAP)。
不需要使用XML(好吧,你不需要使用SOAP,但因爲你已經在解析信封,所以它很難理解)。
圖書館使SOAP(種類)變得容易。但正如我所指出的那樣,你正在抽象出很多冗餘。理論上講,SOAP可以超越其他傳輸,以避免在層上做類似的事情,但實際上幾乎所有的SOAP工作都是通過HTTP進行的。
我想補充一點,跨平臺的SOAP通信也可以是PITA(不是SOAP的重要組成部分?)。 – 2008-09-18 07:14:27
也可以與HTTP基礎結構一起工作 - 例如GETs被積極緩存以及使用最後修改的和etags – 2008-09-18 09:05:16
與Web瀏覽器一起工作,爲您的服務提供通用客戶端也有幫助:) – 2008-09-18 09:05:58
REST基本上只是一種實現Web服務的方式。這只是一種正確使用HTTP來查詢您試圖訪問的Web服務的方法。
http://www.xfront.com/REST-Web-Services.html http://en.wikipedia.org/wiki/Representational_State_Transfer
REST與HTTP無關,並且完全獨立於協議。儘管如此,它非常適合某些以資源爲中心的Web服務。 – aehlke 2009-07-20 17:56:44
我假設當你說 「Web服務」 你的意思是SOAP和WS- *標準集。 (否則,我可以爭辯說,REST服務是「網絡服務」。)
規範性的說法是REST服務更接近於網頁的設計 - 即HTTP和相關基礎設施的設計。因此,使用REST服務將與現有的網絡工具和技術更加兼容。
當然,一旦你深入細節,你會發現這兩種方法在不同場景下都有優勢。這是你感興趣的具體細節嗎?
RESTful服務比基於SOAP的服務要簡單得多。原因在於REST基於正常的HTTP請求,它使得可以根據正在進行的請求類型(GET = retrive,POST = write,DELETE = remove等等)來推斷意圖,並且是完全無狀態的。另一方面,你可能會認爲它不太靈活,因爲它消除了包含請求上下文的消息信封的概念。
根據我的經驗,SOAP一直是企業內服務的首選,REST一直被作爲公開API提供服務。
在.NET框架中使用類似WCF的工具,將服務作爲REST或SOAP實現是非常簡單的。
一些相關閱讀:
我的理解是,可以使用WSDL文件來生成類以公開Web服務方法。這肯定會讓服務的使用和調用函數一樣容易?你能否再解釋一下你的看法? – 2009-05-11 16:10:22
趕緊去讀讀Roy Fielding的最優秀的dissertation的話題。他做出了一個很好的例子,當他寫作時(2000年),他確實是WAY。
Steve Vinoski's blog和他的latest articles絕對值得一讀。他是一位前CORBA大師,他寫過關於Michi Henning的最好的書,"Advanced CORBA® Programming with C++"。然而,他從此看到了他的客戶/服務器方式的錯誤,現在又被REST發誓。
這是超級簡單,苗條。你可以用瀏覽器通過http動詞:GET。 我還沒有發現瀏覽器可以輕鬆地手動執行通用http POST請求
REST與實現無關並且更加透明,這使它非常適合公共API,尤其是對於像Flickr,Amazon或Digg這樣的大型網站正在使用他們的API作爲營銷工具,並且真正希望人們消費他們的數據。他們不需要想要手持1000多名試圖調試他們的腳本語言選擇的錯誤的SOAP庫的新手開發人員。
與SOAP和WSDL相比,它更適合內部應用程序,在這些應用程序中,您在兩端都有嵌入式庫和已知的可靠人員。 (你可能不需要關心Internet規模的負載平衡,HTTP緩存等等)。然後你可以獲得自我記錄的API,保存類型等等,而不需要做任何工作。
REST允許您的非變異操作(通常使用GET動詞)爲緩存。也就是說,由客戶端緩存和/或由代理緩存。這可能是一個巨大的勝利!
開銷並不像重要的架構那麼重要。
REST不是一個協議,它是一個鼓勵良好可擴展設計的體系結構。 通常會選擇它,因爲RPC中的自由度過大可能會導致糟糕的設計。
另一個原因是基於HTTP的RESTful協議的可預測成本,因爲它可以利用現有技術(主要是代理)。 RPC初始成本相當低,但隨着負荷強化趨勢顯着增加。
以下是一個數據點:Amazon以REST和SOAP格式提供它的API,85%的使用率是REST。
REST更容易實現,更易於理解和提高性能。
Web服務是指SOAP風格的Web服務嗎?因爲據我所知,你也可以使用RESTful Web服務。 – 2010-02-18 15:26:57