RESTful

1.API

  • JavaSE(SDK)
    将A项目部分功能进行封装成组件,B项目在不了解其内部原理即可以快速使用
  • Web项目
    A项目暴露一个请求映射方法,B应用通过这个请求映射方法从而完成功能

2.WEB发展

  • 静态页面
  • CGI
    使用API可以渲染部分网页,实现动态效果,服务器端ASP、PHP、JSP,前端js
  • 瘦客户端时代
    数据展示
  • RIA
    立体感
  • 移动互联网
    大家手机用得比较多

3.开发模式

3.1.传统模式

浏览器和服务器

3.2.前后端分离模式


前端不止只有PC

4.RESTful

一种设计风格,与前后端分离模式有关
约束前端请求方式,约束后端接口设计

/**
     * 路径设计:url路径更换为资源,操作资源就是操作对象
     * 请求方式:get -kv- 获取,post -kv- 增加,delete -kv- 删除,put -kv- 修改
     * 请求参数
     * 返回值:建议json
     *
*/


状态变化
:对资源进行操作

资源传输过程

  • 客户端 -> 服务端
    Accept:application/json:告诉服务端想要的数据类型
    Context-type/json:客户端携带的数据类型
  • 服务端 -> 客户端
    Context-type/json:服务端响应的数据类型
  • 如图所示

5.接口实现

5.1.查询所有

@RequestMapping(value = "/employees",method = RequestMethod.GET)
    @ResponseBody
    public List<Employee> list(EmployeeQueryObject qo){
        return employeeService.getAll();
    }

5.2.添加

@RequestMapping(value = "/employees",method = RequestMethod.POST)
    @ResponseBody
    public Employee save(Employee employee){
        employee.setId(2L);
        return employee;
    }

idea支持

postman

5.3.修改

@RequestMapping(value = "/employees",method = RequestMethod.PUT)
    @ResponseBody
    public Employee update(Employee employee){

        employee.setName(employee.getName() + "-hello");
        employee.setAge(employee.getAge() + 2);

        return employee;
    }

5.4.删除

注意实体类的NoArgsConstructor注解和AllArgsConstructor注解

@RequestMapping(value = "/employees",method = RequestMethod.DELETE)
    @ResponseBody
    public JsonResult delete(Long id){
        if(id % 2 ==0){
            return JsonResult.error("出错");
        }
        return JsonResult.success();
    }

5.5.查询单个

@RequestMapping(value = "/employees/{id}",method = RequestMethod.GET)
    @ResponseBody
    public Employee detail(@PathVariable  Long id){
        return new Employee(id,"Yupeng",18);
    }

若是名字不一样

@RequestMapping(value = "/employees/{eid}",method = RequestMethod.GET)
    @ResponseBody
    public Employee detail(@PathVariable("eid")  Long id){
        return new Employee(id,"Yupeng",18);
    }

6.页面请求

<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
    <script>
        $(function () {
            //增加,没啥好说的
            $("#btn1").click(function () {
                $.post("/employees",{name:"wuyupeng",age:18},function (data) {
                    console.log("hello");
                    console.log(data);
                })
            });

            //指定type为put
            $("#btn2").click(function () {
                $.ajax({
                    url:"/employee",
                    data:{id:1,name:"dafei",age:19},
                    type:"put",
                    success:function (data) {
                        console.log(data);
                    }
                })
            });

            //get,参数使用指定值
            $("#btn3").click(function () {
                $.get("/employee/1",function (data) {
                    console.log(data);
                })
            });

            //get和post一样,没啥好说的
            $("#btn4").click(function () {
                $.get("/employee",function (data) {
                    console.log(data);
                })
            })

            //指定类型为delete
            $("#btn5").click(function () {
                $.ajax({
                    url:"/employee",
                    data:{id:1},
                    type:"delete",
                    success:function (data) {
                        console.log(data);
                    }
                })
            });
        });

    </script>

7.接口简化

@RestController
@RequestMapping("employees")

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@GetMapping("/{id}")

8.RequestMapping属性

{ value + method + params + headers }

只有匹配该参数的请求,才会被该方法处理;
@GetMapping(value = "list",params="version=1")

只有匹配该请求头内容的请求,才会被该方法处理;
@GetMapping(value = "/test", headers = "content-type=text/*")


返回课程体系

posted @ 2021-06-18 09:25  LinkYup  阅读(67)  评论(0编辑  收藏  举报