輕量級的Web服務——RESTful Web Services

    提起Web Service,自然會想到基於SOAP的Web Service,令人生畏的是其服務提供者、服務消費者開發起來都不容易。那麼有沒有更簡單的提供Web服務的方法呢?基於REST的Web服務就是一種輕量級的Web服務,開發方法和Web應用程序開發沒有太大差別,通過JavaScript就可以訪問這種Web服務。
    REST(Representational State Transfer),中文有很多翻譯方法,例如狀態表述轉移、代表性狀態傳輸、表述性狀態轉移等等,看了這些中文翻譯更是讓人一頭霧水,那就忘掉中文翻譯名稱吧,我們能夠知道是個什麼東東就可以了。
    基於REST的Web服務是什麼呢?說的簡單一點,就是基於HTTP協議的Web服務,就像通過一個URI獲取html一樣,Web服務也是通過一個URI來標識和定位的,使用這個Web服務時,使用HTTP協議訪問這個URI就可以得到服務提供的結果。
    如果說的更加專業一點,就是“REST定義了一組體系架構原則,您可以根據這些原則設計以系統資源爲中心的Web服務,包括使用不同語言編寫的客戶端如何通過HTTP處理和傳輸資源狀態。”。下面解釋一下REST的幾個原則,並與一般的Web應用系統作一個對比。
    1、顯式地使用HTTP方法。對資源的操作主要包括創建、讀取、更新和刪除(create, read, update, and delete,CRUD),對於不同的操作要使用相應的HTTP方法:
  • 創建使用POST方法
  • 讀取使用GET方法
  • 更新使用PUT方法
  • 刪除使用DELETE方法
    這與一般的Web應用系統沒有太大差別。
    2、無狀態。HTTP協議本身就是無狀態的,一般的Web應用系統也是無狀態的,在一些特殊的情況下(如用戶認證)會擴展一下實現類似有狀態的環境,基於REST的Web服務也不例外,總不能每次調用服務都要登陸一次吧。
    3、標識資源的URI。在一般的Web應用系統,獲取特定資源的時候一般會在URI後面附加?artical_id=10這樣的參數,如http://192.168.0.20:8080/getArtical.jsp??artical_id=10。REST要求URI是靜態的,需要形如http://192.168.0.20:8080/articals/10這樣的URI。一些制訂REST的URI的指導原則如下:
  • 隱藏服務器端腳本技術文件擴展名(.jsp、.php、.asp)——如果有的話,以便您能夠移植到其他腳本技術而不用更改URI。
  • 將所有內容保持小寫。
  • 將空格替換爲連字符或下劃線(其中一種或另一種)。
  • 儘可能多地避免查詢字符串。
  • 如果請求URI用於部分路徑,與使用 404 Not Found 代碼不同,應該始終提供缺省頁面或資源作爲響應。
  • URI還應該是靜態的,以便在資源發生更改或服務的實現發生更改時,鏈接保持不變。
    從這裏可以看到,REST盡力避免Web服務與使用的平臺、開發技術相關聯,增強服務的可移植性。
    4、Web服務返回的資源表示形式。一般Web應用系統返回的是html格式的文本,由瀏覽器負責解析。而基於REST的Web服務就不一樣了,服務器返回的文本就給程序看的,由程序獲取後作出處理,程序易於識別格式化的數據,考慮到客戶端的多種多樣,REST服務返回的格式一般是XML、JSON等格式,以提高資源的通用性。當然,服務器也可以提供多種格式以供選擇,由客戶端決定需要什麼格式的資源。
    由此可以看到,基於REST的Web服務並沒有太多新技術,使用開發Web應用系統的方法就可以開發出基於REST的Web服務。而且,使用這樣的Web服務也很簡單,通過AJAX就可以訪問。正是因爲這種簡單性,受到開發人員的青睞,已獲得廣泛使用,如很多網站的Open API就是應用的這種技術。


發佈了35 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章