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}

测试接口

Spring Boot如何优雅提高接口数据安全性 springboot接口规范_java

 

测试项目地址 HelloSpringBoot: SpringBoot测试项目