2010-11-09 126 views
9

我已經歷了各種網站,他們提供的唯一答案是 - Restful webservices使用Http自己的方法,例如(GET,POST,PUT,DELETE)..儘管SOAP基於瀏覽器的web服務使用自己的自定義方法.. - Restful Web服務將每種服務方法視爲一種資源併爲其提供一個URI ..Restful web服務如何比基於SOAP的web服務更好

但是,我不明白這些答案的全部意義。至於爲什麼這些事情相對於基於SOAP的網絡服務而言被證明是如此巨大的優勢。

一個示例將被讚賞

+0

可能的重複:http://stackoverflow.com/questions/76595/soap-or-rest – michid 2010-11-09 10:51:20

+0

你有什麼想法嗎?你有4個非常好的答案。 – RPM1984 2010-11-10 09:01:13

+0

@ RPM1984:是的,我想我會去REST,因爲它有不同的服務,這使得它非常鬆散耦合的URL不同,也有像url結構的目錄(不像SOAP有「www.somesite.com?query=something」 )這使得搜索引擎友好。 :) – Anand 2010-11-14 07:32:21

回答

10

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,好的SOAP迎合有狀態操作。 WS *標準(安全性,事務處理等)處理這種在分佈式場景中很常見的管道。它可以用REST來完成,當然,它不會真的成爲REST。 SOAP對於定義客戶端和服務器之間的操作契約非常有用,這在分佈式場景中至關重要。所以我的意見(以及整個SOAP vs REST的東西都是很有見地的),在分佈式計算場景中使用SOAP,爲Web API使用REST。

+0

@ RPM1984:「REST的緩存功能」是什麼意思? – Cratylus 2010-11-09 11:34:10

+0

@ user384706 - 由於REST基於HTTP,因此它允許在響應中添加緩存標頭(過期),以便瀏覽器可以緩存它們。響應數據包*顯式*表示可緩存性。現在,這是**客戶**緩存,不要與服務器緩存混淆。這又是爲什麼我的主要職位是REST for Web,用於分佈式計算的SOAP。 – RPM1984 2010-11-09 11:48:49

+0

還通過回答編輯添加該澄清。 – RPM1984 2010-11-09 11:53:54

1

好處是有策略的 - 當然可以做一切你可以做的事情,但web服務器在SOAP之前,並且配置起來相當簡單,所以通常更簡單。例如,身份驗證等通常可以由Web服務器處理,因爲可以重定向和負載平衡等。普通的SOAP框架並不是真的具有完整的一套這樣的功能,並且可能會導致越來越多的痛苦。

4

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

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

和Restful一樣,只需要幾行代碼。在客戶端上,您需要使用GET list/some/url來構建請求。即使您需要手動編寫代碼,解析服務器上的內容也不會比編譯WSDL更省力。

+1

從它的聲音,你有一個框架非常糟糕的經驗。與REST相比,SOAP通常需要較少的手動編碼才能開始,因爲框架通常會自動化大部分管道。 WSDL的大小應該與運行時性能無關,因爲它僅用於協助客戶端代理生成。 – 2010-11-09 12:20:44

+1

我使用了Axis。 Java上還有其他的東西嗎?而且,WSDL的大小是相關的,因爲大的WSDL ==大的請求。 – 2010-11-09 15:03:26

2

由於SOAP層增加了額外的複雜性,許多人對基於SOAP的Web服務不以爲然,認爲這是一種不當開銷,提出了RESTful Web服務。
在REST框架中,xml消息直接封裝在HTTP有效內容中,而不是封裝在SOAP封裝內(與AJAX相同)。
顯着減少了解析開銷。
但在實際情況下,通常需要向服務器/客戶端發送與實際xml消息有效載荷無關的額外信息。
這導致想方設法通過HTTP消息傳輸信息。
由於需要傳遞這樣的信息,有些人反駁認爲基於SOAP的服務有助於滿足這些需求。