Contributor为Qualitis贡献代码时,需遵循如下规范进行开发。
内部接口:
/api/v1/{role}/{module}/.+
外部接口:
/outer/api/v1/{module}/.+
约定:
v1为服务的版本号。
{role}为角色名称,目前Qualitis有admin和projector两种角色。
{module}为模块名称。
{
"code": "200",
"message": "",
"data": {
}
}
约定:
code:返回状态信息。
message:返回请求的提示信息。
data:返回具体的数据。
code状态码 | 含义 | 备注 |
---|---|---|
200 | 成功的请求 | 当请求成功的时候,返回200状态码 |
500 | 服务器错误,请求失败 | 服务器内部错误,如保存数据库失败等,返回500状态码 |
400 | 请求参数错误 | 请求参数不符合规范,返回400状态码 |
401 | 鉴权失败 | 用户鉴权失败,要么没有登录,要么签名错误 |
403 | 权限不足 | 用户鉴权通过,但是权限不足 |
【约定】Qualitis项目选择slf4j和Log4j2作为日志打印框架,去除了Spring Boot包中自带的Logback日志框架。由于Slf4j会随机选择一个日志框架进行绑定,所以在引入新依赖的时候,需要将诸如slf4j-log4j等桥接包exclude掉,不然日志打印会出现问题。如果新引入的依赖包含了Log4j等包,不要进行exclude,不然代码运行可能会报错。
【强制】类中不可直接使用日志系统(log4j2、Log4j、Logback)中的API。应采用LoggerFactory.getLogger(getClass)。
【强制】严格区分日志级别。Fatal级别的日志,在应用初始化的时候,就应该抛出来,并使用System.out(-1)退出。ERROR级别的异常为开发人员必须关注和处理的异常,不要随便用ERROR级别的。Warn级别是用户操作异常日志和一些方便日后排除BUG的日志。INFO为关键的流程日志。DEBUG为调式日志,尽量少写。
【强制】要求:INFO级别的日志,每个小模块都必须有,关键的流程,都至少有INFO级别的日志。
【强制】异常信息应该包括两类信息:案发现场信息和异常堆栈信息。如果不处理,那么通过关键字throws往上抛出。
【强制】线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
【强制】高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁;能锁代码块,就不要锁整个方法体;能用对象锁,就不要用类锁。
【强制】ThreadLocal尽量少用,用的时候如果存入的是一个需要close的对象,记得及时close释放掉。