Restful 指的是一种资源定位及资源操作的风格,它不是一个标准,也不是一个协议,只是一种风格。
基于这种风格设计的软件,可以更简洁、更有层次,更易于实现缓存等机制,以及安全性相对而言更好。
1. 功 能
- 资源操作:使用 POST、DELETE、PUT、GET等方法对资源进行操作
- 分别对应 添加、删除、修改、查询
1.1 传统方式操作资源
通过不同的参数来实现不同的效果,方法单一,方法类型基本是 POST 或者 GET
- GET(查询):http://localhost/hello/getData.action?id=001
- POST(新增):http://localhost/hello/saveData.action
- POST(更新):http://localhost/hello/updateData.action
- GET/POST(删除):http://localhost/hello/deleteData.action?id=001
1.2 使用Restful风格
可以通过不同的请求方式实现不同的效果。例如下面的示例,请求地址一样,但是功能可以不同。
- GET(查询):http://localhost/hello/001
- POST(新增):http://localhost/hello
- PUT(更新):http://localhost/hello
- DELETE(删除):http://localhost/hello/001
2. 示 例
2.1 传统方式下
- 前端请求传参
http://localhost/hello?a=10&b=12
- 后端接口接收参数
@RequestMapping("/hello")
public Integer hello(Model model,int a,int b) {
//封装数据
int result = a + b;
model.addAttribute("message", result);
//会被视图解析器处理
return "hello";
}
2.2 Restful风格下
使用注解@PathVariable,让方法参数的值对应绑定到一个URI模板变量上。
- 前端请求传参
http://localhost/hello/10/12
- 后端接口接收参数
@RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.GET)
public Integer hello(Model model,@PathVariable int a,@PathVariable int b) {
//封装数据
int result = a + b;
model.addAttribute("message", result);
//会被视图解析器处理
return "hello";
}
//等同于下面的
@GetMapping("/hello/{a}/{b}")
public Integer hello(Model model,@PathVariable int a,@PathVariable int b) {
//封装数据
int result = a + b;
model.addAttribute("message", result);
//会被视图解析器处理
return "hello";
}
3. @RequestMapping注解对应的等价注解
@RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.GET) 等价于 @GetMapping("/hello/{a}/{b}")
@RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.POST) 等价于 @PostMapping("/hello/{a}/{b}")
@RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.PUT) 等价于 @PutMapping("/hello/{a}/{b}")
@RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.DELETE) 等价于 @DeleteMapping("/hello/{a}/{b}")