接口定义规范

  良好的编码规范应该是程序员的一种职业素养,不仅仅是对自己的要求,也是对工作以及职业的尊重。代码不仅仅是给自己看的,也要供其他同事调用、调试,而且也要运行在jvm虚拟机上,健壮性、高效率、可读性强、标准化应该是大家都追求的目标。

  不规范的代码和开发习惯使工作中的大部分时间都在定位问题 + 改代码,填堵遗留下来的坑,导致实际用于开发中的时间并不多,高质量、高效的代码,可以切实有效的提高工作效率,减少无谓的时间浪费,也让大家在工作中少踩坑,并且杜绝踩重复的坑。建议大家的开发工具都安装阿里巴巴Java规约扫描插件和findBug插件,最实用的两款插件。

  无规矩不成方圆,技术很重要,但在团队开发中编码习惯比技术更加重要。个人的接口定义规范如下:

1、接口定义规范:

①返回格式要统一:同一个接口,有时候返回数组,有时候返回单个,有时候返回String,成功的时候返回对象,失败的时候返回错误信息字符串。工作中的系统如果都是这样定义的接口,看着让人心酸。在对应代码上,返回的类型是map,json,object,string都是不应该的。实际工作中,团队需要定义一个统一的格式。我们团队中开发用一个统一的Result工具类,附带状态码、返回数据以及返回描述。文章的最后附上代码。

②、输入参数要统一

一般情况下,不允许出现例如json字符串这样的参数,这种参数可读性极差。应该定义对应的JavaBean。例如现在很多都是springboot前后台分离的项目,一般都会使用swagger来做为restfulL接口的功能测试页面,如果你传递一个json,别人如何知道调用你的接口服务需要传递什么样的参数。正确示范,另外注意前面的红色剪头,会提示:Spring AOP marker at this line,表示已经被Spring的AOP标记并且拦截了:

错误示范,这种接口你让别人该怎么调用,可读性和质量极差:

③、返回类型要统一。供外围调用的restFul接口统一返回json,方便大家解析。有一次调用订单中心接口,结果那个同事给用map存储数据,并且给转成string字符串返回,结果就是:{CODE=0000, DATA={TRAIL_INFO=[{ACCEPT_ADDRESS=天津, ACCEPT_TIME=2018-05-21 19:28:56.0, OPCODE=20, REMARK=测试}]}, DESC=物流轨迹查询成功},好好的数据格式给变成string了,按照字符串来解析返回数据,想想就很蛋疼。

④、Controller做参数格式的转换,以及页面的跳转,不允许把业务逻辑写到controller里面,也不允许把json,map这类对象传到services去,也不允许services返回json、map。map,json这种格式灵活,但是可读性差,如果放业务数据,每次阅读起来都比较困难,需要从头到尾看完才知道里面有什么,是什么格式。定义一个bean看着工作量多了,但代码清晰多了。

  附上我的Result代码,见过不规范的代码多了,才知道这个Result用起来有多爽,不但可以返回一个统一的格式,而且可以应用spring的AOP。

public class Result<T> {

/**
* @Fields code : 返回状态码
*/
private String code;

/**
* @Fields msg : 返回消息描述
*/
private String msg;

/**
* @Fields data : 返回实体数据
*/
private T data;


/**
* <p>Title: </p>
* <p>Description: 异常返回时的返回构造描述</p>
* @param code
* @param msg
*/
public Result(String code, String msg) {
this.code = code;
this.msg = msg;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public T getData() {
return data;
}

public void setData(T data) {
this.data = data;
}
}

 

public class ResultUtil {

/**
* @Title: success
* @Description: 成功有返回
* @param @param object
* @param @return 设定文件
* @return Result 返回类型
*/
public static Result success(Object object){
Result result = new Result(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMessage());
result.setData(object);
return result;
}

/**
* @Title: success
* @Description: 成功无返回
* @param @return 设定文件
* @return Result 返回类型
*/
public static Result success(){
return ResultUtil.success(null);
}

/**
* @Title: error
* @Description: 失败方法返回
* @param @param code
* @param @param msg
* @param @return 设定文件
* @return Result 返回类型, 错误返回时状态码为 9999
*/
public static Result error(String code, String msg){
Result result = new Result(code, msg);
return result;
}
}

 

public enum ResultEnum {

UNKNOWN_ERROR("-1", "未知错误"),

SUCCESS("0000", "成功"),

PARAM_ERROR("2001", "参数不合法"),

DATABASE_ERROR("7001", "数据库异常");


private String code;
private String message;

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

public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

 

原文地址:https://www.cnblogs.com/wanghaichao/p/9152707.html