天天看點

Springmvc的REST風格

Springmvc的REST風格

REST概念

REST即表述性狀态傳遞(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟體架構風格。

它是一種針對網絡應用的設計和開發方式,可以降低開發的複雜性,提高系統的可伸縮性。

目前在三種主流的Web服務實作方案中,因為REST模式的Web服務與複雜的SOAP和XML-RPC對比來講明顯的更加簡潔,越來越多的web服務開始采用REST風格設計和實作。

例如,Amazon.com提供接近REST風格的Web服務進行圖書查找;雅虎提供的Web服務也是REST風格的。

參考連結:

  • ① 了解本真的REST架構風格: ​​javascript:void(0)​​
  • ① 深入淺出REST: ​​javascript:void(0)​​

① REST:即 Representational State Transfer。(資源)表現層狀态轉化。是目前最流行的一種網際網路軟體架構。它結構清晰、符合标準、易于了解、擴充友善,是以正得到越來越多網站的采用

  • 資源(Resources):網絡上的一個實體,或者說是網絡上的一個具體資訊。

它可以是一段文本、一張圖檔、一首歌曲、一種服務,總之就是一個具體的存在。

可以用一個URI(統一資源定位符)指向它,每種資源對應一個特定的 URI 。

擷取這個資源,通路它的URI就可以,是以 URI 即為每一個資源的獨一無二的識别符。

  • 表現層(Representation):把資源具體呈現出來的形式,叫做它的表現層(Representation)。比如,文本可以用 txt 格式表現,也可以用 HTML 格式、XML 格式、JSON 格式表現,甚至可以采用二進制格式。
  • 狀态轉化(State Transfer):每發出一個請求,就代表了用戶端和伺服器的一次互動過程。HTTP協定,是一個無狀态協定,即所有的狀态都儲存在伺服器端。是以,如果用戶端想要操作伺服器,必須通過某種手段,讓伺服器端發生“狀态轉化”(State Transfer)。

而這種轉化是建立在表現層之上的,是以就是 “表現層狀态轉化”。

  • 具體說,就是 HTTP協定裡面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。

它們分别對應四種基本操作:GET 用來擷取資源,POST 用來建立資源,PUT 用來更新資源,DELETE 用來删除資源

測試代碼

<!-- 支援REST風格的過濾器:可以将POST請求轉換為PUT或DELETE請求 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
      

HiddenHttpMethodFilter

浏覽器 form 表單隻支援 GET 與 POST 請求,而DELETE、PUT 等 method 并不支援,Spring3.0 添加了一個過濾器,可以将這些請求轉換為标準的 http 方法,使得支援 GET、POST、PUT 與 DELETE 請求。

代碼

**
* 1.測試REST風格的  GET,POST,PUT,DELETE 操作
* 以CRUD為例:
* 新增: /order POST
* 修改: /order/1 PUT        update?id=1
* 擷取: /order/1 GET                get?id=1
* 删除: /order/1 DELETE        delete?id=1

* 2.如何發送PUT請求或DELETE請求?
* ①.配置HiddenHttpMethodFilter
* ②.需要發送POST請求
* ③.需要在發送POST請求時攜帶一個 name="_method"的隐含域,值為PUT或DELETE

* 3.在SpringMVC的目标方法中如何得到id值呢?
*   使用@PathVariable注解
*/
@RequestMapping(value="/testRESTGet/{id}",method=RequestMethod.GET)
public String testRESTGet(@PathVariable(value="id") Integer id){
System.out.println("testRESTGet id="+id);
return "success";
}

@RequestMapping(value="/testRESTPost",method=RequestMethod.POST)
public String testRESTPost(){
System.out.println("testRESTPost");
return "success";
}

@RequestMapping(value="/testRESTPut/{id}",method=RequestMethod.PUT)
public String testRESTPut(@PathVariable("id") Integer id){
System.out.println("testRESTPut id="+id);
return "success";
}

@RequestMapping(value="/testRESTDelete/{id}",method=RequestMethod.DELETE)
public String testRESTDelete(@PathVariable("id") Integer id){
System.out.println("testRESTDelete id="+id);
return "success";
}
      

請求連結

<!-- 實驗1 測試 REST風格 GET 請求 -->
<a href="springmvc/testRESTGet/1">testREST GET</a><br/><br/>

<!-- 實驗2 測試 REST風格 POST 請求 -->
<form action="springmvc/testRESTPost" method="POST">
<input type="submit" value="testRESTPost">
</form>
<!-- 實驗3 測試 REST風格 PUT 請求 -->
<form action="springmvc/testRESTPut/1" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="testRESTPut">
</form>

<!-- 實驗4 測試 REST風格 DELETE 請求 -->
<form action="springmvc/testRESTDelete/1" method="POST">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="testRESTDelete">
</form>

      

繼續閱讀