一文弄懂RESTful

一、概述

REST全稱是Representational State Transfer,中文意思是表述(編者注:通常譯爲表徵)性狀態轉移。

自從Roy Fielding博士在2000年他的博士論文中提出REST(Representational State Transfer)風格的軟件架構模式後,REST就基本上迅速取代了複雜而笨重的SOAP,成爲Web API的標準了。

說白了,我們開發程序時,都有接口對吧,用於前端(包括手機端,網頁等)調用後臺來獲取數據,這個接口規範(怎麼訪問,接口怎麼寫,數據怎麼返回等一系列規範)就是RESTful。

這裏面有一套架構叫做REST,符合這套架構規則的程序就叫做RESTful

二、Rest架構的主要原則

  • 網絡上的所有事物都被抽象爲資源
  • 每個資源都有一個唯一的資源標識符,即URI
  • 同一個資源具有多種表現形式(xml,json等)
  • 對資源的各種操作不會改變資源標識符
  • 所有的操作都是無狀態的
  • 符合REST原則的架構方式即可稱爲RESTful

下面對上面的原則做一些解釋:

資源:比如我們調用接口查詢某種商品的信息,請求返回的商品信息就是資源

資源標識符:
要讓一個資源可以被識別,需要有個唯一標識,在Web中這個唯一標識就是URI(Uniform Resource Identifier)。

URI既可以看成是資源的地址,也可以看成是資源的名稱。如果某些信息沒有使用URI來表示,那它就不能算是一個資源, 只能算是資源的一些信息而已。URI的設計應該遵循可尋址性原則,具有自描述性,需要在形式上給人以直覺上的關聯。

REST主要對以下兩方面進行了規範

  1. 定位資源的URL風格,例如
    http://bhusk.com/admin/1234
    http://bhusk.com/admin/1234/10/11

下面讓我們來看看URI設計上的一些技巧:

  • 使用_或-來讓URI可讀性更好:
    曾經Web上的URI都是冰冷的數字或者無意義的字符串,但現在越來越多的網站使用_或-來分隔一些單詞,讓URI看上去更爲人性化。 例如國內比較出名的開源中國社區,它上面的新聞地址就採用這種風格, 如http://www.oschina.net/news/38119/oschina-translate-reward-plan。
  • 使用/來表示資源的層級關係:
    例如上述/git/git/commit/e3af72cdafab5993d18fae056f87e1d675913d08就表示了一個多級的資源, 指的是git用戶的git項目的某次提交記錄,又例如/orders/2012/10可以用來表示2012年10月的訂單記錄。
  • 使用?用來過濾資源
    很多人只是把?簡單的當做是參數的傳遞,很容易造成URI過於複雜、難以理解。可以把?用於對資源的過濾, 例如/git/git/pulls用來表示git項目的所有推入請求,而/pulls?state=closed用來表示git項目中已經關閉的推入請求, 這種URL通常對應的是一些特定條件的查詢結果或算法運算結果。
  • ,或;可以用來表示同級資源的關係
    有時候我們需要表示同級資源的關係時,可以使用,或;來進行分割。例如哪天github可以比較某個文件在隨意兩次提交記錄之間的差異,或許可以使用/git/git /block-sha1/sha1.h/compare/e3af72cdafab5993d18fae056f87e1d675913d08;bd63e61bdf38e872d5215c07b264dcc16e4febca作爲URI。 不過,現在github是使用…來做這個事情的,例如/git/git/compare/master…next。
  1. 如何對資源操作
    採用HTTP協議規定的GET、POST、PUT、DELETE動作處理資源的增刪該查操作

在這裏插入圖片描述

三、什麼是RESTful

對應的中文是rest式的;Restful web service是一種常見的rest的應用,是遵守了rest風格的web服務;rest式的web服務是一種ROA(The Resource-Oriented Architecture)(面向資源的架構).

符合REST約束風格和原則的應用程序或設計就是RESTful.

/emp/1  HTTP GET      查詢id=1的emp

/emp/1  HTTP DELETE    刪除id=1的emp,實驗中直接刪除會報405錯誤,但是採用$.ajax異步刪除就沒問題

/emp/1  HTTP PUT    更新emp

/emp/add  HTTP POST     新增emp

四、Spring對RESTful的支持

Spring MVC 對 RESTful應用提供了以下支持:

  • 利用@RequestMapping 指定要處理請求的URI模板和HTTP請求的動作類型

  • 利用@PathVariable講URI請求模板中的變量映射到處理方法參數上

  • 利用Ajax,在客戶端發出PUT、DELETE動作的請求


 @RequestMapping(value = "/{id}", method = RequestMethod.GET)
 public String toUpdate(@PathVariable("id") Integer id, Model model) {}

RequestMapping的一般應用格式。

@RequestMapping(value = "/{id}", method = RequestMethod.GET)

@RequestMapping(value = "/{id}", method = RequestMethod.POST)

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)   // 因爲這個需要Ajax請求,所有返回的是個json

@ResponseBody
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)

客戶端發送PUT,DELETE請求

可以採用Ajax方式發送PUT和DELETE請求

   $.ajax( {  
           type : "DELETE",  
           url : "/spring_crud_restful/emp/deleteEmp/" + id,  
           dataType : "json",  
           success : function(data) {  
               alert(data);  
               location.href = "/spring_crud_restful/emp/listEmp/1";  
           }  
      });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章