直接跳到内容

接口标准&异常规范

接口标准

接口分为两类,内部接口HTTP REST接口

内部接口

内部接口为模块(ab-xxx-api)下所定义的,它的调用者为其他模块。

规范

  1. 方法的入参和出参禁止定义为Map类型。
  2. 接口内的方法应编写对应的注释。
  3. 接口方法参数过长应使用对象封装。
  4. 参数对象属性类型禁止使用枚举。

HTTP REST 接口

应用对外暴露的接口,外部通过HTTP远程调用提交和获取数据。

规范

  1. POST方式提交的数据,统一为对象并用@RequestBody标记接收。
  2. 接口响应统一使用ApiResponse包装。
  3. 接口声明响应数据类型。

示例

@PostMapping(value = "/xxx", produces = MediaType.APPLICATION_JSON_VALUE)
public ApiResponse<Void> xxx(@RequestBody Xxx xxx){
	return ApiResponse.success(xxx);
}

ApiResponse 数据结构

json
{
    "isOk":false, // 请求结果
    "code":"token_invalid", // 请求状态码
    "message":"登录超时", // 状态描述
    "data": T // 返回数据结构
}

接口状态码

描述接口执行出错预知状态封装,各模块都应有自己的状态码定义,统一实现基础接口com.dstz.base.common.codes.IBaseCode

状态码(code)规范:

  1. 多单词驼峰命名,单词首字母大写。
  2. 取名应有含义。

全局状态码

public enum GlobalApiCodes implements IBaseCode {

    /**
     * 操作成功
     */
    SUCCESS("Success", "操作成功"),

    /**
     * Illegal parameters.
     */
    PARAMETER_INVALID("ParameterInvalid", "Illegal parameters {}"),
    
	/**
     * Parameter unallowed.
     */
    PARAMETER_UNALLOWED("ParameterUnallowed", "Parameter not allowed {}"),

    private final String code;

    private final String message;

    GlobalApiCodes(String code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }
}

异常规范

系统定义了两类异常,业务异常(BusinessException)、业务信息(BusinessMessage)。

业务异常(BusinessException)

业务逻辑性执行出错,可预料到的错误。例如:流程表单缺失。

业务消息(BusinessMessage)

反馈给用户的信息提示,例如:某账户已存在

注意

上述的异常抛出,代码都会中断执行,并回滚当前事务。

异常的捕获处理在Controller层,对于业务消息(BusinessMesage)类,系统不做异常记录,在解析状态码后直接返回给调用方。

接口标准&异常规范 has loaded