spring中REST和RESTful的區(qū)別以及基本實(shí)現(xiàn)
簡(jiǎn)介
REST概念:
REST :全稱:Representational State Transfer,意思:表現(xiàn)層資源狀態(tài)轉(zhuǎn)移
詳細(xì)解釋可分為三部分:
資源
資源是一種看待服務(wù)器的方式,即,將服務(wù)器看作是由很多離散的資源組成。每個(gè)資源是服務(wù)器上一個(gè)可命名的抽象概念。因?yàn)橘Y源是一個(gè)抽象的概念,所以它不僅僅能代表服務(wù)器文件系統(tǒng)中的一個(gè)文件、數(shù)據(jù)庫(kù)中的一張表等等具體的東西,可以將資源設(shè)計(jì)的要多抽象有多抽象,只要想象力允許而且客戶端應(yīng)用開(kāi)發(fā)者能夠理解。與面向?qū)ο笤O(shè)計(jì)類似,資源是以名詞為核心來(lái)組織的,首先關(guān)注的是名詞。一個(gè)資源可以由一個(gè)或多個(gè)URI來(lái)標(biāo)識(shí)。URI既是資源的名稱,也是資源在Web上的地址。對(duì)某個(gè)資源感興趣的客戶端應(yīng)用,可以通過(guò)資源的URI與其進(jìn)行交互。
資源的表述
資源的表述是一段對(duì)于資源在某個(gè)特定時(shí)刻的狀態(tài)的描述??梢栽诳蛻舳?服務(wù)器端之間轉(zhuǎn)移(交換)。資源的表述可以有多種格式,例如HTML/XML/JSON/純文本/圖片/視頻/音頻等等。資源的表述格式可以通過(guò)協(xié)商機(jī)制來(lái)確定。請(qǐng)求-響應(yīng)方向的表述通常使用不同的格式。
狀態(tài)轉(zhuǎn)移
狀態(tài)轉(zhuǎn)移說(shuō)的是:在客戶端和服務(wù)器端之間轉(zhuǎn)移(transfer)代表資源狀態(tài)的表述。通過(guò)轉(zhuǎn)移和操作資源的表述,來(lái)間接實(shí)現(xiàn)操作資源的目的。
REST很好地利用了HTTP本身就有的一些特征,如HTTP動(dòng)詞、HTTP狀態(tài)碼、HTTP報(bào)頭等等
REST架構(gòu)的主要原則:
- 對(duì)網(wǎng)絡(luò)上所有的資源都有一個(gè)資源標(biāo)志符;
- 對(duì)資源的操作不會(huì)改變標(biāo)識(shí)符;
- 同一資源有多種表現(xiàn)形式(xml、json);
- 所有操作都是無(wú)狀態(tài)的(Stateless);
- 符合上述REST原則的架構(gòu)方式稱為RESTful;
RESTful概念:
RESTful是一種常見(jiàn)的REST應(yīng)用,是遵循REST風(fēng)格的web服務(wù),REST式的(rest與restful相比,多了一個(gè)ful,就英語(yǔ)層面來(lái)說(shuō)是一個(gè)形容詞,restful翻譯為中文為: “rest式的”)web服務(wù)是一種ROA(面向資源的架構(gòu))
REST和RESTful的聯(lián)系與區(qū)別:restful是由rest派生出來(lái)的。
RESTful實(shí)現(xiàn)
具體說(shuō),就是http協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞:get,post,put,delete,它們分別對(duì)應(yīng)四種基本操作:get用來(lái)獲取資源,post用來(lái)新建資源,put用來(lái)更新資源,delete用來(lái)刪除資源
REST 風(fēng)格提倡URL地址使用統(tǒng)一的風(fēng)格設(shè)計(jì),從前到后各個(gè)單詞使用斜杠分開(kāi),不適用問(wèn)號(hào)鍵值對(duì)方式攜帶請(qǐng)求參數(shù),而是將要發(fā)送給服務(wù)器的數(shù)據(jù)作為URL地址的一部分,以保證整體風(fēng)格的一致性。
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方式的請(qǐng)求,那么該如何發(fā)送put和delete請(qǐng)求呢?
SpringMVC 提供了 HiddenHttpMethodFilter 幫助我們將 POST 請(qǐng)求轉(zhuǎn)換為 DELETE 或 PUT 請(qǐng)求
HiddenHttpMethodFilter 處理put和delete請(qǐng)求的條件: a>當(dāng)前請(qǐng)求的請(qǐng)求方式必須為post , b>當(dāng)前請(qǐng)求必須傳輸請(qǐng)求參數(shù)_method 滿足以上條件,HiddenHttpMethodFilter 過(guò)濾器就會(huì)將當(dāng)前請(qǐng)求的請(qǐng)求方式轉(zhuǎn)換為請(qǐng)求參數(shù)_method的值,因此請(qǐng)求參數(shù)_method的值才是最終的請(qǐng)求方式
配置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中提供了兩個(gè)過(guò)濾器:CharacterEncodingFilter(編碼過(guò)濾器)和HiddenHttpMethodFilter(請(qǐng)求方式過(guò)濾器),在web.xml中注冊(cè)時(shí),必須先注冊(cè)CharacterEncodingFilter,再注冊(cè)HiddenHttpMethodFilter。原因:
在 CharacterEncodingFilter 中通過(guò) request.setCharacterEncoding(encoding) 方法設(shè)置字符集的request.setCharacterEncoding(encoding) 方法要求前面不能有任何獲取請(qǐng)求參數(shù)的操作,而 HiddenHttpMethodFilter 恰恰有一個(gè)獲取請(qǐng)求方式的操作:
String paramValue = request.getParameter(this.methodParam);
到此這篇關(guān)于spring中REST和RESTful的區(qū)別以及基本實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)spring REST和RESTful內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot構(gòu)建Restful service完成Get和Post請(qǐng)求
- SpringBoot+Spring Security+JWT實(shí)現(xiàn)RESTful Api權(quán)限控制的方法
- SpringMVC restful 注解之@RequestBody進(jìn)行json與object轉(zhuǎn)換
- SpringMVC Restful api接口實(shí)現(xiàn)的代碼
- 使用SpringBoot開(kāi)發(fā)Restful服務(wù)實(shí)現(xiàn)增刪改查功能
- Spring Boot 實(shí)現(xiàn)Restful webservice服務(wù)端示例代碼
- Spring整合CXF webservice restful實(shí)例詳解
- SpringMVC開(kāi)發(fā)restful API之用戶查詢代碼詳解
- Spring mvc實(shí)現(xiàn)Restful返回xml格式數(shù)據(jù)實(shí)例詳解
相關(guān)文章
Spring?Validation實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例
Spring?Validation其實(shí)就是對(duì)Hibernate?Validator進(jìn)一步的封裝,方便在Spring中使用,這篇文章主要介紹了Spring?Validation實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例,需要的朋友可以參考下2023-03-03SpringBoot之跨域過(guò)濾器配置允許跨域訪問(wèn)方式
這篇文章主要介紹了SpringBoot之跨域過(guò)濾器配置允許跨域訪問(wèn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Java中的傳值與傳引用實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了java中的傳值與傳引用實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Lombok同時(shí)使?@Data和@Builder踩坑總結(jié)
這篇文章主要介紹了Lombok同時(shí)使?@Data和@Builder踩坑總結(jié),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-05-05MyBatis-Plus實(shí)現(xiàn)字段自動(dòng)填充功能的示例
本文主要介紹了MyBatis-Plus實(shí)現(xiàn)字段自動(dòng)填充功能的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11JAVA中的deflate壓縮實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇JAVA中的deflate壓縮實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09