1、RESTFul是什么?
RESTFul是WEB服务接口
的一种设计风格。RESTFul定义了一组约束条件和规范,可以让WEB服务接口
更加简洁、易于理解、易于扩展、安全可靠。在之前简单的讲解了一下RequestMapping
注解结合占位符,结合RESTful风格编程是如何获取数据的。接下来我们将简单简介一下RESTful的一些内容。
2、RESTful对WEB服务接口的规范
RESTful对web接口的uri和请求方式还有响应码都做了规范
对请求方式的规范:
- GET - 用于检索资源的信息。例如,获取一个用户的信息。
- POST - 用于创建新的资源。例如,添加一个新的用户。
- PUT - 用于更新现有的资源。PUT通常要求完整地替换资源,而不是仅更新部分属性。
- PATCH - 用于局部更新资源。与PUT不同,PATCH只更新提供的属性。
- DELETE - 用于删除资源。
对请求uri的规范:
RESTful架构中的URI(Uniform Resource Identifier)设计是其核心组件之一,它遵循以下一些关键规范和最佳实践:
-
资源导向:
- URI 应该以资源为中心,而不是以动作或过程为中心。这意味着URI应该代表实体或者资源,而动作则通过HTTP方法(如GET, POST, PUT, DELETE)来表达。
-
使用名词而非动词
- URI 中应该避免使用动词,因为动词由HTTP方法来承担。例如,
/users
而不是/getUsers
。
- URI 中应该避免使用动词,因为动词由HTTP方法来承担。例如,
-
资源的唯一标识:
- 每个资源应该有一个唯一的URI。例如,单个用户可能有一个URI像
/users/123
,而用户集合可能是/users
。
- 每个资源应该有一个唯一的URI。例如,单个用户可能有一个URI像
-
复数形式:
- 资源的集合通常用复数形式表示,例如
/books
或/photos
。
- 资源的集合通常用复数形式表示,例如
-
层次结构:
- URI 的层次应该合理,避免过深的嵌套。例如,获取用户的文章可能使用
/users/{userId}/articles
,而不是/users/{userId}/content/articles
。
- URI 的层次应该合理,避免过深的嵌套。例如,获取用户的文章可能使用
-
版本控制:
- 如果需要版本控制,可以将版本号包含在URI中,例如
/v1/users
或/users/v1
。
- 如果需要版本控制,可以将版本号包含在URI中,例如
-
避免状态:
- URI 不应该反映临时状态,因为RESTful API是无状态的。
-
简洁和可读性:
- URI应该简洁并且有意义,易于理解和记忆。
-
参数使用:
- 查询参数(如
?
后面的部分)用于过滤、排序或分页,但不应改变资源状态。例如,/users?sort=lastName&direction=desc
。
- 查询参数(如
-
避免使用动词:
- 尽管在某些情况下使用动词作为资源的一部分是常见的(如
/search
),但这通常不被视为“纯正”的RESTful设计。
- 尽管在某些情况下使用动词作为资源的一部分是常见的(如
遵循这些规范,可以帮助构建出一致、可扩展且易于理解和维护的RESTful API。
对响应码的规范:
- 2xx - 成功状态码,如200(OK)、201(Created)、204(No Content)等。
- 3xx - 重定向状态码,如301(Moved Permanently)、302(Found)等。
- 4xx - 客户端错误状态码,如400(Bad Request)、401(Unauthorized)、403(Forbidden)、404(Not Found)等。
- 5xx - 服务器错误状态码,如500(Internal Server Error)、501(Not Implemented)、503(Service Unavailable)等。
3、RESTful方式演示查询
index页面:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>index page</h1>
<hr>
<!--根据id查询:GET /api/user/1 -->
<a th:href="@{/api/user/1}">根据id查询用户信息</a><br>
</body>
</html>
controller部分:
@Controller
public class UserController {
@RequestMapping(value = "/api/user/{id}", method = RequestMethod.GET)
public String getById(@PathVariable("id") Integer id){
System.out.println("根据用户id查询用户信息,用户id是" + id);
return "ok";
}
}
4、RESTful方式演示替换(PUT)
这种方式的RESTful和之前的POST或者put是不同的,因为无论是PUT还是POST都是表单中自有方法,但是PUT不是自有方法,接下来演示怎么进行RESTful风格的PUT请求。
步骤一:想要能提交PUT请求就先得能够提交POST请求,所以我们需要早POST请求表单中添加隐藏域。隐藏域:
<input type="hidden" name="_method" value="put">
name
必须为_method
同时value
必须为put
或者 PUT
。
那么完整的表单代码就是:
<!--修改用户-->
<form th:action="@{/api/user}" method="post">
<!--隐藏域的方式提交 _method=put -->
<input type="hidden" name="_method" value="put">
用户名:<input type="text" name="username"><br>
<input type="submit" th:value="修改">
</form>
步骤二:在web.xml文件配置SpringMVC提供的过滤器:HiddenHttpMethodFilter。
<!--隐藏的HTTP请求方式过滤器-->
<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>
事实上如果是发送delete请求也一样,name
必须为_method
,但是value
必须为delete
或者 DELETE
。并且这个过滤器最好放在前面,因为防止有些过滤器的方法中调用了request.getParamter()
标签:users,编程,URI,风格,PUT,RESTful,id,资源 From: https://www.cnblogs.com/bobospace/p/18283515