restful风格编程知识补充

REST简介

REST(Representational State Transfer),表现形式状态转换。

单纯从上述的英文和中文,很难理解到底什么是rest,我们来看两个具体例子

  • 传统风格资源描述形式
http://localhost:8080/books/getById?id=1  //获取id为1的书籍信息
http://localhost:8080/books/saveBook //存储书籍信息
  • REST风格描述形式
http://localhost:8080/books/1  //获取id为1的书籍信息
http://localhost:8080/books    //存储书籍信息

优点:

  • 隐藏资源的访问行为,无法通过地址得知对资源是何种操作
  • 书写简化

对你们看错,直接/books就可以存储用户信息,这是为什么呢?下面我们来具体说一下。

我们是通过更改调用行为来区分对资源进行了何种操作

//请求方式不同,对应业务逻辑不同
http://localhost:8080/books   //查询全部书籍信息        get提交(查询)
http://localhost:8080/books/1   //查询指定书籍信息      get提交(查询)
http://localhost:8080/books   //添加书籍信息           post提交(新增)
http://localhost:8080/books   //修改书籍信息           put提交(修改)
http://localhost:8080/books   //删除书籍信息           delete提交(删除)

实际就是路径+请求方式确定资源访问形式,根据REST风格对资源进行访问成为RESTful

上述行为是约定方式,不是约定规范,可以打破,所以成为REST风格么不是REST规范。描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如users、books、accounts......

RESTful风格的入门案例

package com.wangs.springbootdemo.controller;

import com.wangs.springbootdemo.model.Book;
import org.springframework.web.bind.annotation.*;
import java.util.AbstractList;
import java.util.List;

/**
 * @Author 王硕
 * @Date 2022/3/27 13:39
 * @Description TODO
 */
@RestController
@RequestMapping("/books")
public class BookController {


    /**
    * @Author 王硕
    * @Date 2022/3/27 13:44
    * @Description 保存
    **/
    @PostMapping
    public String save(Book book){
        System.out.println("保存图书"+book);
        return "save";
    }

    @DeleteMapping("{id}")
    public String delete(@PathVariable Integer id){
        System.out.println("删除id为"+id+"的图书");
        return "delete";
    }

    @PutMapping
    public String update(Book book){
        System.out.println("更新图书"+book);
        return "更新图书";
    }

    @GetMapping("{id}")
    public Book getById(@PathVariable Long id){
        System.out.println("查询id为:"+id+"的图书");
        return Book.builder().id(id).name("123").prize(20).build();
    }

    @GetMapping
    public ListgetAll(){
        System.out.println("获取所有图书");
        return new AbstractList() {
            @Override
            public Book get(int index) {
                return null;
            }

            @Override
            public int size() {
                return 0;
            }
        };
    }

    /**
    * @Author 王硕
    * @Date 2022/4/29 15:05
    * @Description 传递多个参数
    **/
    @GetMapping("{pageNum}/{pageSize}")
    public String getPage(@PathVariable(value = "pageNum") Integer pageNum, @PathVariable(value = "pageSize") Integer pageSize){
        return pageNum+" "+pageSize;
    }
}

代码很简洁

你可能感兴趣的:(java,Spring,boot,java)