0.前言
对于springmvc的基础开发相信大家已经不陌生了,不过对于一些高级应用,我们还需要学习熟悉。因此,本篇博客将介绍如何使用springmvc开发RESTful API,有几个新的知识点需要掌握一下。
1.RESTful介绍
REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。Fielding将他对互联网软件的架构原则,定名为REST。如果一个架构符合REST原则,就称它为RESTful架构。
REST(Representational State Transfer):表述性状态转移,是一种跨平台、跨语言的架构风格,而不是一种标准。
什么是表述性状态转移呢?以下是我的理解:
- 表述性:每个资源都有一个唯一的资源标识符URI,而这些资源又可以用XML、JSON等方式来表述
- 状态:服务器资源的状态。这个资源可能:已存在、未被创建、已删除等。
- 转移:客户端通过使用HTTP协议定义的通用动词方法,发起Http请求,使得服务端的资源状态发生转变。
因此,一个RESTful架构应该满足:
- 用URL来描述资源而不是行为;
- 使用HTTP方法来描述行为,使用HTTP状态码来表示不同结果;
- 使用JSON数据交互,对服务器端资源进行操作,实现"表述性状态转移"。
比如:
动作 | 传统请求 | METHOD | RESTful请求 | METHOD |
---|---|---|---|---|
查询 | /user/query?name=zhangsan | GET | /user?name=zhangsan | GET |
详情 | /user/getInfo?id=1 | GET | /user/1 | GET |
新增 | /user/add?name=lisi | POST | /user | POST |
修改 | /user/update?id=1&name=tom | POST | /user/1 | PUT |
删除 | /user/delete?id=1 | POST | /user/1 | DELETE |
可以看到,RESTful风格明显要简洁许多。
2.映射配置
由于RESTful风格的原因,我们的前端控制器DispatcherServlet的拦截形式不能像是以前那种*.do或者*.action了,需要配置成"/"(注意不是“/*“)
<url-pattern>/</url-pattern>
如果是SpringBoot构建的项目,默认的拦截形式就是“/”,不用再进行配置。(通过server.servlet.path属性)
3.相关注解
@RestController
这个注解是@Controller和@ResponseBody的结合,标注在class上,声明这是一个RESTful的Controller,返回的数据是JSON
@GetMapping
@RequestMapping(method = RequestMethod.GET)的变体,同理还有PostMapping、PutMapping、DeleteMapping
@PathVariable
RESTful的调用经常会通过URL传参,此时使用@PathVariable可以获取URL中包含的参数,例如
@GetMapping("/user/{id}")
public User info(@PathVariable Long id){
System.out.println(id);
return new User();
}
而我们如果要对id进行一些简单校验,可以直接在{ }里写上正则表达式,springmvc会自动帮我们解析匹配,如果不满足,就不会进行处理(返回405)。例如:校验id为数字组成
@GetMapping("/{id:\\d+}")
public User info(@PathVariable Long id){
System.out.println(id);
return new User();
}
4.结语
关于如何开发RESTful API就介绍到这里吧。有什么不对的地方请各位指正谢谢。