2012-12-12 59 views
2

(不是Should i use rest or soap的重複。該問題只有1個答案,除了開銷外,沒有提供許多參數)。使用SOAP或REST進行新的Api

在將此問題標記爲重複之前,請考慮我正在尋找在我之前做出選擇的人的答案,並根據他們自己的經驗解釋他們的原因。簡單說明「開銷」或「更復雜」的答案不適合該配置文件。

現在的問題:

前陣子我用肥皂(PHP/Zend_Soap_Server,Zend_Soap_Autodiscover)開始建立一個新的API。儘管我已經知道如何使用肥皂,但複雜性讓我懷疑這是否是未來維護的好選擇。

我聽說過REST,但沒有任何經驗。

所以問題是:什麼是REST vs SOAP的優缺點,當你創建一個新的api(相當複雜的api,使用ssl的幾十種方法,必須具有體面的安全性等)時,你有什麼建議? REST或SOAP。

如果您認爲您的答案在REST和SOAP之間的平衡中懸而未決,並且特定的依賴關係或功能會提高規模,請務必提出您需要了解的任何內容。我會盡快回答。

的API的功能的簡短列表:

  • 認證
  • 執行數學函數的前端
  • 提供的二進制文件複製到前端(發票)
  • 各種信息的基本CRUD

api的地方基本如下:

互聯網 - >網站 - > [內部網] - > API /後端 - >數據庫

謝謝你的時間提前..

+0

這可能會幫助您http://stackoverflow.com/questions/209905/rest-and-soap – user1190992

回答

27

這當然是一個很有爭議的話題,但在同時,由於多種原因,大多數新服務都是REST。使用REST我不會在兩者之間的差異(因爲是有據可查的),但更多的原因我想你會建立一個新的服務,今天(2012年):

  • REST是簡單得多,基本上只是建立在HTTP之上
  • 您可以使用Web瀏覽器或類似curl或httpie來測試(和調試)REST服務。是的,這在技術上也可以用SOAP來實現,但是你必須對SOAP模式有所瞭解。
  • 同樣,只要您有訪問HTTP的方法,您就可以構建REST客戶端。SOAP需要SOAP-能夠庫
  • REST更多的是式的並建立在HTTP之上,而SOAP是在HTTP之上的整個協議(這也是一個協議)
  • SOAP瘋狂擴展協議結束喜歡的WS-Security,WS-加密(其中,本質上,都是極其複雜的設計,由委員會解決問題的方法解決了HTTP在幾十年前互聯網的其餘部分)

如果你在一些環顧四周互聯網上的主要API(例如Google,Facebook,Twitter等),你會發現很多REST,很少或沒有SOAP。那些擁有SOAP接口的用戶會棄用或完全放棄它們,因爲沒有理由繼續使用它。實際上,許多大型服務進一步發展,只提供JSON格式的REST服務,而不是XML或兩者,因爲像REST over SOAP一樣,JSON在大小方面有很多優勢並簡化XML,繼續支持XML沒有多大意義。


與SOAP相比,REST也幾乎沒有缺點。

關於我能想到的唯一的實際考慮是從客戶的角度。使用SOAP(由於WSDL,假設您生成了一個),您可以在服務中指定一個支持SOAP的IDE(如VisualStudio),並且它將基於遠程服務生成本機客戶端代理API。這對於快速啓動和運行來說有點不錯,但有其自身的一些缺點:它迫使您使用服務中定義的對象(而使用REST,只要數據映射可以使用自己的對象定義),並且根據遠程服務如何處理版本控制(或不是)以及如何使用它,您可能最終不得不更新應用程序的主要塊,因爲命名更改很簡單。

從服務器的角度來看,我看不出任何技術上的好處,無論選擇SOAP還是REST。

TL; DR:SOAP不一定不好,這只是說REST更好。

+1

謝謝。你給了我正在尋找的答案類型。比較技術差異從來沒有真正解釋爲什麼 - 在某些人的選擇背後(大部分時間)。我暫時不會回答這個問題,因爲我希望聽到更多的人在我之前做出選擇,但無論如何+1會爲你付出努力! –

+0

但是REST不支持事務和消息的可靠性(交付與否)和消息安全 –

+0

我在SOAP上看到的另一個重大優勢是可以使用standardClass通過API發送。其優點是不需要解析json,但可以通過API發送類/對象,因此沒有媒體中斷,但保留了所有面向對象的東西。 –