RESTful规范
RESTful是一种约定俗成的接口设计规范,要求后端在开发设计接口的时候遵循对应的原则。前后端开发人员都了解这个规则,能让接口开发更有效率,接口设计也更美观,易于维护。
RESTful规范主要要求了,接口的url地址和请求方式。
主要有五种设计要求:以请求user(用户)数据为例说明一下:
POST /user 创建一个用户
对应数据库的insert操作,往数据库中添加数据时用POST请求
GET /user/{id} 根据id获取某个用户
对应数据库的查询操作,获取数据用GET请求
GET /user 获取用户列表
对应数据库的查询操作,获取数据用GET请求
PUT /user/{id} 修改某个id的用户全部信息
对应数据库的update操作,获取数据用GET请求
PATCH /user/{id} 修改某个id的用户部分信息
对应数据库的update操作,获取数据用GET请求
与PUT请求不同的是,PATCH请求只修改部分字段,比如用户原数据为{"name":"test", "age":18, "gender":0},分别用PUT和PATCH发送修改数据为{“name”:"change","age":null,"gender":null},PUT会把所有数据替换为这个新数据,最终age和gender就为空了,结果和请求的数据一样,而PATCH会根据传输的数据,只替换有值的部分,为空的就跳过了,最终用户的数据{"name":"change", "age":18, "gender":0}
DELETE /user/{id} 删除某个id的用户
删除数据用DELETE请求
DELETE请求是删除某些数据,不过对应数据库的操作未必全是delete,现在系统设计时,多会在表中定义is_delete之类字段,删除只是逻辑删除,并没有真的从数据库中删除掉,对应的还是数据库的update操作。
JAVA代码
看一个例子,我们在SpringBoot的controller里是如何定义接口的
@RestController
@RequestMapping(value = "/user")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping(value = "")
public User create(@RequestBody UserRequestBean bean) {
return userService.create(bean);
}
@GetMapping(value = "/{id}")
public User findById(@PathVariable Long id) {
return userService.findById(id);
}
@GetMapping
public Page<User> list(@RequestParam int page,
@RequestParam int size,
@RequestParam(required = false) String username,
@RequestParam(required = false) Integer maxAge,
@RequestParam(required = false) Integer minAge,
@RequestParam(required = false) Integer gender,
@RequestParam(required = false) String phone,
@RequestParam(required = false) String accessCardNumber,
@RequestParam(required = false) String orderParam,
@RequestParam(required = false) String direction) {
return userService.list(page, size, username, maxAge, minAge, gender, phone, accessCardNumber, orderParam, direction);
}
@PutMapping(value = "/{id}")
public User update(@PathVariable Long id, @RequestBody UserRequestBean bean) {
return userService.update(id, bean);
}
@PatchMapping(value = "/{id}")
public User patch(@PathVariable Long id, @RequestBody UserRequestBean bean) {
return userService.patch(id, bean);
}
@DeleteMapping(value = "/{id}")
public void delete(@PathVariable Long id) {
userService.delete(id);
}
}
给Controller添加注解@RestController,表示这个类是Controller并且会返回实体结构的json格式数据。
@RequestMapping(value="user")配置这个controller的访问url地址前缀为/user,这个类里的具体接口都会在这个url地址的基础上继续添加
@PostMapping(value="")设置接口请求方式为POST,没有配置新的url地址,最终访问url地址为/user
@GetMapping(value="/{id}")设置接口请求方式为GET,访问url地址为/user/{id}
@GetMapping 设置接口请求方式为GET,访问url地址为/user
@PutMapping(value="/{id}")设置接口请求方式为PUT,访问url地址为/user/{id}
@PatchMapping(value="/{id}")设置接口请求方式为PATCH,访问url地址为/user/{id}
@DeleteMapping(value="/{id}")设置接口请求方式为DELETE,访问url地址为/user/{id}
测试接口