RESTful概念
REST(英文:Representational State Transfer,简称REST,意思:表述性状态转换,描述了一个架构样式的网络系统),是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件,主要用于客户端和服务端交互类的软件。基于这个风格设计的软件可以更简介,更有层次,更易于实现缓存等机制。
RESTful:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构
RESTful的特性:
- 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息,用一个URI(统一资源定位符)指向它,每种资源对应一个特性的URI。要获取这个资源,访问它的URI就可以。
- 表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层。
- 状态转换(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转换”(State Transfer)。而这种转换是建立在表现层之上的,所以就是“表现层状态转换”。
相关注解
| 作用 | 注解 |
|---|---|
| @RequestBody | 接收的是一个json字符串,String会帮我们把这个字符串转为对象 |
| @RestController | 由 @Controller + @ResponseBody组成(返回 JSON 数据格式) |
| @PathVariable | URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到控制器处理方法的形参中 |
| @RequestMapping | 注解用于请求地址的解析,是最常用的一种注解 |
| @GetMapping | 查询操作 |
| @PostMapping | 添加操作 |
| @PutMapping | 更新操作 |
| @DeleteMapping | 删除操作 |
| @RequestParam | 将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解) |
@RequestBody、@RequestParam、@PathVariable的区别与应用
-
区别:
- @RequestParam用于接收url地址传参或表单传参
- @RequestBody用于接收json数据
- @PathVariable用于接收路径参数,使用(参数名称)描述路径参数
-
应用:
- 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
- 如果发送非json格式数据,选用@RequestParam接收请求参数
- 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@Pathvariable接收请求路径变量,通常用于传递id值
传统模式URI与RESTful风格对比
1.查询
| 查询 | 传统 | REST | REST后台接收 |
|---|---|---|---|
| 查询所有 | http://localhost/employee/list | http://localhost/employees | @RequestMapping(value = “/employees”, method = RequestMethod.GET) |
| 查询单个 | http://localhost/employee/list?id=1 | http://localhost/employees/1 | @RequestMapping(value = “/employees/{id}”, method = RequestMethod.GET) @ResponseBody public Employee queryById(@PathVariable Long id) {} |
2.添加
| 传统 | REST | REST后台接收 |
|---|---|---|
| http://localhost/employee/add | http://localhost:8080/employees | @RequestMapping(value = “/employees”, method = RequestMethod.POST) public Employee add(@ModelAttribute(“emp”) Employee employee) {} |
3.修改
| 传统 | REST | REST后台接收 |
|---|---|---|
| http://localhost/employee/update | http://localhost:8080/employees | @RequestMapping(value = “/employees”, method = RequestMethod.PUT) public Employee update(@ModelAttribute(“emp”) Employee employee) {} |
4.删除
| 传统 | REST | REST后台接收 |
|---|---|---|
| http://localhost/employee/delete | http://localhost:8080/employees/{id} | @RequestMapping(value = “/employees/{id}”, method = RequestMethod.DELETE) @ResponseBody public JsonResult delete(@PathVariable Long id) {} |