文章目录
1. REST简介
REST(Representational State Transfer)表象化状态转变(表述性状态转变),是Roy Fielding博士在2000年他的博士论文中提出来的,基于HTTP、URI、XML、JSON等标准和协议,支持轻量级、跨平台、跨语言的架构设计。是Web服务的一种新的架构风格(一种思想)。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
表述性状态转移是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。
REST是设计风格而不是标准,REST通常基于使用HTTP、URI和XML(标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)这些现有的广泛流行的协议和标准。REST通常使用JSON数据格式。
REST基本架构的四个方法:
- GET-用于获取数据
- PUT-用于添加数据
- DELETE-用于删除数据
- POST-用于更新或添加数据
1.1 什么是轻量级
代码不被侵入(正例:SpringMVC中不用接口和继承,仅用注解完成。反例:Struts中每一个Action都要继承核心控制器),轻量级跟包大小无关。耦合性越低,越轻量。
1.2 REST架构的主要原则
- 对网络上所有的资源都有一个资源标志符。
- 对资源的操作不会改变标识符。
- 同一资源有多种表现形式(xml、json)
- 所有操作都是无状态的(Stateless)
1.3 URI和URL区别:
URI:http://example.com/users/
URL:http://example.com/users/{user} (one for each user)
1.4 什么是无状态性:
使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当前的请求,不需了解请求的历史。可以更容易的释放资源,让服务器利用Pool(连接池)技术来提高稳定性和性能。
2. RESTful介绍
RESTful是一种常见的REST应用,是遵循REST风格的web服务,REST式的web服务是一种ROA(面向资源的架构)。
2.1 RESTful资源操作
http方法 | 资源操作 | 幂等 | 安全 |
---|---|---|---|
GET | SELECT | 是 | 是 |
POST | INSERT | 否 | 否 |
PUT | UPDATE | 是 | 否 |
DELETE | DELETE | 是 | 否 |
幂等性:对同一REST接口的多次访问,得到的资源状态是相同的。
安全性:对该REST接口访问,不会使服务器端资源的状态发生改变。
2.2 RESTful的实现
RESTful 风格提倡URL地址使用统一的风格设计,各单词之间用斜杠分开。
2.3 响应设计
原则:数据接收到即可使用,无需拆箱。
在一次请求中,content body仅仅用于传输数据。Header中存放描述请求或请求的元数据,例如 X-Result-Fields。
2.4 http响应状态码
根据http响应码,判断请求状态,进而做出提醒。
3. 传统风格与RESTful风格对比
3.1 传统风格
如果是原来的架构风格,需要发送四个请求,分别是?
查询用户:http://localhost:8080/springmvc/selectuser?id=1GET
增加用户: http://localhost:8080/springmvc/insertuserPOST
修改用户: http://localhost:8080/springmvc/updateuserPUT
删除用户: http://localhost:8080/springmvc/deleteuser?id=1 DELETE
3.2 RESTful风格
按照传统方式发送请求的时候比较麻烦,需要定义多种请求,而RESTful在HTTP协议中,有不同的发送请求的方式,分别是GET、POST、PUT和DELETE方式,分别对应查询、修改、添加和删除操作。我们如果能让不同的请求方式表示不同的请求类型就可以简化我们的查询。
查询用户: http://localhost:8080/springmvc/user/1 GET 查询
查询多个用户: http://localhost:8080/springmvc/user GET
添加用户: http://localhost:8080/springmvc/user POST 添加
修改用户: http://localhost:8080/springmvc/user PUT 修改
删除用户:http://localhost:8080/springmvc/user DELETE 删除
注意:RESTful风格中的URL不存在动词形式的路径,如selectuser表示查询用户,是一个动词,要改为名词user。
4. RESTful的使用
4.1 查询get:
查询测试:
4.2 新增post:
新增测试:
AJAX调用:
4.3 更新put:
Service写法:
更新测试:
默认情况下,PUT请求是无法提交表单数据的,在Spring MVC项目中需要在web.xml中添加过滤器解决:
<!-- 解决PUT请求无法提交表单数据的问题 -->
<filter>
<filter-name>HttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4.4 删除delete:
删除测试: