文章目录
开发背景
现如今前后端分离已经是项目开发的主流方式,在前后端分离开发情形下,少不了前端和后端之间的友好交流,为了避免上升为物理交流,项目中必须要有一套规范有效的前后端协议格式。
后端开发的不同服务、不同业务处理并返回不同类型的数据,这不仅会增加巨大工作量来进行协议的输出,数据格式的多样化对于前端同事来讲也是一个灾难,这就需要对后端服务接口的返回格式定义成统一规范的结果类型。
前后端开发过程中数据交互规范化是一件非常重要的事情,不仅可以减少前后端交互过程中出现的问题,也让代码逻辑更加具有条理。
初始篇:从封装返回结果说起
返回结果类基本特征
对于后端的返回数据,考虑将格式统一后返回,在开发大量后端服务接口之后,根据开发经验可以总结得到,请求一个接口时需要关注的指标有:
- 响应状态码,即请求接口返回状态码,如 HTTP 请求中的 200、304、500 等状态
- 响应结果描述,有些接口请求成功或失败需要返回描述信息供前端展示
- 响应结果数据,大部分的接口都会返回后端获取的数据,并以列表的形式展示的前端页面中
- 是否成功:在实际项目中请求接口时,首先要关注的应该是接口的请求是否成功,然后才会去关注成功返回数据或者错误代码和信息,在统一数据中可以加入请求是否成功的标识,当然接口的成功与否也可以根据状态码可以判断,可以根据实际需求考虑是否定义结果状态
- 其他标识:为了显示更多接口调用的信息,可能会根据实际的业务需求加入接口调用的时间信息等。
除了以上属性特征外,返回结果类在定义时还应该满足:
- 属性私有化,使用 get/set 方法来操作属性值
- 构造器私有化,外部只可以调用方法,初始化要在类内部完成
- 由于外部需要直接调用方法,因此方法要定义为静态方法
松散的自定义返回结果
根据上述对返回结果基本特征的分析,我们可以定义一个如下代码所示为的返回结果类
public class Result {
private Integer code;
private String desc;
private Object data;
// 是否请求成功,本文使用 code = 10000 特指成功,其余为失败,因此不再冗余 success
// private Boolean success;
//请求时间,暂时不需要,可根据需求定义
//private long timestamp;
//构造器私有
private Result() {
}
//get/set 方法
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
/**
* 返回通用成功
* @return Result
*/
public static Result ok(){
Result result = new Result();
result.setSuccess(true);
result.setCode("20000");
result.setDesc("请求成功");
return result;
}
/**
* 返回通用失败,未知错误
* @return Result
*/
public static Result error(){
Result result = new Result();
result.setSuccess(false);
result.setCode(20001);
result.setDesc("请求失败");
return result;
}
}
lombok:代码简洁利器
为了减少 get/set 等代码内容,引入了 lombok 工具,并使用注解 @Data 标注,代表当前类默认生成 set/get 方法
@Data
public class Result {
private Integer code;
private String desc;
private Object data;