SOAP與REST API的愛恨情仇

以前一直想寫些RESTful相關的文章,卻一直未付諸行動。直到最近接手一個新的項目,對這塊從新溫習,乘此機會寫些相關帖子。歡迎你們評論留言,若有錯漏之處,也望各位大佬不令賜教。javascript

話很少說,幹活頂上。php


SOAP(Simple Object Access Protocol - 簡單對象訪問協議)定義了一種強類型的消息傳遞框架,該框架高度依賴XML和schemas。
REST(Representation State Transfer - 表示狀態轉移)是一種架構樣式風格,它利用了當下被普遍採用的技術(特別是HTTP),自己卻不建立任何新的標準。REST能夠將數據結構序列化爲XML,YAML或任何其餘機器可讀格式,但一般首選JSON。
 
SOAP和REST都支持構建基於應用程序的SOA(Service-oriented architecture,面向服務的架構),在實際項目中如何選擇主要看業務的需求是什麼。那如何選擇呢?
這即是今天的重點,討論下二者的主要區別。今天主要從一下幾個方面進行區別:
 
底層協議
  • SOAP自己即是基於HTTP而發展的協議。
  • REST與HTTP幾乎同樣,REST規範沒有強制的要求。
數據格式
  • SOAP只依靠XML來提供消息傳遞服務。在某些狀況下,消息傳遞服務可能變得極其複雜。例如,經過javascript訪問Web服務,
  • REST能夠語言自由的選擇易解析的數據格式。例如,CSV、JSON、XML、YAML等等。 
有狀態
  • SOAP Web服務是無狀態的,可是能夠經過修改服務器上的代碼輕鬆變爲有狀態的。
  • RESTful Web服務是徹底無狀態的。對話狀態的管理徹底由客戶端進行控制。服務端不保留任何狀態信息。也就是咱們一般所說的,客戶端的每次請求必須攜帶全部可能用到的信息。

HTTP的方法使用html

  • SOAP能夠對HTTP協議進行綁定。當綁定HTTP協議時,全部的SOAP請求都經過HTTP POST發送。
  • REST主要使用HTTP協議。經過HTTP GET、POST、PUT、DELETE和PATCH方法進行CRUD操做。
緩存
  • SOAP可使用HTTP傳輸機制,可是都轉換爲HTTP POST方法。而POST是非冪等的,因此沒法在HTTP級別進行緩存。所以SOAP的響應須要經過 Response Caching Optimization Module給的信息進行緩存。
  • REST能夠發送HTTP GET請求,GET是冪等的,所以REST可使用HTTP提供的緩存機制,使響應數據能夠標記爲可緩存或不可緩存。
安全
  • SOAP經過WS-SECURITY對安全進行了很好的標準化。
  • REST主要使用HTTP協議,HTTP自己是很是不安全的,但經過TLS它能夠支持基礎的身份認證和通訊加密,即HTTPS。此外,在服務器上還能夠進一步實施安全措施。
異步處理

建立和更新一般很是消耗資源,有時會須要異步請求處理。java

  • SOAP 1.2提供了額外的標準,可保證應用的可靠性和安全性。例如:WSRM – WS-Reliable Messaging
  • REST咱們一般返回HTTP狀態碼202(Accepted)和隊列位置,該位置上,任務的完成狀態將會被按期更新(固然,咱們也能夠將完成狀態信息存在數據庫中,並按期新增狀態信息,供客戶端查詢)。
總結
整體而言,REST更易於開發,由於它利用了已經存在的Web,而且自由度受到限制(作出的選擇更少,所以更簡單)。SOAP提供了多種選擇,而且開發難度也稍大一些,可是提供了更多的選擇。

做者:吳家二少數據庫

博客地址:https://www.cnblogs.com/cloudman-open/緩存

本文歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接安全

相關文章
相關標籤/搜索