# 后端规范
# 一、 系统说明
生产环境下,网关推荐使用https(微信小程序和IOS强制要求)
只允许 服务网关(gateway微服务) 可外网访问,其他微服务禁止外网访问。
接口文档请看网关接口汇总:http://localhost:9900/doc.html
# 二、命名空间
命名空间是根据nacos的命名空间来定义的,所有的配置都是指命名空间ID(并不是命名空间名称),所有的服务必须在同一个命名空间才能相互调用。
# 1. 配置中心
spring.cloud.nacos.namespace=${spring.profiles.active}
# 这里的namespace指的是nacos的命名空间ID,注意并不是命名空间的名称,为了方便使用,我们设置nacos的命名空间的时候,把名称和ID设置为相同值。
# 特别注意:除了配置nacos的账号密码,命名空间ID配置正确才能读取到配置,应用启动才能成功,否则可能出现读取配置失败,数据库无法连接成功。
# 2. 应用配置
bootstrap.properties的参数说明
spring.profiles.active=dev
## 这个参数,是应用启动最重要的参数之一。spring.profiles.active和多个配置有关
# 3. 日志配置
roncoo-education\roncoo-education-common\roncoo-education-common-log\src\main\resources\logback-spring.xml
<springProfile name="dev">
## 这里的name和spring.profiles.active的值相对应,按需配置日志即可
## 特别注意:控制台的日志不显示,一般是这里设置不正确导致的。
</springProfile>
# 三、 规则约定
# 1. 环境参数的约定
所谓的环境参数是指区分本地、开发、测试、生产的环境参数,对应如下:
环境参数 | 说明 |
---|---|
local | 本地环境,调试使用 |
dev | 开发环境,开发使用 |
test | 测试环境,测试使用 |
prod | 生产环境,生产使用 |
注意:这里的环境参数是规则的约定,可以按需进行增减
# 2. 接口工程的约定
roncoo-education-feign下面的所有子工程,都定义为接口工程(提供接口给其他工程调用),包结构如下:
├── interfaces 接口类,命名规范:IFeign开头
├── req 入参实体,命名规范:Req结尾
├── resp 出参实体,命名规范:Resp结尾
# 3. 服务工程的约定
roncoo-education-service 下面所有的子工程,都定义为服务工程(提供接口给前端调用),包结构如下:
├── dao 数据层
├── feign 工程接口
├── job 定时任务,分布式调用
├── service
│ ├── admim 后台接口,需要登录的接口,路径包含关键词:/admim
│ ├── api 前端接口,不需要登录的接口
│ ├── auth 前端接口,需要登录的接口,路径包含关键词:/auth
│ ├── biz 共有业务逻辑(所有control都可以调用)
│ ├── boss 后台接口,需要登录的接口,路径包含关键词:/boss
# 4. 服务网关的约定
服务网关的主要功能:转发和鉴权。
转发功能:通过配置中心获取转发规则。
鉴权功能:通过判断请求路径是否包含某个约定的字符串来实现鉴权。
目前鉴权路径为:/admin、/auth、 /boss
# 5. 建表的约定
数据库必备字段:
`status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '状态(0:禁用,1:可用)',
`sort` int NOT NULL DEFAULT '100' COMMENT '排序,默认值:100',
`creator_id` bigint NOT NULL DEFAULT '0' COMMENT '创建人ID',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
只有2种状态的字段,字段类型:tinyint,值使用:0和1;
3种或以上状态的字段,字段类型:tinyint,值使用:1、2、3;
mysql8.0使用CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
# 四、规范说明
# 1. controller 规范
controller在mvc中充当路由的角色,建议尽量保持代码简洁和清晰
- 建议不做任何的业务逻辑操作
- 建议不做任何的数据组合、拼装等操作
- 建议不做任何的参数、业务校验,参数校验允许使用@Valid 注解做简单的校验
# 2. biz规范
biz在mvc中充当业务逻辑的角色,所有的业务逻辑都应该写在这里
- 尽量实现所有的业务逻辑,并做好代码注释
- 代码行数太多,建议拆分成多个小的方法(private方法)
- 若方法共用的,应该写入到共用的biz包下(commonBiz结尾)
# 3. dao规范
dao在mvc中充当数据访问层的角色,所有的数据库操作都应该写在这里
- 建议优先使用mybatis-plus的CRUD方法
- 建议优先使用mybatis-plus的lambda方法
# 五、注意事项
# 1. Feign接口规范
- Get,使用注解@PathVariable接收参数,应该保证幂等。
- Post,使用注解@RequestBody接收参数,不允许出现多个@RequestBody。
- 每个方法建议最多
1
个参数,如果超出 1 个参数的话,要封装成javabean
对象。
# 2. Seata分布式事务
- 不允许更新主键操作
# 3. 异常处理
- 在开发过程中,如果要抛远程异常,应该抛系统里面已经定义好的BaseException。
# 4. 循环调用
- 不允许在方法里面循环调用远程接口或者查询数据库,应该使用批量操作,主要是考虑性能问题