簡體   English   中英

Restful Web服務如何比基於SOAP的Web服務更好

[英]how is Restful web services better than SOAP based webservices

我已經瀏覽了各種網站,他們提供的唯一答案是 - Restful webservices使用Http自己的方法,如(GET,POST,PUT,DELETE)..而基於SOAP的webservices使用自己的自定義方法.. - Restful Web服務將每個服務方法視為資源,並為其提供URI。

但是,我不明白這些答案的全部意義。至於為什么這些事情證明比基於SOAP的Web服務有如此大的優勢..

一個例子將不勝感激

REST自然適用於Web / Cloud API,而SOAP適用於分布式計算方案。

帶寬是REST的主要優點,因為沒有復雜的文檔可以遍歷(即XML,SOAP標頭),這對於性能良好的Web API非常重要。 JSON是一種廣泛認可且簡單的數據交換標准,並且易於被瀏覽器和客戶端代碼讀取,這就是為什么大多數RESTful API(雅虎都是一個很好的例子)提供JSON的原因。

更不用說REST可用於XmlHttpRequest對象,這對於Web API的AJAX能力也是至關重要的。

當然,REST的可緩存性功能也不容忽視。 因為REST基於HTTP,所以它可以利用HTTP(和Web本身)的許多語義,通過利用HTTP數據包(過期)上的標頭來啟用瀏覽器的緩存。 更不用說像gzip壓縮這樣的東西來提高效率。 性能方面,REST確實將它釘在SOAP上。

至於SOAP,well SOAP適合有狀態操作。 WS *標准(安全性,事務等)處理這種管道,這在分布式場景中非常常見。 當然,它可以通過REST來完成,但它實際上並不是REST。 SOAP非常適合定義客戶端和服務器之間的操作協定,這在分布式方案中至關重要。

所以我的觀點(以及整個SOAP vs REST的事情都是高度自以為是),將SOAP用於分布式計算場景,將REST用於Web API。

SOAP的主要問題是膨脹。 您可以做的越多,使用默認值就越少。 即使對於簡單的方法,這也會導致巨大的WSDL下載。 接下來,它使解析器膨脹(特定解析器總是小於通用解析器),消息(整個一堆XML而不是帶有URI的DELETE ),錯誤處理程序(您向服務器發送20-30KB的XML,它以50KB的錯誤消息回復;祝你好運閱讀並理解它)。

具體示例:通過SOAP從SharePoint服務器讀取文檔列表的Java代碼非常龐大,您需要為Java編譯器提供1GB的RAM來編譯它。

與Restful相同只需要幾行代碼。 在客戶端,您需要使用GET list/some/url構建請求。 即使您必須手動編寫代碼,在服務器上解析它也會比編譯WSDL更省力。

許多人對基於SOAP的Web服務感到不滿,因為SOAP層增加了額外的復雜性,將其視為過度開銷,提出了RESTful Web服務。
在REST框架中,xml消息直接封裝在HTTP有效負載中,而不是封裝在SOAP信封內(與AJAX相同)。
這大大減少了解析開銷。
但在實際情況下,經常需要向服務器/客戶端發送與實際xml消息有效負載無關的額外信息。
這導致找到通過HTTP消息傳輸信息的方法。
由於需要傳輸此類信息,因此有些人反駁說基於SOAP的服務可以滿足這些需求。

優點是戰術 - 它當然可以完成你可以用另一個做的所有事情,但是web服務器在SOAP之前就已經存在並且配置相當簡單,因此通常更簡單。 例如,身份驗證等通常可以由Web服務器處理,也可以重定向和負載平衡和事物。 普通的SOAP框架實際上並沒有像完整的一組這樣的東西,並且可能導致成長的痛苦。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM