我不滿意SOAP和特別是在這裏休息的問題給出答案: Performance of SOAP vs. XML-RPC or RESTSOAP與REST:語用案例研究?
,因爲它只是一般的哲學的答案,而不是務實的答案與一些研究案例。
沒有人能得到的皁時會比其餘更適合,特別是爲了性能的角度精確例?
更新:我認爲REST正在贏得這場戰爭。
我不滿意SOAP和特別是在這裏休息的問題給出答案: Performance of SOAP vs. XML-RPC or RESTSOAP與REST:語用案例研究?
,因爲它只是一般的哲學的答案,而不是務實的答案與一些研究案例。
沒有人能得到的皁時會比其餘更適合,特別是爲了性能的角度精確例?
更新:我認爲REST正在贏得這場戰爭。
你可以找到一篇文章比較這裏REST和SOAP: http://www.jopera.org/files/www2008-restws-pautasso-zimmermann-leymann.pdf
作者的結論似乎是:
我個人不喜歡「專業企業」這樣的術語,因爲它是寬鬆的,非正式的。然而在我看來,作者在文章中提出了一些好的觀點。也許會得出結論並給出一些自己的想法:
如果您想讓API公開 - 以REST方式執行此操作。爲什麼?使用客戶端應用程序非常簡單,所以它會使您的服務更受歡迎。例如亞馬遜暴露REST和SOAP的API,但其85%的用戶選擇了REST版本Amazon API - SOAP vs. REST
使用SOAP和WS- *棧,如果您將創建(或您創建的過程的一些控制)無論是消費者還是服務的生產者,您都需要WS- *的高級功能。這可能還需要更多的資源,因爲SOAP應用程序往往會「更重」(更多功能,但更復雜)。
另外考慮性能REST可能會更快(消息肯定更短,你不需要解析xml)。
希望它會有所幫助。
在你的flash客戶端的例子中 - 如果不知道詳細信息就很難說清楚,但是如果不需要WS- *的所有安全性和事務特性,我認爲構建REST應用程序會更簡單快捷。
回答評論
我應該用肥皂,因爲我在這麼 所謂的「專業性企業」
而且假設,當然,你的選擇是不是真的決定我由大軟件供應商提供。
SOAP適用於大型企業,因爲它鼓勵更正式的方法。它提供了巨大的規格,因此您的開發人員可能需要時間來學習它們,甚至可能需要一些專業培訓 - >因此花費公司資源。它也提供工具 - 並不是所有的都是開源的,所以這也意味着額外的資源。但是,如果你的團隊將學習這種集成服務的方式,它可能是高效的,並且結果代碼將是高質量的。
REST相反更多是一種開發應用程序的理念。所以,沒有龐大的規格,沒有專門的工具。沒有資源支出。如果你有一小組優秀的程序員,這可能會很好 - 如果他們知道基本原則,他們不需要太多的指導。不幸的是,做錯事也更容易。
需要考慮的另一件事是應用程序的大小 - API越豐富,您想要集成的服務越多,就越難以實現RESTful。構建小型SOAP應用程序也不是一個好主意 - 整個開銷和入口成本太高。
您需要評估項目的優缺點。在不知道我所想的所有細節的情況下提供建議是不可能的。
最後 - 這與合理的論點無關,但更多與政治。我認爲管理層的人似乎更喜歡WS- *堆棧和SOAP(它支持「大企業」,所以他們更容易證明自己的選擇)。另一方面,來自學術背景的人[1]更喜歡REST--因爲仍然可以在該領域進行大量的研究。
[1]我是介於兩者之間,這樣我就可以觀察到兩種行爲;-)
表現不是決定性因素。
首先,我應該說,要求一個SOAP-VS-REST的問題是有點荒唐,因爲SOAP是一個XML格式的信封和REST是一種體系結構。因此,我將做一個小小的假設,並假設您真的在考慮SOAP-vs-POX或SOAP-vs-JSON或SOAP-vs-其他一些數據格式化方法。
決定因素應該是這樣的:
您現在是否需要或將來需要SOAP信封?
SOAP信封允許之類的東西框架提供的加密,digsig,路由和授權檢查,除其他事項。當然,您可以使用REST(或者更準確地說,使用純舊的XML或JSON等)來完成這些工作,但爲了實現這一目標,您必須自己做更多的工作。
如果性能 - 無論你詮釋它的意思是 - 真的是你的#1的標準,那麼你或許應該放棄SOAP和POX,並移動到protobufs什麼性能優化別的。這些序列化速度更快,傳輸速度更快。
如果你覺得這個答案是「太哲學」,你真的想硬數字,好,那我想你需要進行一些測試。實際性能在您選擇的工具包,消息的形狀以及您使用的額外數據服務(如加密等)上會有很大差異。但是最終,perf不會是或者不應該是決定性的。
如果你的SOAP工具箱使用起來容易20%。調試和維護作爲您的POX工具包,那麼無論性能如何,您都應該使用SOAP。人們(編碼員,建築師,測試人員)現在比CPU和網絡貴得多。如果需要的話,你總是可以購買另外兩個cpus,或者一個更大的網絡,如果你的設計是正確的話。但是如果你的框架很難使用,或者它將你的員工趕走,那麼你不會花20%的時間開發,不惜任何代價。除非您正在運行地理比例網絡,否則您將更好地爲人員進行優化,而不是爲網絡進行優化。
我喜歡這一點,只想補充一點,所有的地理規模網絡開始小。如果您發現自己正轉向地理範圍,那麼您將擁有資源來聘請專門專門處理網絡流量的人員。我認爲最好的路線是「不能買20%的開發時間」 – jcolebrand 2010-05-01 23:33:18
我不同意「人們要貴得多」,或者至少取決於你的企業環境和項目。如果它是一個擁有數百萬用戶的大公司,那麼這不會是什麼大不了的事情。重要的是:性能真的會提高。如果是的話,我們試着去實現它。至於部署這是另一個故事,因爲涉及很多部門,但它不是價格的問題:) 順便說一句,感謝您的答案。 – user310291 2010-05-02 10:37:55
我認爲性能是決定性因素,只有當它是一個數量級時,這在這裏不是這樣。我們正在討論更多的開銷或者更少的開銷,沒有什麼會以足夠大的方式影響可伸縮性,從而以犧牲其他任何成本爲代價來關注性能。 – 2010-05-02 11:54:14
很好的答案,但要小心使用術語「客戶端」。如果你的意思是,「JavaScript客戶端使用XmlHttp直接與服務對話」,但如果你的客戶使用工具生成JavaScript代理類來與服務交談,那麼你就是對的。 – 2010-05-02 00:08:49
謝謝你的想法。根據上面的文章,我應該使用肥皂,因爲我在所謂的「專業企業」。但我意識到,所謂的專業人士有時意味着「供應商瞄準企業」,技術選擇更多地受商業利益的支配,而不是純技術原因,這就是爲什麼我問這個問題:) – user310291 2010-05-02 10:44:27