導讀 理解什麼是REST之前,先去腦補以下什麼是HTTP,參考【Http協議】 什麼是REST? REST(英文:Representational State Transfer,簡稱REST,意思:表述性狀態轉換,描述了一個架構樣式的網路系統,比如web應用)。 它是一種軟體架構風格、設計風格,而不 ...
導讀
理解什麼是REST之前,先去腦補以下什麼是HTTP,參考【Http協議】
什麼是REST?
REST(英文:Representational State Transfer,簡稱REST,意思:表述性狀態轉換,描述了一個架構樣式的網路系統,比如web應用)。
它是一種軟體架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件,它主要用於客戶端和服務端交互類的軟體。基於這個風格設計的軟體可以更簡介,更有層次,更易於實現緩存等機制。
它本身並沒有什麼使用性,其核心價值在於如何設計出符合REST風格的網路介面。
什麼是RESTful?
REST:指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程式或設計就是RESTful。
RESTful的特性
資源(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用來刪除資源。
如何設計RESTful應用程式的API?
路徑設計:資料庫設計完畢之後,基本上就可以確定有哪些資源要進行操作,相對應的路徑也可以設計出來。
動詞設計:也就是針對資源的具體操作類型,有HTTP動詞表示,常用的HTTP動詞如下:POST、DELETE、PUT、GET
RESTful示例
- /account/1 HTTP GET:得到id=1的account
- /account/1 HTTP DELETE:刪除id=1的account
- /account/1 HTTP PUT:更新id=1的account
SpringMvc對RESTful的支持
RESTful的URL路徑變數
URL-PATTERN:設置為/,方便攔截RESTful請求。
@PathVariable:可以解析出來URL中的模板變數({id}/{name})
URL:http://localhost:8080/ssm/cyb/item/1/chenyanbin
Controller層:
@RequestMapping("{id}/{name}")
@ResponseBody
public Item queryItemById(@PathVariable Integer id,@PathVariable String name){
.............
}
如圖
RESTful的CRUD
@RequestMapping:通過設置method屬性的CRUD,可以將同一個URL映射到不同的HandlerMethod方法上。
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping註解同@RequestMapping註解的method屬性設置。
RESTful的資源表述
RESTful服務中一個重要的特性就是一種資源可以有多種表現形式,在SpringMvc中可以使用ContentNegotiatingManager這個內容協商管理器來實現這種方式。
內容協商的方式有三種
- 擴展名,比如.json表示我要JSON格式數據、.xml表示我要xml格式數據
- 請求參數:預設是“format”
- 請求頭設置Accept參數,比如設置Accept為application/json表示要JSON格式數據
現在一般RESTful風格響應的數據一般都是JSON格式,所以一般也不使用內容協商管理器,直接使用@ResponseBody註解將數據按照JSON格式返回
靜態資源訪問<mvc:resources>
在Springmvc.xml文件中,使用mvc:resources標簽,具體如下:
<!-- 當DispatcherServlet配置為/來攔截請求的時候,需要配置靜態資源的訪問映射 --> <mvc:resources location="/js/" mapping="/js/**"/> <mvc:resources location="/css/" mapping="/css/**"/> .... .... .... ....
如圖
SpringMvc會把mapping映射到ResourceHttpRequestHandler,這樣靜態資源在經過DispatcherServlet轉發時就可以找到對應的Handler了。