RESTful Web Services 筆記

000 什麼是Web Service

    Web Service是一種基於HTTP協議的服務,用戶通過發送HTTP請求服務器上的資源,服務器也會把資源信息放在HTTP響應中返回  
    給請求者。它實際上是一種調用關係,只是被調用主體從本地函數變成了遠端某個服務器上的服務。 

什麼是HTTP

001 RPC和RESTful的區別

       當我們發起一個請求向服務器請求一個資源,那麼有兩個東西需要明確,一是方法信息,它用來說明要對數據採用什麼樣的操作,  
   比如是創建還是刪除,是更新還是獲取。二是作用域信息,它用來說明要對什麼數據採取操作,比如是股票數據還是天氣數據,是今天  
   的股票數據還是這一整個月的股票數據。

       當明確了這兩個部分之後,對於一個Web Service請求就可以確定對什麼數據採取什麼操作,也就完整說明了這次請求的主體和  
   主體上的動作。

       一個RPC式的Web Service的方法信息和作用域信息通常都放在HTTP報文體內,即只是把HTTP作爲一個傳輸協議,對於所有請求  
   HTTP本身無差別的對待。下是一個假想的SOAP服務的例子,可以看到在Content-type中指明瞭內容是soap+xml,方法信息是get,  
   作用域信息是people。
POST / HTTP/1.1
Host: www.somewebsite.com
Content-Type: applicatin/soap+xml
...

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:body>
     <get>
      <q>people</p>
    </get>
  </soap:body>
</soap:Envelope>
      而一個RESTful的Web Service最大化的利用了HTTP協議本身,使用HTTP本身的動詞GET,PUT,POST,DELETE等表示方法  
  信息,同時將作用域信息放在URL裏。下面是一個RESTful的例子,使用HTTP本身的GET來描述方法信息,將作用域信息放在URL裏,  
  相較於上面的SOAP的方式,整個請求信息簡單,規整了許多,這也是RESTful的一個優點。
GET people/ HTTP/1.1
HOST: www.somewebsite.com
...
其中報文體爲空

002 面向資源的架構

     實際上REST本身不是一個架構,確切的來講它是一組設計原則。而REST的服務本身就是面向資源,所以這裏講面向資源的架構。在  
面向資源的架構裏面有幾個重要的概念:
     首先,什麼是**資源**?實際上RESTful的Web Service提供的一切服務都是資源,比如一個文檔,一份地圖,一個數據,總之就   
是任何具有被引用必要的事物都可以看作資源。而資源通過URI的方式暴露出來,供客戶端訪問,每個資源與一個URI唯一對應。
     然後就是如何對資源進行**表示**?即請求返回什麼樣的數據。資源的表示只是關於資源當前狀態的一些數據,例如對於同一份文  
檔,可能會有word版,pdf版,html版可以訪問,但是實際上的數資源都是一樣的只是表示的不同。
     除此之外,面向資源的構架還有以下四個重要的特性

1.可尋址性

      可尋址性實際上是Web應用的最大優點,它令客戶端可以靈活自由地使用網站。如果一個Web Service是不可尋址的,那麼用戶就  
 無法用標準的規則對它進行訪問。

2.無狀態性

      無狀態性是HTTP協議本身的特性,它意味着每個HTTP請求都是完全孤立的。當客戶端發出一個HTTP請求時,請求裏包含服務器實  
  現該請求所需要的全部信息,服務器不依賴任何請求提供的信息。假設本次請求需要之前某個請求提供的信息,那麼客戶端應當把那個  
  信息也包括在本次請求裏。
      也就是說對於同一個URI,以相同的訪問條件,不管訪問多少次,返回的結果都應該是相同的(不考慮服務器數據自身變動的情況  
  下),每一個URI就對應了服務的一個狀態,請求結束後服務器都會回到初始狀態。

3.連通性

      我們平常使用的互聯網的各個網站之間使用鏈接的方式連接起來的,一個網頁中會有指向其他頁面的超鏈接,通過點擊這些超鏈接  
  就可以繼續訪問接下來的頁面。
      對於Web Service來說也是這樣,返回的不止有數據,還有指向其他數據的鏈接,這種“具有鏈接”的特性叫做聯通性。資源間的聯  
  通性越好,資源間的關係就越清晰就越易於使用。     

4.統一接口

      統一接口實際上是爲了對RESTful Web Service進行規範化,如果不進行這個統一,雖然大家都是用HTTP本身的動詞作爲操作方  
  法,但是可能你用GET獲取數據,我用HEAD獲取數據,對客戶端來說無法用一致的方式對數據進行獲取。
      HTTP提供了四種基本方法,用於四種最常見的操作。
      - 獲取資源的表示:HTTP GET
      - 創建一個新資源:向一個新的URI發送HTTP PUT,或者像一個已有的URI發送POST
      - 修改一個資源:向已有的URI發送HTTP PUT
      - 刪除已有資源:HTTP DELETE

003 設計RESTful Service的一般步驟

    1. 規劃數據集
    2. 把數據集劃分爲資源
    3. 用URI爲該資源命名
    4. 暴露一個統一接口的子集
    5. 設計來自客戶端的表示
    6. 設計發送給客戶端的表示
    7. 用超鏈接和表單把該資源和已有資源聯繫起來
    8. 考慮可能出現的錯誤情況
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章