spring中REST和RESTful的區(qū)別以及基本實現(xiàn)
簡介
REST概念:
REST :全稱:Representational State Transfer,意思:表現(xiàn)層資源狀態(tài)轉移
詳細解釋可分為三部分:
資源
資源是一種看待服務器的方式,即,將服務器看作是由很多離散的資源組成。每個資源是服務器上一個可命名的抽象概念。因為資源是一個抽象的概念,所以它不僅僅能代表服務器文件系統(tǒng)中的一個文件、數(shù)據(jù)庫中的一張表等等具體的東西,可以將資源設計的要多抽象有多抽象,只要想象力允許而且客戶端應用開發(fā)者能夠理解。與面向對象設計類似,資源是以名詞為核心來組織的,首先關注的是名詞。一個資源可以由一個或多個URI來標識。URI既是資源的名稱,也是資源在Web上的地址。對某個資源感興趣的客戶端應用,可以通過資源的URI與其進行交互。
資源的表述
資源的表述是一段對于資源在某個特定時刻的狀態(tài)的描述??梢栽诳蛻舳?服務器端之間轉移(交換)。資源的表述可以有多種格式,例如HTML/XML/JSON/純文本/圖片/視頻/音頻等等。資源的表述格式可以通過協(xié)商機制來確定。請求-響應方向的表述通常使用不同的格式。
狀態(tài)轉移
狀態(tài)轉移說的是:在客戶端和服務器端之間轉移(transfer)代表資源狀態(tài)的表述。通過轉移和操作資源的表述,來間接實現(xiàn)操作資源的目的。
REST很好地利用了HTTP本身就有的一些特征,如HTTP動詞、HTTP狀態(tài)碼、HTTP報頭等等
REST架構的主要原則:
- 對網(wǎng)絡上所有的資源都有一個資源標志符;
- 對資源的操作不會改變標識符;
- 同一資源有多種表現(xiàn)形式(xml、json);
- 所有操作都是無狀態(tài)的(Stateless);
- 符合上述REST原則的架構方式稱為RESTful;
RESTful概念:
RESTful是一種常見的REST應用,是遵循REST風格的web服務,REST式的(rest與restful相比,多了一個ful,就英語層面來說是一個形容詞,restful翻譯為中文為: “rest式的”)web服務是一種ROA(面向資源的架構)
REST和RESTful的聯(lián)系與區(qū)別:restful是由rest派生出來的。
RESTful實現(xiàn)
具體說,就是http協(xié)議里面,四個表示操作方式的動詞:get,post,put,delete,它們分別對應四種基本操作:get用來獲取資源,post用來新建資源,put用來更新資源,delete用來刪除資源
REST 風格提倡URL地址使用統(tǒng)一的風格設計,從前到后各個單詞使用斜杠分開,不適用問號鍵值對方式攜帶請求參數(shù),而是將要發(fā)送給服務器的數(shù)據(jù)作為URL地址的一部分,以保證整體風格的一致性。
GET, 查詢所有用戶信息
/**
* 使用RESTFul模擬用戶資源的增刪改查
* /user GET 查詢所有用戶信息
*/
@RequestMapping(value = "/user", method = RequestMethod.GET)
public String getAllUser(){
System.out.println("查詢所有用戶信息");
return "success";
}
<a th:href="@{/user}" rel="external nofollow" >查詢所有用戶信息</a><br>
GET, 根據(jù)用戶ID查詢用戶信息
/**
* 使用RESTFul模擬用戶資源的增刪改查
* /user GET 根據(jù)用戶id查詢用戶信息
*/
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public String getUserById(){
System.out.println("根據(jù)id查詢用戶信息");
return "success";
}
<a th:href="@{/user/1}" rel="external nofollow" >根據(jù)id查詢用戶信息</a><br>
POST, 添加用戶信息
/**
* 使用RESTFul模擬用戶資源的增刪改查
* /user POST 添加用戶信息
*/
@RequestMapping(value = "/user", method = RequestMethod.POST)
public String insertUser(String username, String password){
System.out.println("添加用戶信息:"+username+","+password);
return "success";
}
<form th:action="@{/user}" method="post">
用戶名:<input type="text" name="username"><br>
密碼:<input type="password" name="password"><br>
<input type="submit" value="添加"><br>
</form>
PUT, 修改用戶信息
/**
* 使用RESTFul模擬用戶資源的增刪改查
* /user PUT 修改用戶信息
*/
@RequestMapping(value = "/user", method = RequestMethod.PUT)
public String updateUser(String username, String password){
System.out.println("修改用戶信息:"+username+","+password);
return "success";
}
<form th:action="@{/user}" method="post">
<input type="hidden" name="_method" value="PUT">
用戶名:<input type="text" name="username"><br>
密碼:<input type="password" name="password"><br>
<input type="submit" value="修改"><br>
</form>
注意:
由于瀏覽器只支持發(fā)送get和post方式的請求,那么該如何發(fā)送put和delete請求呢?
SpringMVC 提供了 HiddenHttpMethodFilter 幫助我們將 POST 請求轉換為 DELETE 或 PUT 請求
HiddenHttpMethodFilter 處理put和delete請求的條件: a>當前請求的請求方式必須為post , b>當前請求必須傳輸請求參數(shù)_method 滿足以上條件,HiddenHttpMethodFilter 過濾器就會將當前請求的請求方式轉換為請求參數(shù)_method的值,因此請求參數(shù)_method的值才是最終的請求方式
配置HiddenHttpMethodFilter,在web.xml中
<!--配置HiddenHttpMethodFilter-->
<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>
注:
目前為止,SpringMVC中提供了兩個過濾器:CharacterEncodingFilter(編碼過濾器)和HiddenHttpMethodFilter(請求方式過濾器),在web.xml中注冊時,必須先注冊CharacterEncodingFilter,再注冊HiddenHttpMethodFilter。原因:
在 CharacterEncodingFilter 中通過 request.setCharacterEncoding(encoding) 方法設置字符集的request.setCharacterEncoding(encoding) 方法要求前面不能有任何獲取請求參數(shù)的操作,而 HiddenHttpMethodFilter 恰恰有一個獲取請求方式的操作:
String paramValue = request.getParameter(this.methodParam);
到此這篇關于spring中REST和RESTful的區(qū)別以及基本實現(xiàn)的文章就介紹到這了,更多相關spring REST和RESTful內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- SpringBoot構建Restful service完成Get和Post請求
- SpringBoot+Spring Security+JWT實現(xiàn)RESTful Api權限控制的方法
- SpringMVC restful 注解之@RequestBody進行json與object轉換
- SpringMVC Restful api接口實現(xiàn)的代碼
- 使用SpringBoot開發(fā)Restful服務實現(xiàn)增刪改查功能
- Spring Boot 實現(xiàn)Restful webservice服務端示例代碼
- Spring整合CXF webservice restful實例詳解
- SpringMVC開發(fā)restful API之用戶查詢代碼詳解
- Spring mvc實現(xiàn)Restful返回xml格式數(shù)據(jù)實例詳解
相關文章
如何解決IDEA使用Tomcat控制臺中文出現(xiàn)亂碼問題
這篇文章主要介紹了如何解決IDEA使用Tomcat控制臺中文出現(xiàn)亂碼問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09
Java中出現(xiàn)java.lang.IllegalStateException異常錯誤的解決
這篇文章主要介紹了Java中出現(xiàn)java.lang.IllegalStateException異常錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01
Java并發(fā)編程ThreadLocalRandom類詳解
這篇文章主要介紹了Java并發(fā)編程ThreadLocalRandom類詳解,通過提出問題為什么需要ThreadLocalRandom展開詳情,感興趣的朋友可以參考一下2022-06-06

