Restful WebService簡單介紹

       RESTful Web Services已經漸漸開始流行, 主要是用於解決異構系統之間的通信問題。很多網站和應用提供的API,都是基於RESTful風格的Web Services,比較就有Google,現在就來簡單的介紹下它。


一、 RESTful Web Services是什麼?

        REST(Representation State Transfer)描述了一種設計Web應用的架構風格,它是一組架構約束條件和原則,滿足這些約束條件和原則的應用程序或設計就是 RESTful風格的。而符合RESTful風格的Web Services,就是RESTful Web Services。現在來簡單說下REST的原則。


REST原則如下

       第一:資源由URI來指定

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

       第二:使用HTTP方法

       REST 要求開發人員使用 HTTP 方法,並且使用方式與協議定義一致。 這個 REST 設計原則建立了創建、讀取、更新和刪除(CRUD)操作與 HTTP 方法之間的一對一映射。 其關係如下 :

       1)創建資源,應該使用 POST 方法。
       2)檢索某個資源,應該使用 GET 方法。
       3)更改資源狀態或對其進行更新,應該使用 PUT 方法。
       4)刪除某個資源,應該使用 DELETE 方法。

       第三: 資源多重表述

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

       第四:無狀態

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


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

      我們通常所說的Web Service都是基於SOAP的Web Service,它也是解決異構系統間通信問題的常用方案,那麼,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接口更簡單。這種標準化的 HTTP 操作方法,結合其他的標準化技術,如 URI,HTML,XML 等,將會極大提高系統與系統之間整合的互操作能力。尤其在 Web 應用領域,RESTful Web Services所表達的這種抽象能力更加貼近 Web 本身的工作方式,也更加自然。同時,使用標準 HTTP 方法實現的 RRESTful Web Services也帶來了 HTTP 方法本身的一些優勢:

        1)無狀態性

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

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

        HTTP 的 PUT、DELTE 調用,具有冪指相等特性 , 即:客戶端對某一 URI 做 n 次的 PUT、DELTE 調用,其效果與做一次的調用是一樣的。HTTP 的 GET、HEAD 方法也具有冪指相等特性。
HTTP 這些標準方法在原則上保證你的分佈式系統具有這些特性,以幫助構建更加健壯的分佈式系統。


       其次,RESTful Web Services更容易實現緩存

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

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


三、 總結

       其實,我們有很多場合可以使用到RESTful Web Services,Web系統間的交互,移動客戶端與Web服務器端的通信等。只有更多的實踐RESTful,才能更好的理解RESTful Web Services。我僅僅是對RESTful Web Services的一個簡單介紹,爲以後更深入的瞭解做好準備。        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章