REST Vs SOAP,Soap 和 Rest 的區別

來源:互聯網
上載者:User

標籤:soap   rest   soap vs rest   soap適用場合   何時使用soap   

今天有人問了我這樣一個問題:“為什麼會有人選擇 SOAP(Simple Object Access Protocol,簡易物件存取通訊協定 (SOAP)) 而不是 REST(Representational State Transfer,表述性狀態傳遞)呢?”我的回答是:“我常常聽到的一般經驗性法則是‘除非你有一個明確的理由去使用 SOAP,否則的話就使用 REST’”。他又問:“比如?”我想了一分鐘,然後老實地回答說我還沒有碰到過這樣一個理由。我的背景是構建大型互連網公司。

儘管他貌似滿足於我剛才的回答,但是我卻對那樣的答案不太滿意。對此我做了一些功課,本文是我就 REST vs SOAP 做的一些總結,將對 SOAP 和 REST 之間的區別,以及為何有人會選擇 SOAP 進行闡述。像往常一樣,通過對比每種技術的意義來讓我們瞭解到如何進行取捨(幸運的是答案常常會是 REST)。
我對它們的闡述明顯有些言簡意賅,因此對於我把事情弄的如此簡化請勿拍磚,但欠妥的地方還請不吝指正。
定義RESTREST 的最佳情境是當你通過互連網公開一個公用 API 來對資料的 CRUD 操作進行處理的時候。REST 專註於通過一個一致性介面訪問命名資源。
SOAPSOAP 提供了自己的協議並專註於公開某些應用邏輯(不是資料)為服務。SOAP 公開的是操作。SOAP 專註於訪問通過不同的介面實現了某些商務邏輯的命名操作。
SOAP 常常被稱作“web services”,這是一個誤稱。SOAP 和 web 基本上說不上話。REST 提供的才是真正的基於 URL 和 HTTP 的 “web services”。
以下是幾個調用方式示範,並附以相關解釋。
getUser(User);

上面這是一個 REST 操作,因為你正在對一個資源(資料)進行訪問。
switchCategory(User, OldCategory, NewCategory)

由於你是在執行一個操作所以上面這是一個 SOAP 動作。
當然,上述兩種調用都既可以用 SOAP 也可以用 REST。示範的目的是用來理解它們在概念上的區別。
Why REST?接下來解釋為何 REST 幾乎總是正確的答案。
REST 使用了標準 HTTP 因此它做什麼都更加簡單。建立用戶端,開發 API,文檔更易於理解,而且沒有一件事用 REST 做起來不比 SOAP 更簡單/更好。
REST 允許很多不同的資料格式而 SOAP 僅支援 XML。雖然這樣看起來給 REST 增加了複雜度因為你需要處理多種格式,但以我的經驗來看這樣實際上有很多好處。JSON 通常更適用於承載資料而且解析起來更快。由於其對 JSON 的支援,REST 允許我們更好地支援瀏覽器用戶端。
REST 具備更好的效能和可擴充性。REST 讀取可以被緩衝起來,而基於 SOAP 的讀取無法被緩衝。
用來做論據不太好(權威),但是值得一提的是 Yahoo 的包括 Flickr 和 del.ici.ous 在內的所有服務都使用了 REST。Amazon 和 Ebay 兩種都有使用,儘管 Amazon 內部使用的幾乎全都是 REST 資源。Google 曾經對於他們所有的服務僅提供 SOAP,但 2006 年起 Google 棄用了 SOAP 轉投 REST 資源。有趣的是在 Amazon 內部是否也有過關於 REST Vs SOAP 的爭議,但是最終還是 REST 主宰了他們 web services 的架構。
Why SOAP?接下來列舉一些你可能想要使用 SOAP 的原因。
web services 安全SOAP 不僅像 REST 一樣支援 SSL,而且還支援增加了很多企業級安全特性的 WS-Security(WS = web services)。因此它能夠提供通過中介的身分識別驗證,而不僅僅是端對端的驗證(SSL)。此外,SOAP 還提供了一個資料完整性和資料隱私性的標準實現。叫它“企業級”並不是說它更安全,它只是簡單提供了典型互連網服務不需要的幾個安全工具而已,事實上這些工具只有在很少的一些“企業級”情境下才能派的上用場。
web services 原子性事務如果服務需要 ACID 事務的話,那麼你就需要 SOAP 了。儘管 REST 也支援事務,但它並非完整性的而且不具備 ACID。幸運的是 ACID 事務對於互連網來說幾乎沒有任何意義。REST 受限於 HTTP,HTTP 本身無法提供兩階段交易認可分散式交易資源,但是 SOAP 可以。互連網應用一般不會需要這等層級的事務可靠性,企業級應用有時會需要。
web services 訊息可靠性REST 不具備一個標準的訊息體系,它期望用戶端通過重試來處理通訊失敗。SOAP 具備內建的成功/重試邏輯並通過 SOAP 中介來提供端對端的可靠性。
總結總之,SOAP 顯然是有用的,而且還很重要。例如,如果我去寫一個串連到我的銀行的 iPhone 應用那麼我當然需要使用 SOAP。上述三點特性都是銀行事務所必須的。比如,如果我將資金從一個賬戶轉移到另外一個賬戶,我需要確定它的完成。如果第一次轉賬成功,但響應失敗,這個時候的 REST 重試將會是災難性的。
參考資料
  • 為何不使用 SOAP
  • SOAP 還是 REST?
  • 再見,Google SOAP 搜尋 API
  • SOAP Vs REST
原文連結:http://spf13.com/post/soap-vs-rest

REST Vs SOAP,Soap 和 Rest 的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.