目录
- 一、认识 REST
- 二、RESTful 的 注解
- 三、RESTful 优点
- 四、注解练习
- 五、HTTP Client 工具
- 六、RESTful 总结
一、认识 REST
REST (英文:Representational State Transfer,简称 REST,中文:表现层状态转换)。
一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁、更有层次。
REST这个词,是 Roy Thomas Fielding 在他 2000 年的博士论文中提出的。
任何的技术都可以实现这种理念,如果一个架构符合 REST 原则,就称它为 RESTFul 架构。
比如我们要访问一个 http 接口 :http://localhost:8080/boot/order?id=1021&status=1 。
采用 RESTFul 风格则 http 地址为:http://localhost:8080/boot/order/1021/1 。
二、RESTful 的 注解
SpringBoot 开发 RESTful 主要是几个注解的实现
- @PathVariable
获取 url 中的数据,该注解是实现 RESTful 的最重要的一个注解
- @PostMapping
接收和处理 Post 方式的请求
- @DeleteMapping
接收 delete 方式的请求,作用是删除数据,可以用 GetMapping 代替
- @PutMapping
接收 put 方式的请求,作用是添加数据,可以用 PostMapping 代替
- @GetMapping
接收 get 方式的请求
三、RESTful 优点
- 轻量,直接基于 http,不再需要任何别的诸如消息协议 get/post/put/delete 为 CRUD 操作。
- 面向资源,一目了然,具有自解释性。
- 数据描述简单,一般以 xml,json 做数据交换。
- 无状态,在调用一个接口 (访问、操作资源) 的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。
- 简单、低耦合。
四、注解练习
controller 类
package com.fancy.springbootmybatis.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class MyRestController {
// get 请求
/* rest 中, url 要使用占位符, 表示传递的数据
占位符叫做路径变量, 用来获取在 url 中的数据
格式 : 在 @RestMapping 的value 属性值中, 使用 {自定义名称}
http://localhost:8080/myweb/student/1001/hihi
*/
/* @PathVariable: 路径变量注解, 作用是获取 url 中的路径变量的值
属性 : value 路径变量名称
位置 : 在逐个接收参数中, 在形参定义的前面
注意 : 路径变量名和形参名一样, value可以不选
*/
@GetMapping(value = "/student/{studentId}/{classname}")
public String queryStudent(@PathVariable(value="studentId") Integer id, @PathVariable String classname) {
return "get 请求, 查询学生 studentId : " + id + ", 班级: " + classname;
}
@GetMapping(value = "/student/{studentId}/school/{schoolname}")
public String queryStudentBySchool(@PathVariable(value = "studentId") Integer id, @PathVariable String schoolname) {
return "get 请求, 查询学生 studentId :" + id + ", 班级 : " +schoolname;
}
@PostMapping("/student/{stuId}")
public String createStudent(@PathVariable("stuId") Integer id, String name, Integer age) {
return "post 创建学生, id=" + id + ", name=" + name + ", age=" + age;
}
@PutMapping("/student/{stuId}")
public String modifyStudent(@PathVariable("stuId") Integer id, String name) {
System.out.println("======== put 请求 =========");
return "put 修改学生, id = " + id + ", 修改的名称是: " + name;
}
@DeleteMapping("/student/{stuId}")
public String removeStudent(@PathVariable("stuId") Integer id) {
System.out.println("======= delete 请求方式 ========");
return "delete 删除学生, id=" + id;
}
}
application.properties 文件
请求路径冲突
@GetMapping(value = "/student/{studentId}/{classname}")
@GetMapping(value = "/student/{studentId}/{schoolname}")
这样的路径访问会失败, 路径有冲突
解决:设计路径,必须唯一, 路径 uri 和 请求方式 必须唯一。
五、HTTP Client 工具
使用 IDEA HTTP Client 模拟发送请求,进行测试
Tools —> HTTP Clients —> Create Request in HTTP Client
在页面内对请求地址进行修改,然后点击运行
运行结果
添加请求
put 请求可以通过 post 请求转换得到
六、RESTful 总结
请求 | 功能 |
post 请求 | 增 |
delete 请求 | 删 |
put请求 | 改 |
get请求 | 查 |
- 请求路径不要出现动词
例如 :查询订单接口
/boot/order/1021/1 (推荐)
/boot/queryOrder/1021/1 (不推荐)
- 分页、排序等操作,不需要使用斜杠传参数
例如 :订单列表接口
/boot/orders?page=1&sort=desc
一般传的参数不是数据库表的字段,可以不采用斜杠