【轉】RESTful Web Services初探


近幾年,RESTful Web Services漸漸開始流行,大量用於解決異構系統間的通信問題。很多網站和應用提供的API,都是基於RESTful風格的Web Services,比較著名的包括Twitter、Google以及項目管理工具Redmine。本文將簡要介紹RESTful Web Service,希望能對讀者有所幫助。

一、 RESTful Web Services是什么

REST的全稱是Representation State Transfer,它描述了一種設計Web應用的架構風格,它是一組架構約束條件和原則,滿足這些約束條件和原則的應用程序或設計就是 RESTful風格的。而符合RESTful風格的Web Services,就是我們所說的RESTful Web Services。REST原則如下:

1、資源由URI來指定

在Web應用中,所有的事物都應該擁有唯一的ID,代表ID的統一概念是:URI。URI構成了一個全局命名空間,使用URI標識你的關鍵資源意味着它們獲得了一個唯一、全局的ID。

2、顯式的使用HTTP方法

REST 要求開發人員顯式地使用 HTTP 方法,並且使用方式與協議定義一致。 這個基本 REST 設計原則建立了創建、讀取、更新和刪除(create, read, update, and delete,CRUD)操作與 HTTP 方法之間的一對一映射。 根據此映射:

  • 若要在服務器上創建資源,應該使用 POST 方法。
  • 若要檢索某個資源,應該使用 GET 方法。
  • 若要更改資源狀態或對其進行更新,應該使用 PUT 方法。
  • 若要刪除某個資源,應該使用 DELETE 方法。

3、資源的多重表述

針對不同的需求提供資源多重表述。這里所說的多重表述包括XML、JSON、HTML等。即服務器端需要向外部提供多種格式的資源表述,供不同的客戶端使用。比如移動應用可以使用XML或JSON和服務器端通信,而瀏覽器則能夠理解HTML。

4、無狀態

對服務器端的請求應該是無狀態的,完整、獨立的請求不要求服務器在處理請求時檢索任何類型的應用程序上下文或狀態。無狀態約束使服務器的變化對客戶端是不可見的,因為在兩次連續的請求中,客戶端並不依賴於同一台服務器。一個客戶端從某台服務器上收到一份包含鏈接的文檔,當它要做一些處理時,這台服務器宕掉了,可能是硬盤壞掉而被拿去修理,可能是軟件需要升級重啟——如果這個客戶端訪問了從這台服務器接收的鏈接,它不會察覺到后台的服務器已經改變了。

二、 RESTful Web Services與基於SOAP的Web Services的比較

通過前文,讀者應該大致了解了RESTful風格的Web Services,也有了一點深入了解的興趣。但讀者或許會問,基於SOAP的Web Services也是解決異構系統間通信問題的常用方案,那么,RESTful Web Services相對於基於SOAP 的Web Services,有什么優勢呢?或者說,我們為什么要開始學習RESTful Web Services,使用已經流行很久的基於SOAP的Web Services不就好了么?

RESTful web Services接口更易於使用

RESTful Web Services使用標准的 HTTP 方法 (GET/PUT/POST/DELETE) 來抽象所有 Web 系統的服務能力,而不同的是,SOAP 應用都通過定義自己個性化的接口方法來抽象 Web 服務。相對來說,RESTful Web Services接口更簡單。

RESTful Web Services使用標准的 HTTP 方法的優勢,從大的方面來講:標准化的 HTTP 操作方法,結合其他的標准化技術,如 URI,HTML,XML 等,將會極大提高系統與系統之間整合的互操作能力。尤其在 Web 應用領域,RESTful Web Services所表達的這種抽象能力更加貼近 Web 本身的工作方式,也更加自然。

同時,使用標准 HTTP 方法實現的 RESTful Web Services也帶來了 HTTP 方法本身的一些優勢:

  • 無狀態性

    HTTP 協議從本質上說是一種無狀態的協議,客戶端發出的 HTTP 請求之間可以相互隔離,不存在相互的狀態依賴。基於 HTTP 的 ROA,以非常自然的方式來實現無狀態服務請求處理邏輯。對於分布式的應用而言,任意給定的兩個服務請求 Request 1 與 Request 2,由於它們之間並沒有相互之間的狀態依賴,就不需要對它們進行相互協作處理,其結果是:Request 1 與 Request 2 可以在任何的服務器上執行,這樣的應用很容易在服務器端支持負載平衡 (load-balance)。

  • 安全操作與冪指相等特性

    HTTP 的 GET、HEAD 請求本質上應該是安全的調用,即:GET、HEAD 調用不會有任何的副作用,不會造成服務器端狀態的改變。對於服務器來說,客戶端對某一 URI 做 n 次的 GET、HAED 調用,其狀態與沒有做調用是一樣的,不會發生任何的改變。

    HTTP 的 PUT、DELTE 調用,具有冪指相等特性 , 即:客戶端對某一 URI 做 n 次的 PUT、DELTE 調用,其效果與做一次的調用是一樣的。HTTP 的 GET、HEAD 方法也具有冪指相等特性。

    HTTP 這些標准方法在原則上保證你的分布式系統具有這些特性,以幫助構建更加健壯的分布式系統。

RESTful Web Services更容易實現緩存

眾所周知,對於基於網絡的分布式應用,網絡傳輸是一個影響應用性能的重要因素。如何使用緩存來節省網絡傳輸帶來的開銷,這是每一個構建分布式網絡應用的開發人員必須考慮的問題。

HTTP 協議帶條件的 HTTP GET 請求 (Conditional GET) 被設計用來節省客戶端與服務器之間網絡傳輸帶來的開銷,這也給客戶端實現 Cache 機制 ( 包括在客戶端與服務器之間的任何代理 ) 提供了可能。HTTP 協議通過 HTTP HEADER 域:If-Modified-Since/Last- Modified,If-None-Match/ETag 實現帶條件的 GET 請求。

REST 的應用可以充分地挖掘 HTTP 協議對緩存支持的能力。當客戶端第一次發送 HTTP GET 請求給服務器獲得內容后,該內容可能被緩存服務器 (Cache Server) 緩存。當下一次客戶端請求同樣的資源時,緩存可以直接給出響應,而不需要請求遠程的服務器獲得。而這一切對客戶端來說都是透明的。

三、 總結

在日常應用中,我們有大量的場合可以使用到RESTful Web Services,包括Web系統間的交互,移動客戶端與Web服務器端的通信等。只有在日常工作中更多的實踐RESTful,才能更好的理解RESTful Web Services。

本文僅僅是對RESTful Web Services的一個粗略介紹,希望能幫助讀者初步的了解這一領域,如果需要更深入的了解,還需要讀者從其他方面閱讀更多的信息並在實踐中大量應用。

轉自:http://express.ruanko.com/ruanko-express_37/technologyexchange6.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM