什麼是rest
REST (REpresentational State Transfort) 形式上應該表述為客戶端通過申請資源來實現狀態的轉換,在這個角度系統可以看成一臺虛擬的狀態機。拋開R. T. Fielding博士論文裡晦澀的理論不說,REST應該滿足這樣的特點:1)客戶端和伺服器結構;2)連線協議具有無狀態性;3)能夠利用Cache機制增進效能;4)層次化的系統;說到底,REST只是一種架構風格,而不是協議或標準。但這種新的風格(也許已經歷史悠久?)對現有的以SOAP為代表的Web Service造成的衝擊也是革命性的,因為它面向資源,甚至連服務也抽象成資源,因為它和HTTP緊密結合,因為它伺服器無狀態。
目前知道的三種主流的Web服務實現方案為:
REST:表象化狀態轉變 (軟體架構風格)
SOAP:簡單物件訪問協議
XML-RPC:遠端過程呼叫協議 (已經慢慢被SOAP取代)
其他理解:
REST:表徵狀態轉移(Representational State Transfer),採用Web 服務使用標準的 HTTP 方法 (GET/PUT/POST/DELETE) 將所有 Web 系統的服務抽象為資源,REST從資源的角度來觀察整個網路,分佈在各處的資源由URI確定,而客戶端的應用通過URI來獲取資源的表徵。Http協議所抽象的get,post,put,delete就好比資料庫中最基本的增刪改查,而網際網路上的各種資源就好比資料庫中的記錄(可能這麼比喻不是很好),對於各種資源的操作最後總是能抽象成為這四種基本操作,在定義了定位資源的規則以後,對於資源的操作通過標準的Http協議就可以實現,開發者也會受益於這種輕量級的協議。REST是一種軟體架構風格而非協議也非規範,是一種針對網路應用的開發方式,可以降低開發的複雜性,提高系統的可伸縮性。
SOAP:簡單物件訪問協議(Simple Object Access Protocol)是一種標準化的通訊規範,主要用於Web服務(web service)中。用一個簡單的例子來說明 SOAP 使用過程,一個 SOAP 訊息可以傳送到一個具有 Web Service 功能的 Web 站點,例如,一個含有房價資訊的資料庫,訊息的引數中標明這是一個查詢訊息,此站點將返回一個 XML 格式的資訊,其中包含了查詢結果(價格,位置,特點,或者其他資訊)。由於資料是用一種標準化的可分析的結構來傳遞的,所以可以直接被第三方站點所利用。
XML-RPC:一個遠端過程呼叫(remote procedure call,RPC)的分散式計算協議,通過XML將呼叫函式封裝,並使用HTTP協議作為傳送機制。後來在新的功能不斷被引入下,這個標準慢慢演變成為今日的SOAP協定。XML-RPC協定是已登記的專利專案。XML-RPC透過向裝置了這個協定的伺服器發出HTTP請求。發出請求的使用者端一般都是需要向遠端系統要求呼叫的軟體。
三種方案的簡單比較
XML-RPC已慢慢的被SOAP所取代,現在很少採用了,但它還是有版權的,我在此就不作多介紹。
成熟度上:SOAP在成熟度上優於REST
效率和易用性上:REST更勝一籌(REST效率更高的原因在於,僅僅是建議的Http協議之上的一種協議。而SOAP則需要對資料、xml封裝資訊頭,解封裝等)
安全性上:SOAP安全性高於REST,因為REST更關注的是效率和效能問題
分散式能力:REST更適合在分散式環境中使用、因為REST是基於原生Http協議的,而http協議是無狀態的。大型分散式環境都能夠對無狀態支援良好,無狀態增強了整個系統的擴充套件性。這也是為什麼越來越多的雲端計算,分散式專案選擇REST。
(注:SOAP也是基於HTTP協議的,但是卻提供了session、cookie等機制來使得SOAP有狀態,從而支援需要有狀態的業務。有狀態舉例:1、增加一個使用者2、獲取最新增加的使用者。那1的執行成功與否,及執行先後順序的狀態將會影響2的結果。)
總體上,因為REST模式的Web服務與複雜的SOAP和XML-RPC對比來講明顯的更加簡潔,越來越多的web服務開始採用REST風格設計和實現。例如,Amazon.com提供接近REST風格的Web服務進行圖書查詢;雅虎提供的Web服務也是REST風格的。REST對於資源型服務介面來說很合適,同時特別適合對於效率要求很高,但是對於安全要求不高的場景。而SOAP的成熟性可以給需要提供給多開發語言的,對於安全性要求較高的介面設計帶來便利。所以我覺得純粹說什麼設計模式將會佔據主導地位沒有什麼意義,關鍵還是看應用場景,正是那句老話:適合的才是最好的
同時很重要一點就是不要扭曲了REST現在很多網站都跟風去開發REST風格的介面,其實都是在學其形,不知其心,最後弄得不倫不類,效能上不去,安全又保證不了,徒有一個看似象摸象樣的皮囊。
SOAP在安全方面是通過使用XML-Security和XML-Signature兩個規範組成了WS-Security來實現安全控制的,當前已經得到了各個廠商的支援,.net ,php ,java 都已經對其有了很好的支援。REST沒有任何規範對於安全方面作說明。因此在考慮安全性上,SOAP要高於REST。
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
u1w5mpKB3TRqLEK79Bb6Gw==
相關文章
- 什麼是REST?REST
- REST SOE是什麼?REST
- Django-rest-framework 是個什麼鬼?DjangoRESTFramework
- 使用SpringBoot構建REST服務-什麼是REST服務Spring BootREST
- REST是什麼?RESTFul又是什麼?這二者的關係是怎樣的?REST
- 到底什麼樣的 REST 才是最佳 REST?REST
- 為什麼REST比GraphQL更好? - TomaszJaskuλaREST
- 什麼是cookie,什麼是sessionCookieSession
- 什麼是DNS,什麼是HostsDNS
- 什麼是模式? 什麼是框架?模式框架
- 這是什麼這是什麼
- 什麼是WebAuthn、FIDO 是什麼?Web
- ITIL是什麼意思?ITIL是什麼?
- 什麼是跨域,什麼是同源跨域
- 什麼是.NET平臺、什麼是c#、什麼是ASP.NET。C#ASP.NET
- ftp是什麼,ftp是什麼東西?FTP
- Java是什麼_Java是做什麼的?Java
- 什麼是正向代理?什麼是反向代理?
- NLA是什麼?NLA的原理是什麼?
- ###什麼是Linux核心###什麼是MMULinux
- 為什麼要有 Servlet ,什麼是 Servlet 容器,什麼是 Web 容器?ServletWeb
- 為什麼要使用MVC+REST+CQRS架構MVCREST架構
- 什麼是REST架構?是不是Web應用都能採取此種架構呢?REST架構Web
- 什麼是塊元素?什麼是行內元素?
- 什麼是API介面,具體是什麼意思?API
- 什麼是框架?為什麼說 Angular 是框架?框架Angular
- 什麼是Unicode,什麼是UTF-8Unicode
- 什麼是藍海?什麼是紅海?什麼是網際網路思維?
- nginx 是什麼,能幹什麼?Nginx
- 什麼是Django?有什麼用途?Django
- AI三重問:什麼是AI?什麼是AI模型?什麼是AI大模型?AI大模型
- 什麼是重繪repaint?什麼是迴流reflow?AI
- DHCP是什麼?DHCP伺服器是什麼意思?伺服器
- 什麼是CDN?CDN的技術原理是什麼?
- 交換機是什麼,它的工作原理是什麼
- GNU是什麼?和Linux是什麼關係?Linux
- 域名是什麼?申請域名的流程是什麼?
- 什麼是雲端計算?什麼是公司網盤?