RESTful

RESTful

REST即表述性状态传递(英文:Representational State Transfer,简称REST)

是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格

它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性

使用RESTful设计风格可以写出符合标准的http应用程序


请求方式和URI

在我们之前的学习中,前端项目对后端发起的请求URI中直接包含了对请求的动作

例如:user/findById,无论是get还是post的方式,我们将想要做的动作(find)暴露在URI中了

而http作者设计的本质不是这样,他想通过不同的请求方式来区分对后端资源的操作,而不是通过URI区分

http提供了四个请求方式:

  • get:查询
  • post:保存(新增)
  • delete:删除
  • put:更新

总结规则

使用GET或DELETE请求方式时,如果参数为单一标识(id),则使用路径传递参数

如果参数不为单一标识时,则使用param参数

使用POST或PUT请求方式时,直接使用JSON请求体传递参数


项目实战

功能接口和请求方式请求参数返回值
分页查询GET /userpage=1&size=10{响应数据}
用户添加POST /user{ user 数据 }{响应数据}
用户详情GET /user/1路径参数{响应数据}
用户更新PUT /user{ user 更新数据}{响应数据}
用户删除DELETE /user/1路径参数{响应数据}
条件模糊GET /user/searchpage=1&size=10&keywork=关键字{响应数据}
pojo
@Data
public class User {
    private int id;
    private String name;
    private int age;
}
controller
package com.xiaobai.controller;

import com.xiaobai.pojo.User;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("user")
public class UserController {
    /**
     * 分页查询
     * @param page 可以不传,默认参数为1
     * @param size 可以不传,默认参数为10
     * @return 查到的User集合
     */
    @GetMapping
    public List<User> page(@RequestParam(required = false,defaultValue = "1") int page, @RequestParam(required = false,defaultValue = "10")int size){
        return null;
    }

    /**
     * 新增一个用户
     * @param user 以JSON方式接收User参数
     * @return 新增的用户回显
     */
    @PostMapping
    public User save(@RequestBody User user){
        return null;
    }

    /**
     * 获取用户详情
     * @param id 用户id,以路径参数的方式接收
     * @return 查询到的用户对象
     */
    @GetMapping("{id}")
    public User detail(@PathVariable Integer id){
        return null;
    }

    /**
     * 更新用户信息
     * @param user 更新后的用户对象,以JSON的方式接收
     * @return 更新后的用户对象
     */
    @PutMapping
    public User update(@RequestBody User user){
        return null;
    }

    /**
     * 删除用户
     * @param id 被删除的用户id,以路径参数的方式接收
     */
    @DeleteMapping("{id}")
    public void delete(@PathVariable Integer id){
    }

    /**
     * 模糊查询(带分页)
     * @param keyword 关键词,用以模糊查询
     * @param page 可以不传,默认参数为1
     * @param size 可以不传,默认参数为10
     * @return 返回查询结果
     */
    @GetMapping("search")
    public List<User> search(@RequestParam String keyword,
                             @RequestParam(required = false,defaultValue = "1") int page,
                             @RequestParam(required = false,defaultValue = "10")int size){
        return null;
    }
}