标签:存在 sel pre 获取 需要 status local var 枚举
RESTful风格阐述
REST服务是一种ROA(Resource-Oriented Architecture,面向资源的架构)应用。主要特点是方法信息存在于HTTP协议的方法中(GET,POST,PUT,DELETE),作用域存在于URL中。例如,在一个获取设备资源列表的GET请求中,方法信息是GET,作用域信息是URI种包含的对设备资源的过滤、分页和排序等条件良好的
REST API不需要任何文档
REST风格资源路径REST风格的资源路径设计是面向资源的,资源的名称应该是准确描述该资源的名词。
资源路径概览:
sheme://host:port/path?queryString例:http://localhost:8080/bywlstudio/users/user?username=xiuer
HTTP方法
GET用于读取、检索、查询、过滤资源
PSOT用于创建一个资源
PUT用于修改、更新资源、创建客户端维护主键信息的资源
DELETE用于删除资源
资源地址和HTTP方法结合在一起就可以实现对资源的完整定位
RESTful风格API设计上文讲述了通过HTTP方法和资源路径对服务器的一个资源进行定位的过程
接下来看一个REST风格API的设计
| 功能 | 描述 |
|---|---|
| 添加/创建 | POST/users PUT/users{id}创建客户端维护主键信息的资源 |
| 删除 | DELETE/users/{id} |
| 修改/更新 | PUT/users/{id} |
| 查询全部 | GET/users |
| 主键查询 | GET/users/{id} GET/users?id=26 |
| 分页作用域查询 | GET/users?start=0&size=10 GET/users?07,2019-07,2020 |
可以看到通过这个RESTAPI都是通过对同一个资源的操作,所不同的就是通过不同的HTTP方法来实现对资源不同的处理。
MVC对REST的支持@Controller声名一个处理请求的控制器
@RequestMapping请求映射地址,它存在几个子注解对于实现REST风格来说更加具有语义性
@GETMapping GET请求
@PUTMapping PUT请求
@POSTMapping POST请求
@DELETEMapping DELETE请求
@ResponseBody 将响应内容转换为JSON格式
@RequestBody 请求内容转换为JSON格式
@PathVariable("id")用于绑定一个参数
@RESTController 等同于@Controller+@ResponseBody在类上写了这个注解,标识这个类的所有方法只返回数据,而不进行视图跳转
HTTP状态码REST风格API一个最鲜明的特点通过返回对应的HTTPStatus来判断客户端的操作是否完成
下面是spring中关于Http状态码描述的枚举类,本文列举了常见的状态码(读者若对此感兴趣可以查看HttpStatus源码)
public enum HttpStatus{
OK(200, "OK"),//用于服务器有实体响应
CREATED(201, "Created"),//创建了新实体,响应该实体
NO_CONTENT(204, "No Content"),//服务器正常响应,但无实体响应
BAD_REQUEST(400, "Bad Request"),//客户端请求语法错误
NOT_FOUND(404, "Not Found"),//目标资源不存在
INTERNAL_SERVER_ERROR(500, "Internal Server Error"),//服务器内部错误
NOT_IMPLEMENTED(501, "Not Implemented"),//服务器不支持当前请求
}
Spring返回状态码是通过@ResponseStatus注解或者ResponseEntity<?>类实现的。
@ResponseStatus方式
ResponseEntity<?>方式
MVC默认不支持PUT和DELETE方法,所以需要手动开启在tomcat服务器的web.xml文件中开启一下配置
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>true</param-value><!--开启这个-->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
在项目的web.xml中配置
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
?
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>dispathcherServlet</servlet-name>
</filter-mapping>
MVC实现REST代码实现JDK1.8
maven3.60
tomcat9
API设计| URI | Description | Response | HTTPStatus |
|---|---|---|---|
| GET/users | 获取全部用户 | JSON |
200 |
| GET/users/{id} | 获取指定主键的用户 | JSON |
200 |
| PUT/users/{id} | 修改指定的主键的用户信息 | JSON |
200/201 |
| POST/users | 增加一个用户 | JSON |
201 |
| DELETE/users/{id} | 删除一个用户 | void |
204 |