我已經歷了各種網站,他們提供的唯一答案是 - Restful webservices使用Http自己的方法,例如(GET,POST,PUT,DELETE)..儘管SOAP基於瀏覽器的web服務使用自己的自定義方法.. - Restful Web服務將每種服務方法視爲一種資源併爲其提供一個URI ..Restful web服務如何比基於SOAP的web服務更好
但是,我不明白這些答案的全部意義。至於爲什麼這些事情相對於基於SOAP的網絡服務而言被證明是如此巨大的優勢。
一個示例將被讚賞
我已經歷了各種網站,他們提供的唯一答案是 - Restful webservices使用Http自己的方法,例如(GET,POST,PUT,DELETE)..儘管SOAP基於瀏覽器的web服務使用自己的自定義方法.. - Restful Web服務將每種服務方法視爲一種資源併爲其提供一個URI ..Restful web服務如何比基於SOAP的web服務更好
但是,我不明白這些答案的全部意義。至於爲什麼這些事情相對於基於SOAP的網絡服務而言被證明是如此巨大的優勢。
一個示例將被讚賞
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。
好處是有策略的 - 當然可以做一切你可以做的事情,但web服務器在SOAP之前,並且配置起來相當簡單,所以通常更簡單。例如,身份驗證等通常可以由Web服務器處理,因爲可以重定向和負載平衡等。普通的SOAP框架並不是真的具有完整的一套這樣的功能,並且可能會導致越來越多的痛苦。
SOAP的主要問題是膨脹。你可以做的越多,你可以使用的默認值越少。即使對於簡單的方法,這也會導致巨大的WSDL下載。接下來,它膨脹瞭解析器(特定的解析器總是比通用的解析器小),消息(XML的整體而不是帶有URI的DELETE
),錯誤處理程序(您發送20-30KB的XML到服務器,它迴應一個50KB的錯誤信息;祝你好運,閱讀並理解它)。
具體示例:通過SOAP從SharePoint服務器讀取文檔列表的Java代碼非常龐大,您需要爲Java編譯器提供1GB的RAM來編譯它。
和Restful一樣,只需要幾行代碼。在客戶端上,您需要使用GET list/some/url
來構建請求。即使您需要手動編寫代碼,解析服務器上的內容也不會比編譯WSDL更省力。
從它的聲音,你有一個框架非常糟糕的經驗。與REST相比,SOAP通常需要較少的手動編碼才能開始,因爲框架通常會自動化大部分管道。 WSDL的大小應該與運行時性能無關,因爲它僅用於協助客戶端代理生成。 – 2010-11-09 12:20:44
我使用了Axis。 Java上還有其他的東西嗎?而且,WSDL的大小是相關的,因爲大的WSDL ==大的請求。 – 2010-11-09 15:03:26
由於SOAP層增加了額外的複雜性,許多人對基於SOAP的Web服務不以爲然,認爲這是一種不當開銷,提出了RESTful Web服務。
在REST框架中,xml消息直接封裝在HTTP有效內容中,而不是封裝在SOAP封裝內(與AJAX相同)。
顯着減少了解析開銷。
但在實際情況下,通常需要向服務器/客戶端發送與實際xml消息有效載荷無關的額外信息。
這導致想方設法通過HTTP消息傳輸信息。
由於需要傳遞這樣的信息,有些人反駁認爲基於SOAP的服務有助於滿足這些需求。
可能的重複:http://stackoverflow.com/questions/76595/soap-or-rest – michid 2010-11-09 10:51:20
你有什麼想法嗎?你有4個非常好的答案。 – RPM1984 2010-11-10 09:01:13
@ RPM1984:是的,我想我會去REST,因爲它有不同的服務,這使得它非常鬆散耦合的URL不同,也有像url結構的目錄(不像SOAP有「www.somesite.com?query=something」 )這使得搜索引擎友好。 :) – Anand 2010-11-14 07:32:21