Skip to content

Emtemf/api-codegen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

123 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API Codegen

基于 YAML 定义自动生成 Java API 代码,同时支持 Spring MVC 和 JAX-RS (CXF) 注解。

特性

  • 支持 Swagger 2.0OpenAPI 3.0 YAML 格式
  • 同时生成 Spring MVC 和 JAX-RS (CXF) 注解
  • 自动校验分析和修复建议(DFX 规则代码)
  • 生成 Controller、Request、Response 类
  • 支持类和方法级别自定义注解
  • Web UI 仅负责可视化编辑,分析与修复逻辑统一收敛到 api-codegen-core
  • 自动修复直接回写用户原始 Swagger / OpenAPI YAML,并提供 Monaco 双栏 Diff 预览
  • Maven 插件支持,适配 CI/CD 流程

项目结构

api-codegen/
├── api-codegen-core/           # 核心代码生成库
├── api-codegen-maven-plugin/  # Maven 插件
├── web-ui/                    # Web 可视化界面
└── skills/                    # Claude Code Skill

Claude Code Skill

项目内置了一个 Claude Code Skill(skills/api-codegen/),在 Claude Code 中可以直接使用自然语言驱动完整的 YAML 校验→修复→代码生成工作流。

触发示例:

用户说 Skill 动作
"帮我看看这个 YAML 有什么问题" DFX 规则校验分析
"修复一下校验规则问题" 自动修复并回写 YAML
"根据这个 YAML 生成代码" 生成 Controller/Request/Response
"帮我给接口加个 @Transactional 注解" 在 YAML 中添加自定义注解
"完整走一遍" 分析→修复→生成→预览

Skill 包含环境检测脚本、subagent 指令、输出模板和 YAML 起步模板,详见 skills/api-codegen/SKILL.md

Bridge Contract

Web UI、IDEA 插件、浏览器插件共用的 JSON bridge contract 见: docs/ui-bridge-contract.md

环境要求

  • JDK 21 或更高版本(必需)
  • Node.js 22 或兼容版本(Web UI 与前端测试需要)

支持的 YAML 格式

格式 说明
Swagger 2.0 行业标准格式
OpenAPI 3.0 最新行业标准格式

系统会自动检测 YAML 格式,无需手动指定。

快速开始

Web UI(推荐)

cd web-ui
node server.js
# 浏览器打开 http://localhost:18080
# 如果 18080 被占用,会自动顺延到下一个可用端口
# 也可以手动指定端口:PORT=19090 node server.js

Web UI 必须通过本地 server.js 调用 api-codegen-core 作为统一分析/修复入口, 不能直接双击打开 web-ui/index.html

Web UI 核心流程预览

下面这些截图直接来自当前 web-ui 实际界面,展示的是现在推荐的 core-first 工作流: 只维护一份原始 Swagger / OpenAPI YAML,分析、自动修复、Controller 影响、实体变化都通过同一个入口完成。

1. 原始 YAML 工作区 - 左侧始终编辑用户原始 YAML,右侧保留分析控制台 Workspace

2. 分析结果 - 优先展示当前可自动修复项,再处理需要手动补全的项 Analysis

3. YAML 修复预览 - Monaco 双栏对比原始 YAML 与修复后 YAML,只突出真实变更行 YAML Diff

4. Controller 影响 - 同一份 YAML 最终汇总到统一 Controller 预览,方法变化和未变化方法分区展示 Controller Impact

5. 实体变化 - 直接查看 Request / Response / Model 生成结果差异与引用层级 Model Impact

Web UI 与 Core 的关系

Web UI 操作 实际执行
打开 / 粘贴 YAML 编辑用户原始 Swagger / OpenAPI 文件
点击“分析” 调用 api-codegen-core 的统一分析入口
点击“自动修复” api-codegen-core 计算可安全回写的修复
查看修复预览 对比原始 YAML 与修复后的 YAML
点击“应用修复” 将修复结果写回编辑器并重新分析
点击“需手动” 在缺少类型语义时补全必要信息,再重新分析

IntelliJ 插件(可选)

项目还提供独立的 IntelliJ IDEA 插件,可在 IDE 中直接使用。

注意:IntelliJ 插件位于独立仓库:https://github.com/Emtemf/api-codegen-intellij-standalone

Maven 插件

适用场景:

  • 你已经有一份 Swagger / OpenAPI YAML,希望在 Maven 构建阶段直接生成 Controller、Request、Response 代码
  • 你希望把分析、自动修复、代码生成接入本地构建或 CI

最小生成命令:

mvn com.apicgen:api-codegen-maven-plugin:generate \
  -DyamlFile=src/main/resources/api.yaml \
  -DbasePackage=com.example.demo

执行效果:

  • 读取 yamlFile 指向的 API 定义
  • 先做解析与校验,再生成统一 Controller 和对应的 Request / Response 类
  • 输出目录以 outputDir 为根,再拼接当前默认的 controller / request / response 子路径
  • 当前代码中的默认子路径分别是 generated/api/src/main/java/req/src/main/java/rsp/

Java 直接运行

# 在仓库根目录构建 core,并生成可执行 jar
./mvnw -pl api-codegen-core -am -DskipTests package

# 直接运行内置启动示例
java -jar api-codegen-core/target/api-codegen.jar api.yaml -output=target/startup-smoke -force

# 或使用 Maven 执行同一个入口(仍从仓库根目录运行,避免 ../ 路径被安全校验拒绝)
./mvnw -pl api-codegen-core exec:java \
  -Dexec.mainClass="com.apicgen.Main" \
  -Dexec.args="api.yaml -output=target/startup-smoke -force"

单文件输入与自定义注解

用户只维护一份 API YAML。如果需要给生成的 Controller 类或方法附加自定义注解,直接写在 Swagger / OpenAPI 文件里即可。

含义:

  • x-java-class-annotations 写在 path 层,作用到生成的 Controller 类
  • x-java-method-annotations 写在具体 HTTP 方法层,作用到对应生成的方法

完整示例:参见 docs/annotation-example.md,包含 YAML 输入、生成命令、生成的 Java 代码对照表。

Swagger 2.0 写法:

swagger: "2.0"
info:
  title: User API
  version: "1.0"
paths:
  /users:
    x-java-class-annotations:
      - "@Secured"
      - "@AuditLog(action='USER_QUERY')"
    post:
      operationId: createUser
      x-java-method-annotations:
        - "@Permission('user:create')"
        - "@AuditLog(action='CREATE_USER')"
      responses:
        "200":
          description: OK

OpenAPI 3.0 写法:

openapi: 3.0.1
info:
  title: User API
  version: "1.0"
paths:
  /users:
    x-java-class-annotations:
      - "@Secured"
      - "@AuditLog(action='USER_QUERY')"
    post:
      operationId: createUser
      x-java-method-annotations:
        - "@Permission('user:create')"
        - "@AuditLog(action='CREATE_USER')"
      responses:
        "200":
          description: OK

生成命令示例:

mvn com.apicgen:api-codegen-maven-plugin:generate \
  -DyamlFile=api.yaml \
  -DbasePackage=com.example.user \
  -DoutputDir=./out

当前示例命令的输出路径:

  • ./out/generated/api/com/example/user/api/UserApi.java
  • ./out/src/main/java/rsp/com/example/user/rsp/Response.java

代码生成器同时支持 Spring MVC 和 JAX-RS (CXF) 注解,无需额外配置。

Maven 插件常用参数

下面这些说明基于当前插件实现:

mvn com.apicgen:api-codegen-maven-plugin:generate [参数]
参数 作用 典型场景
-DyamlFile=... 指定输入的 Swagger / OpenAPI 文件 你的 YAML 不在默认的 src/main/resources/api.yaml
-DbasePackage=... 指定生成代码的基础包名 希望生成到你的业务包路径,而不是默认 com.apicgen
-DoutputDir=... 指定代码输出根目录 想输出到自定义源码目录或临时生成目录
-Dframework=cxf / -Dframework=spring 选择生成哪套接口风格 项目使用 CXF 或 Spring MVC 时切换
-Dcompany=\"...\" 给生成文件拼接版权头 公司内部项目需要统一版权声明
-Dforce=true 目标文件已存在时先备份再覆盖 你确认要用新生成结果覆盖旧文件
-Danalyze=true 只分析,不生成代码 想在 CI 里先做规则校验
-DautoFix=true 自动修复 YAML 并回写,然后退出 想批量修复规则问题,不立即生成代码

补充说明:

  • 默认 force=false,如果目标文件已存在,插件会跳过写入
  • force=true 时,插件会先生成 .bak 备份,再覆盖原文件
  • analyze=true 时只输出规则分析结果,不进入代码生成
  • autoFix=true 时会直接回写 YAML,不继续进入代码生成

校验规则

系统会自动检测字段并添加校验规则:

路径规范

场景 规则 DFX代码
路径包含 // 删除重复斜杠 DFX-001
路径不以 / 开头 自动添加前缀 DFX-002

参数校验

场景 规则 DFX代码
必填字段缺少 @NotNull required=true → 需手动确认 DFX-003
String 必填使用 @NotBlank required=true 且 type=String → 需手动确认 DFX-003
page/pageNum 分页参数 min: 1, max: 2147483647 DFX-011
pageSize/limit/size min: 1, max: 100 DFX-012
路径参数(数值) min: 1 DFX-014
路径参数(字符串) minLength: 1 DFX-014

字段校验

场景 规则 DFX代码
String 字段缺少长度校验 minLength: 1, maxLength: 255 DFX-004
邮箱字段缺少格式校验 format: email DFX-005
电话字段缺少正则校验 包含 phone/mobile DFX-006
数值字段缺少范围 Integer/Long/Double DFX-007
List 字段缺少大小 minSize: 1, maxSize: 100 DFX-008

校验规则

场景 规则 DFX代码
minLength 超过 maxLength 报错 DFX-009
min 超过 max 报错 DFX-010
minSize 超过 maxSize 报错 DFX-011

接口规范

场景 规则 DFX代码
缺少 operationId 自动生成 DFX-012
缺少成功响应 2xx 警告 DFX-013
缺少 API 名称 报错 DFX-015
缺少 API 路径 报错 DFX-016
缺少 HTTP 方法 报错 DFX-017

YAML 语法

场景 规则 DFX代码
重复的键 报错 DFX-018
YAML 格式错误 报错 DFX-019

支持的参数类型

代码生成支持以下参数类型注解:

参数位置 注解 说明
路径参数 @PathParam URL 路径中的参数
查询参数 @QueryParam URL 查询字符串参数
请求头 @HeaderParam HTTP 请求头参数
Cookie @CookieParam Cookie 参数
请求体 @RequestBody JSON 请求体

生成的 Controller 方法示例:

@GET
@Path("/users/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response getUserById(
    @NotNull @Min(1) @PathParam("id") Integer id,
    @NotBlank @Size(min=1, max=255) @HeaderParam("X-Token") String xToken,
    @Size(min=1, max=64) @CookieParam("JSESSIONID") String jsessionid) {
    // TODO: 实现业务逻辑
    return null;
}

示例文件

  • api.yaml - Java CLI 启动用的最小可生成示例
  • swagger2-example.yaml - Swagger 2.0 校验分析演示示例(故意包含规则问题)
  • openapi3-example.yaml - OpenAPI 3.0 校验分析演示示例(故意包含规则问题)
  • api-example.yaml - DFX 校验分析演示示例(故意包含规则问题,不作为启动生成输入)
  • docs/annotation-example.md - 自定义注解完整示例(YAML→Java 代码对照)
  • web-ui/demo-swagger.html - Swagger 演示入口
  • web-ui/demo-autofix.html - 自动修复演示入口
  • web-ui/demo-path-error.html - 路径错误演示入口
  • web-ui/demo-comprehensive.html - 综合演示入口

测试

./mvnw test

# 仅运行 core 相关测试
./mvnw -pl api-codegen-core test

# Web UI bridge / diff / render 回归
cd web-ui && npm run test:ci

# Web UI E2E(Playwright)
cd web-ui && npm run test:e2e

测试要求

核心原则:api-codegen-core 为单一业务来源

所有分析、修复、格式收敛逻辑都必须在 api-codegen-core 实现。Web UI、IDEA 插件、浏览器插件和 Maven 插件只做交互、集成与展示。

BDD 格式:所有测试使用 Given-When-Then 结构,确保可读性。

覆盖率要求

  • 所有场景覆盖(每个 DFX 规则都有测试)
  • 所有分支覆盖(if/else 都要覆盖 true/false)
  • 边界条件覆盖(min/max 边界值)
  • 正向+反向测试(合法和非法输入)

重要:不根据参数名推断类型,保留用户原始定义。

端到端测试场景

# Web UI bridge / diff / render 回归
cd web-ui && npm run test:ci

# E2E 测试
cd web-ui && npm run test:e2e

测试覆盖的 DFX 规则

DFX 规则 测试场景
路径规范
DFX-001 路径包含 // → 自动删除重复斜杠
DFX-002 路径不以 / 开头 → 自动添加前缀
参数校验
DFX-003 必填参数缺少 @NotNull → 需手动确认添加
DFX-011 page 参数缺少范围 → 自动添加 min:1, max:2147483647
DFX-012 pageSize 参数缺少范围 → 自动添加 min:1, max:100
DFX-014 路径参数缺少校验 → 自动添加 min:1minLength:1
字段校验
DFX-004 String 字段缺少长度校验 → 自动添加 @Size
DFX-005 email 字段缺少格式校验 → 自动添加 @Email
DFX-006 phone 字段缺少正则校验 → 自动添加 pattern
DFX-007 数值字段缺少范围校验 → 自动添加 @Min/@Max
DFX-008 List 字段缺少大小校验 → 自动添加 @Size

架构分层

┌─────────────────────────────────────┐
│ Web UI / IDEA 插件 / 浏览器插件      │
└──────────────┬──────────────────────┘
               │ bridge contract / 调用
┌──────────────▼──────────────────────┐
│       api-codegen-core (核心库)      │ ← 校验 / 修复 / 转换 / 生成
└──────────────┬──────────────────────┘
               │ 集成
┌──────────────▼──────────────────────┐
│      Maven 插件 / CLI / 其他宿主      │
└─────────────────────────────────────┘

License

Apache-2.0

About

API Code Generator - Generate Java API code from YAML definitions

Resources

License

Stars

3 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors