標籤:http io os 使用 on 問題 log html ad
近幾年,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等。即伺服器端需要向外部提供多種格式的資源表述,供不同的用戶端使用。比如行動裝置 App可以使用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 可以在任何的伺服器上執行,這樣的應用很容易在伺服器端支援Server Load Balancer (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
【轉】RESTful Web Services初探