backend-microservice-development
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese后端微服务开发
后端微服务开发
Quick Reference
Quick Reference
核心服务:process(流水线) | project(项目) | repository(代码库) | auth(权限)
四层架构:api-{service}(接口) → biz-{service}(业务+DAO) → boot-{service}(启动) → model-{service}(数据模型)
包命名:com.tencent.devops.<module>
Resource 前缀:User*(Web) | Service*(内部) | Build*(Agent) | Open*(外部)核心服务:process(流水线) | project(项目) | repository(代码库) | auth(权限)
四层架构:api-{service}(接口) → biz-{service}(业务+DAO) → boot-{service}(启动) → model-{service}(数据模型)
包命名:com.tencent.devops.<module>
Resource 前缀:User*(Web) | Service*(内部) | Build*(Agent) | Open*(外部)最简示例
最简示例
kotlin
// Resource 接口定义
@Tag(name = "USER_PIPELINE", description = "用户-流水线资源")
@Path("/user/pipelines")
@Produces(MediaType.APPLICATION_JSON)
interface UserPipelineResource {
@GET
@Operation(summary = "获取流水线列表")
fun list(@HeaderParam(AUTH_HEADER_USER_ID) userId: String): Result<List<PipelineInfo>>
}
// Resource 实现(构造器注入)
@RestResource
class UserPipelineResourceImpl @Autowired constructor(
private val pipelineService: PipelineService
) : UserPipelineResourcekotlin
// Resource 接口定义
@Tag(name = "USER_PIPELINE", description = "用户-流水线资源")
@Path("/user/pipelines")
@Produces(MediaType.APPLICATION_JSON)
interface UserPipelineResource {
@GET
@Operation(summary = "获取流水线列表")
fun list(@HeaderParam(AUTH_HEADER_USER_ID) userId: String): Result<List<PipelineInfo>>
}
// Resource 实现(构造器注入)
@RestResource
class UserPipelineResourceImpl @Autowired constructor(
private val pipelineService: PipelineService
) : UserPipelineResourceWhen to Use
When to Use
- 创建新微服务或添加新 Resource
- 编写 Kotlin/Java 后端代码
- 设计服务间调用架构
- 需要了解项目分层规范
- 创建新微服务或添加新 Resource
- 编写 Kotlin/Java 后端代码
- 设计服务间调用架构
- 需要了解项目分层规范
When NOT to Use
When NOT to Use
- 前端 Vue 开发 → 使用
04-frontend-vue-development - Agent Go 开发 → 使用
05-go-agent-development - 数据库 DDL 编写 → 使用
database-design
- 前端 Vue 开发 → 使用
04-frontend-vue-development - Agent Go 开发 → 使用
05-go-agent-development - 数据库 DDL 编写 → 使用
database-design
四层分层架构
四层分层架构
core/{service}/
├── api-{service}/ # API接口定义层 - 对外暴露服务契约
├── biz-{service}/ # 业务逻辑层 - 包含 Service、DAO
├── boot-{service}/ # Spring Boot启动层 - 独立部署单元
└── model-{service}/ # 数据模型层 - JOOQ 生成的数据库访问对象core/{service}/
├── api-{service}/ # API接口定义层 - 对外暴露服务契约
├── biz-{service}/ # 业务逻辑层 - 包含 Service、DAO
├── boot-{service}/ # Spring Boot启动层 - 独立部署单元
└── model-{service}/ # 数据模型层 - JOOQ 生成的数据库访问对象16 个核心微服务
16 个核心微服务
| 服务 | 职责 |
|---|---|
| project | 项目管理(所有模块基础依赖) |
| process | 流水线编排与调度(核心服务) |
| repository | 代码库管理 |
| artifactory | 制品库(对接 COS/S3) |
| store | 研发商店(插件、模板) |
| environment | 构建机/环境管理 |
| dispatch | 构建调度分发 |
| auth | 权限认证(RBAC) |
| ticket | 凭证管理 |
| log | 构建日志 |
| quality | 质量红线 |
| notify | 通知服务 |
| openapi | 对外 API |
| metrics | 度量服务 |
| websocket | WebSocket 服务 |
| misc | 杂项服务 |
| 服务 | 职责 |
|---|---|
| project | 项目管理(所有模块基础依赖) |
| process | 流水线编排与调度(核心服务) |
| repository | 代码库管理 |
| artifactory | 制品库(对接 COS/S3) |
| store | 研发商店(插件、模板) |
| environment | 构建机/环境管理 |
| dispatch | 构建调度分发 |
| auth | 权限认证(RBAC) |
| ticket | 凭证管理 |
| log | 构建日志 |
| quality | 质量红线 |
| notify | 通知服务 |
| openapi | 对外 API |
| metrics | 度量服务 |
| websocket | WebSocket 服务 |
| misc | 杂项服务 |
Resource 命名规范
Resource 命名规范
| 前缀 | 用途 | 路径前缀 | 示例 |
|---|---|---|---|
| 用户 Web 交互 | | |
| 服务间内部调用 | | |
| 构建过程 Agent/Worker | | |
| 第三方 Agent 专用 | | |
| 对外开放(OpenAPI) | | |
| 运营管理接口 | | |
| 前缀 | 用途 | 路径前缀 | 示例 |
|---|---|---|---|
| 用户 Web 交互 | | |
| 服务间内部调用 | | |
| 构建过程 Agent/Worker | | |
| 第三方 Agent 专用 | | |
| 对外开放(OpenAPI) | | |
| 运营管理接口 | | |
注解使用标准
注解使用标准
API 定义
API 定义
kotlin
@RestResource // REST 资源实现类
@Path("/user/artifactories")
@GET / @POST / @PUT / @DELETE
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)kotlin
@RestResource // REST 资源实现类
@Path("/user/artifactories")
@GET / @POST / @PUT / @DELETE
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)Swagger 文档
Swagger 文档
kotlin
@Tag(name = "USER_ARTIFACTORY", description = "版本仓库-仓库资源")
@Operation(summary = "根据元数据获取文件")
@Parameter(description = "用户ID", required = true)kotlin
@Tag(name = "USER_ARTIFACTORY", description = "版本仓库-仓库资源")
@Operation(summary = "根据元数据获取文件")
@Parameter(description = "用户ID", required = true)参数校验
参数校验
kotlin
@BkField(minLength = 1, maxLength = 128)
@BkField(patternStyle = BkStyleEnum.CODE_STYLE)kotlin
@BkField(minLength = 1, maxLength = 128)
@BkField(patternStyle = BkStyleEnum.CODE_STYLE)方法命名约定
方法命名约定
| 操作 | 命名前缀 |
|---|---|
| 查询 | |
| 创建 | |
| 修改 | |
| 删除 | |
| 操作 | 命名前缀 |
|---|---|
| 查询 | |
| 创建 | |
| 修改 | |
| 删除 | |
强制规则
强制规则
- ✅ 服务间通过 API 接口通信,禁止直接访问其他服务的数据库
- ✅ 依赖关系在 中明确声明
build.gradle.kts - ❌ 禁止循环依赖
- ❌ 禁止手写 SQL,使用 JOOQ
- ✅ 服务间通过 API 接口通信,禁止直接访问其他服务的数据库
- ✅ 依赖关系在 中明确声明
build.gradle.kts - ❌ 禁止循环依赖
- ❌ 禁止手写 SQL,使用 JOOQ
Checklist
Checklist
开发后端功能前确认:
- 功能归属到合理的现有服务
- Resource 命名符合前缀规范
- 使用构造器注入依赖
- 返回值使用 包装
Result<T> - 添加 Swagger 注解生成文档
开发后端功能前确认:
- 功能归属到合理的现有服务
- Resource 命名符合前缀规范
- 使用构造器注入依赖
- 返回值使用 包装
Result<T> - 添加 Swagger 注解生成文档