2011-05-29 54 views
19

我已閱讀教程「web-service-php-mysql-xml-json」。爲什麼使用SOAP進行web服務?

看起來一切正常。但那麼爲什麼我們應該使用soap來進行web服務?

+3

只有當你必須(=得到一個請求或被支付時才這麼做)。通用Web服務不需要SOAP的開銷。 SOAP現在更多地是一個利基內聯網協議。 – mario 2011-05-29 14:55:18

+0

謝謝你。請更多描述。 – user677900 2011-05-30 04:26:01

+6

是的,SOAP是一個利基協議 - 利基包括安全性,可靠性,交易等。 – 2011-06-18 20:41:24

回答

51

當構建Web服務,你可以去兩種方式:

  • SOAP
  • REST

大多數人選擇更小的阻力,這是REST的路徑。這意味着簡單,易於開發,使用HTTP它的意思被使用的方式,使在另一端很好地利用緩存代理,更可讀的結果等

SOAP的比REST更重量級的,也是備份了大量的specifications。但是,因爲它更復雜(SOAP曾經是簡單對象訪問協議的縮寫 - 事實證明這不是簡單的對象)SOAP並不是很多人喜歡的。

兩種方法都有效,兩者都有優點和缺點。例如,SOAP可以使用任何傳輸協議,而不僅僅是HTTP(S),SOAP在提供安全性時提供更多選項,SOAP提供可靠的消息傳遞等等。另一方面,REST允許許多不同類型的數據格式,由於JSON格式,REST允許更好地支持瀏覽器,因此REST具有更好的性能等等等等。

我不打算進入更多細節,因爲您可以在網上找到很多比較SOAP vs REST 。我想強調的是,在某些情況下,其中一個比另一個更好,並且由您決定並選擇要執行哪個來執行您的特定案例

編輯:要回答你的問題:

爲什麼使用SOAP或休息嗎?我們可以沒有他們的Web服務?

那麼,W3C將Web服務定義爲「a software system designed to support interoperable machine-to-machine interaction over a network」。

好的...這對定義很好。但是這不是SOAP/REST的定義,這個要求可以成功地在communication protocol處理。

因此,基本上,只要支持「可互操作的機器對機器交互」,您就可以使用任何您想要的通信協議(甚至創建自己的)的Web服務。這也意味着別的東西比SOAP或REST(OK ... REST不是一個協議,我只是在這裏用它作爲參考來證明我的觀點...所以裸露在我身邊)。

但是你創建一個web服務,因爲你想讓一些客戶使用你的服務。而你的客戶就在野外狂野的西部(即網絡:D),那裏的人們會說SOAP/REST。在那裏你會說:「我們很不喜歡我們店裏的SOAP和REST,我們喜歡像RPC,CORBA和我們自己獨特的產品」Bone Crusher 10000「協議。如果你想和我們做生意,你去學「骨破碎機10000」」。和您的客戶會說(眉毛擡起)‘Yeaaaaah righttttt .....’。

(I」在這裏假設你的協議不會是地面抖動,這將完全超出SOAP/REST:D)

所以,如果你不使用SOAP/REST,你將限制你的目標受衆。例如,我不是英語母語的人,是嗎?因爲我們可以用英語進行溝通,所以這並不重要,想在Icelandic中試試這個嗎?不是我的本性e語言呢?

正如我已經說過,它是由你來決定和選擇實現給你的具體情況,但如果將信息從已知的技術遠棧你扔掉什麼附帶有:豐富的經驗,資源,工具和通信選項

作爲最後一個例子,今天對SOAP協議有很多支持,您可以從WSDL文件開始很容易地生成客戶端。並且presto ...您的客戶可以與您的Web服務進行通信。它會像「Bone Crusher 10000」一樣容易嗎?如果你編寫工具,提供資源,支持等等......是的!但是這會花費你的時間和金錢來創造一些已經發明並且今天被廣泛使用的東西

+0

謝謝你的回覆,但我的意思是爲什麼使用SOAP或REST?我們可以沒有他們的Web服務? – user677900 2011-05-30 04:24:52

+0

@a。v:查看我編輯的新問題答案 – 2011-05-30 20:04:08

+5

對於本地語言隱喻+1,這是一種有趣的方式。 – bmeding 2011-05-30 20:11:34

0

user159088在她/他的回答中提到的一個重點是「[...],您可以從WSDL文件開始非常容易地生成客戶端!

我想這個來進一步闡述:

您可以結合使用SOAP與標準化是什麼意思是,誰知道標準(WSDL)的人可以從中學到什麼操作的Web服務提供WSDL和數據如何交換。

這個知識可以用f.e.創建工具,從WSDL文件中生成類型安全聯編程序類/對象。您可以使用這些生成的類(製作RPC),而無需手動實現請求以及交換數據的編碼/解析。

鑑於REST沒有標準(如WSDL模式)交換數據的樣子。因此,您通常最終會自行解析數據。


的第二點是,REST工作主要是與HTTP(S)協議(它是基於它)。它使用HTTP(s)協議的CRUD動詞(CREATE/READ/UPDATE/DELETE)。 SOAP不依賴於它,因此可用於其他協議以及

+0

如今我已經看到很多API並不關心關於CRUD動詞。只有API方法可以接受參數,做和/或返回東西,就像大多數編程語言一樣。在HTTP層,他們甚至不關心你是否使用GET或POST。 – sudo 2018-02-17 22:51:03