Claude Code Plugins

Community-maintained marketplace

Feedback

01-backend-microservice-development

@TencentBlueKing/bk-ci
2.5k
0

后端微服务开发规范,涵盖目录结构、分层架构(API/Service/DAO)、依赖注入、配置管理、Spring Boot 最佳实践。当用户进行后端开发、创建新微服务、编写 Kotlin/Java 代码或设计服务架构时使用。

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name 01-backend-microservice-development
description 后端微服务开发规范,涵盖目录结构、分层架构(API/Service/DAO)、依赖注入、配置管理、Spring Boot 最佳实践。当用户进行后端开发、创建新微服务、编写 Kotlin/Java 代码或设计服务架构时使用。

Skill 01: 后端微服务开发

概述

BK-CI 后端采用 Kotlin/Java + Spring Boot 3 + Gradle Kotlin DSL 的微服务架构,包含 16 个核心微服务。

四层分层架构

每个微服务遵循标准的四层模块化结构:

core/{service}/
├── api-{service}/      # API接口定义层 - 对外暴露服务契约
├── biz-{service}/      # 业务逻辑层 - 包含 DAO、Service
├── boot-{service}/     # Spring Boot启动层 - 独立部署单元
└── model-{service}/    # 数据模型层 - JOOQ 生成的数据库访问对象

核心微服务清单

服务 职责
project 项目管理(所有模块基础依赖)
process 流水线编排与调度(核心服务)
repository 代码库管理
artifactory 制品库(对接 COS/S3)
store 研发商店(插件、模板)
environment 构建机/环境管理
dispatch 构建调度分发
auth 权限认证(RBAC)
ticket 凭证管理
log 构建日志
quality 质量红线
notify 通知服务
openapi 对外API
metrics 度量服务
websocket WebSocket服务
misc 杂项服务

类命名规范

Resource 层(API 接口)

接口命名模式[访问级别/场景前缀][资源类型]Resource

按包目录组织(推荐结构):

api-{module}/
├── user/         # User* 接口(用户 Web 交互)
├── service/      # Service* 接口(服务间调用)
├── builds/       # Build* 接口(构建过程中使用)
├── app/          # App* 接口(移动端 App)
├── open/         # Open* 接口(对外开放接口)
├── external/     # External* 接口(外部系统对接)
├── op/           # Op* 接口(运营平台管理)
└── auth/         # 权限相关接口

命名前缀及用途

前缀 用途 路径前缀 示例 Tag 命名
User*Resource 用户级别资源,前端 Web 交互 /user/ UserPipelineResource USER_*
Service*Resource 服务间内部调用 /service/ ServiceBuildResource, ServicePipelineResource SERVICE_*
Build*Resource 构建过程中 Agent/Worker 使用 /build/ BuildBuildResource, BuildArtifactoryResource BUILD_*
BuildAgent*Resource 第三方 Agent 专用接口 /buildAgent/ BuildAgentBuildResource, BuildAgentCredentialResource BUILD_AGENT_*
AgentLess*Resource 无编译环境(Docker)接口 /docker-agentless/ AgentLessDockerHostResource DOCKER_HOST
App*Resource 移动端 App 接口 /app/ AppPipelineBuildResource, AppRepositoryResource APP_*
Open*Resource 对外开放接口(OpenAPI) /open/ OpenPipelineTaskResource, OpenProjectResource OPEN_*OPEN_SERVICE_*
External*Resource 外部系统对接(如 Codecc) /external/ ExternalPipelineResource, ExternalCodeccRepoResource EXTERNAL_*
Op*Resource 运营管理接口(含平台管理、脚本调用) /op/ OpJobQuotaSystemResource, OpProjectResource OP_*
Remote*Resource 远程调用/权限中心回调 /service/*/auth RemoteNodeResource SERVICE_AUTH_*

注意事项

  • 前缀大小写OpOP 在项目中都有使用(如 OpCredentialResourceOPProjectResource),推荐使用 Op 作为类名前缀
  • 目录组织:大型模块(如 process)按访问级别分子包,小型模块可直接放在 api-* 根包下
  • Build 系列的区分
    • Build*Resource(路径 /build/):构建过程中 Agent/Worker 通用接口
    • BuildAgent*Resource(路径 /buildAgent/):第三方构建机 Agent 专用接口
    • AgentLess*Resource(路径 /docker-agentless/):无编译环境(容器化构建)
  • Op 系列的多场景应用
    • 运营管理平台界面调用(如配额管理、项目列表)
    • 服务器运维脚本 curl 调用(如清零配额、数据统计、批量操作)
    • 系统初始化和数据迁移脚本
    • 示例:curl -X POST "http://localhost/api/op/jobs/system/quota/clear/vm/DOCKER" -H "X-DEVOPS-UID: admin"
  • Auth 回调Remote*Resource 通常用于权限中心等外部系统的回调接口
  • 实际使用建议:查看同模块现有 Resource 命名模式,保持一致性

实现类命名[资源类型]ResourceImpl

Service 层

命名模式[功能域]Service / [功能域]ServiceImpl

示例:

  • ArchiveFileService
  • PipelineBuildArtifactoryService
  • BuildVariableService

数据模型

类型 命名模式 示例
传输对象 [功能]Info / [功能]Response / [功能]Request FileInfo, CreateFileTaskReq
枚举 [功能]Type / [功能]Enum ArtifactoryType

注解使用标准

API 定义注解

@RestResource              // REST 资源实现类
@Service / @Component      // Spring 组件
@Path("/user/artifactories")
@GET / @POST / @PUT / @DELETE
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)

Swagger 文档注解

@Tag(name = "USER_ARTIFACTORY", description = "版本仓库-仓库资源")
@Operation(summary = "根据元数据获取文件")
@Parameter(description = "用户ID", required = true)

参数校验注解

@BkField(minLength = 1, maxLength = 128)
@BkField(patternStyle = BkStyleEnum.CODE_STYLE)
@BkField(required = true)

数据模型注解

@Schema(title = "版本仓库-文件信息")
@get:Schema(title = "文件名", required = true)  // Kotlin getter 注解

JAX-RS 参数注解

@HeaderParam(AUTH_HEADER_USER_ID)
@PathParam("projectId")
@QueryParam("page")

依赖注入

推荐使用构造器注入

class BuildArtifactoryResourceImpl @Autowired constructor(
    private val archiveFileService: ArchiveFileService,
    private val client: Client
) : BuildArtifactoryResource

统一返回包装

所有 API 返回值使用 Result<T> 包装:

fun search(...): Result<Page<FileInfo>>
fun acrossProjectCopy(...): Result<Count>

方法命名约定

操作 命名前缀
查询数据 get*, query*, list*, search*, show*
创建/上传 create*, upload*, archive*
修改 update*, modify*
删除/清理 delete*, clear*, remove*
下载 download*, downloadUrl*
跨项目操作 acrossProject*

强制要求

  1. ✅ 新功能必须归属到合理的现有服务
  2. ✅ 服务间通过 API 接口通信,禁止直接访问其他服务的数据库
  3. ✅ 每个服务的依赖关系在 build.gradle.kts 中明确声明
  4. ❌ 禁止循环依赖
  5. ❌ 禁止手写 SQL,使用 JOOQ

包命名规范

com.tencent.devops.<module>

示例:

  • com.tencent.devops.process.api.user
  • com.tencent.devops.auth.service
  • com.tencent.devops.artifactory.dao

Detekt 抑制(必要时)

@Suppress("TooManyFunctions", "LongParameterList")
interface UserArtifactoryResource { ... }