RESTful Web Services初探

RESTful Web Services初探

做者:杜剛

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

1、 RESTful Web Services是什麼

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

資源由URI來指定安全

在Web應用中,全部的事物都應該擁有惟一的ID,表明ID的統一律念是:URI。URI構成了一個全局命名空間,使用URI標識你的關鍵資源意味着它們得到了一個惟1、全局的ID。服務器

顯式的使用HTTP方法網絡

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

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

資源多重表述分佈式

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

無狀態性能

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

2、 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 方法實現的 RRESTful 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) 緩存。當下一次客戶端請求一樣的資源時,緩存能夠直接給出響應,而不須要請求遠程的服務器得到。而這一切對客戶端來講都是透明的。

3、 總結

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

本文僅僅是對RESTful Web Services的一個粗略介紹,但願能幫助讀者初步的瞭解這一領域,若是須要更深刻的瞭解,還須要讀者從其餘方面閱讀更多的信息並在實踐中大量應用。

相關文章
相關標籤/搜索