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 List<Book>getAll(){
System.out.println("获取所有图书");
return new AbstractList<Book>() {
@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;
}
}
代码很简洁