REST和SOAP:誰更好,或者都好?

    現在,Web開發者的可選技術至關之多;從簡化的數據庫訪問技術,到易用的中間件服務包裝技術,以及各類有趣的客戶端軟件等等,包羅萬象。全部這些產品和工具,都是爲了幫助Web開發者用最快的速度開發出最好的Web應用。 

然而,擁有大量可選軟件方案以及爲Web應用的特定部分選用特定方案,都是具備挑戰的事;並且,如今Web開發者必須持續跟蹤各類不斷變化着的標準與方法。 

舉個例子,Web服務技術就有SOAP(Simple Object Access Protocol,簡單對象訪問協議)和REST(Representational State Transfer,表示性狀態轉移)這兩種方案。它們都是有效的方案,但在具體場合下采用哪一種方案好,這要取決於Web開發者。 

目前,大部分Web開發者彷佛都瞭解REST——一種採用標準URI進行調用的方案。REST很容易理解,並且只要是支持HTTP/HTTPS的客戶端 /服務器就支持它。你能夠用HTTP GET方法來執行命令。因此,開發者們感覺到的REST的優點是:開發簡單、只需依託現有Web基礎設施、以及學習成本低。 

然而,SOAP做爲一種古老的Web服務技術,短時間內還不會退出歷史舞臺。並且,隨着SOAP 1.2的出現,SOAP印象中的一些缺點已獲得改進,採納率和易用程度也都獲得提升。另需注意的是,從W3C SOAP 1.2版開始,SOAP這一縮寫再也不表明Simple Object Access Protocol(簡單對象訪問協議),而是僅僅做爲協議名稱而已。 

相對REST而言,SOAP 1.2多出一些開銷,不過這些開銷也帶來了一些好處。首先,SOAP在三個方面離不開XML(Extensible Markup Language,可擴展標記語言):SOAP信封(envelope)是基於XML的,它定義了消息裏有什麼以及如何處理它;一套用於數據類型的編碼規則;過程調用和響應的規劃。SOAP信封由傳輸協議(HTTP/HTTPS)發出,RPC(Remote Procedure Call,遠程過程調用)獲得執行,而後一個XML文檔隨SOAP信封返回。 

須要注意的是,基於「通用」傳輸協議是SOAP的一個優勢。REST目前基於HTTP/HTTPS;而SOAP可支持任何傳輸協議,從HTTP /HTTPS到SMTP(Simple Mail Transfer Protocol,簡單郵件傳送協議),甚至JMS(Java Messaging Service,Java消息傳遞服務)。不過,因爲XML較爲冗長且解析費時,所以採用XML也成爲一個弊端。 

不過,對Web開發者來講的好消息是,目前上述兩種方案都是行之有效的方案。REST和SOAP都能解決許多Web方面的問題與挑戰,並且在許多狀況下,它們各自都能知足開發者的要求,也就是說可互換使用。 

但不少人不知道,這兩種技術能夠混合搭配使用。REST很好理解,且極易上手;不過因爲它缺少標準,所以只被看做是一種架構方法。與之相比,SOAP是一個工業標準,它具有良好定義的協議,以及一套良好確立的規則,在大型和小型系統中均有采用。 

所以,REST的適用場合包括: 

有限的帶寬和資源 別忘了返回的結構能夠採用(由開發者定義的)任何格式。另外,因爲REST採用標準的GET、PUT、POST和DELETE動詞,所以可被任何瀏覽器所支持。除此之外,REST還可使用爲目前大多數瀏覽器支持的XMLHttpRequest對象,這爲AJAX增色很多。 
徹底無狀態的操做 對於那些需多步執行的操做,REST並不是最佳選擇,採用SOAP更合適。可是,若是你須要無狀態的CRUD(Create/Read/Update/Delete,建立/讀取/更新/刪除)操做,那麼應採用REST。 
緩存考慮 若要利用無狀態操做的特性,使得信息可被緩存,那麼REST是很好的選擇。 
以上已經覆蓋不少方案了,那麼,爲何還要考慮SOAP呢?正如前述,SOAP比較成熟並且是通過良好定義的,具備完整的規範。而REST只不過是一種方法,對開發未做任何規約;所以,假如你遇到如下場合,那麼SOAP是最佳選擇: 

異步處理與調用 若是你的應用須要確保可靠性與安全性,那麼請採用SOAP。SOAP 1.2爲確保這種操做補充定義了WSRM(WS-Reliable Messaging)等標準。 
形式化契約 若提供者/消費者雙方必須就交換格式取得一致,那麼採用SOAP更合適。SOAP 1.2爲這種交互提供了嚴格的規範。 
有狀態的操做 若是應用須要上下文信息與對話狀態管理,那麼應採用SOAP。SOAP 1.2爲此補充定義了WS-Security、WS-Transactions和WS-Coordination等標準。相比之下,REST方法要求開發者本身來實現這些框架性工做。 
正如你所看到的,REST和SOAP各自有其用武之地。它們在安全性和傳輸層等方面有着本身的潛在問題,不過它們都能完成任務,並且在許多狀況下,它們都豐富了Web的技術手段。所以,就這一論題,其實最好的原則就是靈活性原則;由於至少在現今的Web開發中,不管面對何種問題,Web開發者們總有辦法運用好這兩種技術中的一種。 

關於做者 
Mike Rozlog是Embarcadero科技公司的高級產品主管。他的主要工做是確保Embarcadero公司推出開發工具知足全世界開發者們的指望。他的大部分時間被致力於從技術和業務兩個方面來介紹講解Embarcadero的產品與服務,其聽衆是遍及全球分析師及其餘聽衆。Mike曾工做於 CodeGear,一個於2008年被Embarcadero收購的開發工具團隊。以前,他爲Borland公司工做了八年,擔任過包括首席技術架構師在內的許多職位。做爲一名知名做者,Mike出版了不少書。他最近的做品《Mastering JBuilder》已由John Wiley & Sons出版。數據庫

相關文章
相關標籤/搜索