SpringBoot学习笔记——统一的接口response格式
对于接口的返回结果,需要有统一的结构,因为对于不用考虑流量费用的内部系统,对接口数据长度往往不太介意
开源项目的接口规范案例:
1.阿里云:
阿里云健康码引擎的response结构 ResponseResult

ResponseResult代码 参考:
https://github.com/aliyun/alibabacloud-whiteboard-callbackservice-demo/blob/master/src/main/java/com/aliyun/rtc/whiteboard/models/ResponseResult.java
返回体结构
/**
* 自动生成的请求ID,建议回传互动白板服务,以便日志跟踪
*/
private String requestId;
/**
* 响应状态
*/
private boolean responseSuccess;
/**
* 响应成功结果体
*/
private T result;
/**
* 响应失败错误信息
*/
private String errorCode;
private String errorMsg;
/**
* 成功响应
*/
public static <T> ResponseResult<T> getSuccessResult(String requestId, T v) {
	ResponseResult<T> result = new ResponseResult<>();
	result.setRequestId(requestId);
	result.setResponseSuccess(true);
	result.setResult(v);
	return result;
}
/**
* 错误响应
*/
public static <T> ResponseResult<T> getErrorResult(String requestId, String errorCode, String errorMsg) {
	ResponseResult<T> result = new ResponseResult<>();
	result.setRequestId(requestId);
	result.setResponseSuccess(false);
	result.setErrorCode(errorCode);
	result.setErrorMsg(errorMsg);
	return result;
}
线上阿里云的dataworks的某接口API的response字段:
data是返回的数据,errCode是错误码,errMsg是错误信息,requestId是请求的uuid

2.apache dolphinscheduler
参考:
https://github.com/apache/dolphinscheduler/blob/master/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/Result.java
3.antd design pro
antd design pro作为一个前端框架,也对后端的接口规范给出了建议,参考:https://v5-pro.ant.design/zh-CN/docs/request

我设计的后端接口规范:
对于接口的response,目前设计了3个字段:code,msg和data
code是状态码,msg是返回消息,data的返回数据
http status是200的时候,code默认是200
http status是4xx的时候,code会是4xxxx,比如http status为403的时候,code会是40301、40302、40303...标识 Forbidden 的具体原因
http status是5xx的时候,code会是5xxxx,比如http status为500的时候,code会是50001、50002、50003...标识 Internal Server Error 的具体原因
import lombok.*;
import java.io.Serializable;
import org.springframework.http.HttpStatus;
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ControllerResponseT<T> implements Serializable {
    /**
     * 状态码
     */
    private int code;
    /**
     * 消息
     */
    private String msg;
    /**
     * 数据内容,比如列表,实体
     */
    private T data;
    public static <T> ControllerResponseT<T> ofSuccess() {
        return ControllerResponseT.<T>builder()
                .code(HttpStatus.OK.value())
                .msg(HttpStatus.OK.getReasonPhrase())
                .build();
    }
    public static <T> ControllerResponseT<T> ofSuccess(String message) {
        return ControllerResponseT.<T>builder()
                .code(HttpStatus.OK.value())
                .msg(message)
                .build();
    }
    public static <T> ControllerResponseT<T> ofSuccess(String message, T data) {
        return ControllerResponseT.<T>builder()
                .code(HttpStatus.OK.value())
                .msg(message)
                .data(data)
                .build();
    }
    public static <T> ControllerResponseT<T> ofFail(int code, String message, T data) {
        return ControllerResponseT.<T>builder()
                .code(code)
                .msg(message)
                .data(data)
                .build();
    }
}
controller
import com.example.demo.common.ControllerResponseT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class HelloController {
    @RequestMapping(path = "/hello", method = RequestMethod.GET)
    public ControllerResponseT hello() {
        return ControllerResponseT.ofSuccess("hello");
    }
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @RequestMapping(path = "/fail", method = RequestMethod.GET)
    public ControllerResponseT fail() {
        return ControllerResponseT.ofFail(50001, "error", null);
    }
}
返回

本文只发表于博客园和tonglin0325的博客,作者:tonglin0325,转载请注明原文链接:https://www.cnblogs.com/tonglin0325/p/5316538.html
                    
                
                
            
        
浙公网安备 33010602011771号