# 后端规范

# 一、 系统说明

  1. 生产环境下,网关推荐使用https(微信小程序和IOS强制要求)

  2. 只允许 服务网关(gateway微服务) 可外网访问,其他微服务禁止外网访问。

  3. 接口文档请看网关接口汇总: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. 循环调用

  • 不允许在方法里面循环调用远程接口或者查询数据库,应该使用批量操作,主要是考虑性能问题
上次更新: 1/3/2024, 9:29:53 AM