REST概述
REST概述
什么是REST
- 一种软件架构风格
- 资源在网络中以某种表现形式进行状态转移
- 一种组织Web服务的架构
- 目标是为了创建具有良好扩展性的分布式系统
核心原则
无状态性(Statelessness) :服务器端不保存客户端的状态信息
资源导向(Resource-Orientation) :将系统的功能抽象为资源的集合,并通过唯一的标识符(URI)来访问和操作这些资源
统一接口(Uniform Interface) :使用统一的接口规范来定义资源的操作方式
分层系统(Layered System):将网络中的组件分为多个层次,每个层次都只关注自己的功能
可缓存(Cacheable) :使用缓存来改善系统的性能和可伸缩性。服务器可以通过在响应中添加Cache-Control头部来指示响应是否可以被缓存。
优缺点
- 优点
- 书写简化
- 可扩展性
- 可移植性
- 可测试性
- 隐藏了资源的访问行为
- 缺点
- 无状态约束
- 标准化程度不足
- 性能问题
- 缺乏灵活性
具体使用
- 使用行为动作区分对资源的操作
- GET (查询)
- POST (新增)
- DELETE (删除)
- PUT (修改)
描述模块通常使用复数,加s
常用注解
- @ResstController 取代Controller和ResponseBody,表示启用REST风格
- @RequestParam用于接收url地址传参或表单传参 ?后面的
- @RequestBody用于接收json数据
- @PathVariable用于接收路径参数,使用{参数名称}描述路径参数
- 具体使用
后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
如果发送非json格式数据,选用@RequestParam接收请求参数
采用RESTfu1进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值
- 入门案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 package com.itheima.controller;
import com.itheima.domain.Book;
import com.itheima.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
//统一每一个控制器方法返回值
public class BookController {
private BookService bookService;
public Result save( { Book book)
boolean flag = bookService.save(book);
return new Result(flag ? Code.SAVE_OK:Code.SAVE_ERR,flag);
}
public Result update( { Book book)
boolean flag = bookService.update(book);
return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag);
}
public Result delete( { Integer id)
boolean flag = bookService.delete(id);
return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERR,flag);
}
public Result getById( { Integer id)
Book book = bookService.getById(id);
Integer code = book != null ? Code.GET_OK : Code.GET_ERR;
String msg = book != null ? "" : "数据查询失败,请重试!";
return new Result(code,book,msg);
}
public Result getAll() {
List<Book> bookList = bookService.getAll();
Integer code = bookList != null ? Code.GET_OK : Code.GET_ERR;
String msg = bookList != null ? "" : "数据查询失败,请重试!";
return new Result(code,bookList,msg);
}
}
- 一般会定义一个Result类,统一数据返回结果,设置统一数据返回结果编码,code也可以自己设置成常量的形式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 package com.sky.result;
import lombok.Data;
import java.io.Serializable;
/**
* 后端统一返回结果
* @param <T>
*/
public class Result<T> implements Serializable {
private Integer code; //编码:1成功,0和其它数字为失败
private String msg; //错误信息
private T data; //数据
public static <T> Result<T> success() {
Result<T> result = new Result<T>();
result.code = 1;
return result;
}
public static <T> Result<T> success(T object) {
Result<T> result = new Result<T>();
result.data = object;
result.code = 1;
return result;
}
public static <T> Result<T> error(String msg) {
Result result = new Result();
result.msg = msg;
result.code = 0;
return result;
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 XiaoYu!
评论