API_GENERATOR_GUIDE.md 7.03 KB

API Generator - 自动生成 API 接口代码

完整的 API 文档自动生成解决方案,从 OpenAPI 规范到前端 API 调用代码。

🚀 快速开始

安装依赖

yarn add -D js-yaml

创建第一个接口文档

# 1. 创建模块目录
mkdir -p docs/openAPI/user

# 2. 复制模板
cp .claude/custom_skills/api-generator/templates/openAPI-template.md \
   docs/openAPI/user/getUserInfo.md

# 3. 编辑文档(按照模板填写)

# 4. 生成代码
yarn api:generate

生成的代码:src/api/user.js

import { getUserInfoAPI } from '@/api/user'

const { code, data } = await getUserInfoAPI({ id: 123 })
if (code === 1) {
  console.log(data)
}

📚 核心功能

1. 自动生成 API 代码

从 OpenAPI YAML 文档生成标准的 API 调用函数:

  • API 常量 - 帕斯卡命名(GetUserInfo
  • API 函数 - 驼峰命名 + API 后缀(getUserInfoAPI
  • 完整 JSDoc - 参数类型、返回值结构、嵌套对象说明

2. 智能变更检测

自动对比 API 变更,识别破坏性变更:

  • ✅ 新增接口
  • ⚠️ 参数变更(破坏性/非破坏性)
  • ❌ 删除接口

3. 增量更新机制

  • 首次运行建立基线
  • 后续运行自动对比
  • 生成详细变更报告

📁 目录结构

docs/openAPI/              # OpenAPI 文档目录
├── example/               # 示例模块
│   └── getExample.md      # 示例接口
├── user/                  # 用户模块
│   ├── getUserInfo.md     # 获取用户信息
│   └── editUserInfo.md    # 编辑用户信息
└── README.md              # 本文档

.claude/custom_skills/api-generator/  # Skill 目录
├── skill.md               # Skill 主文档
├── scripts/               # 生成脚本
│   ├── generateApiFromOpenAPI.cjs
│   └── apiDiff.cjs
├── templates/             # 文档模板
│   └── openAPI-template.md
└── setup/                 # 安装脚本
    └── install.sh

📝 OpenAPI 文档规范

基本结构

每个 .md 文件必须包含 YAML 代码块:

# 接口名称

## OpenAPI Specification

```yaml
openapi: 3.0.1
info:
  title: ''
  version: 1.0.0
paths:
  /srv/:
    get:
      summary: 接口简介
      parameters:
        - name: a
          in: query
          example: action_name
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  data:
                    type: any

### GET 请求示例

```yaml
paths:
  /srv/:
    get:
      summary: 获取课程列表
      parameters:
        - name: a
          in: query
          example: course_list
        - name: page
          in: query
          description: 页码
          required: true
          schema:
            type: integer

POST 请求示例

paths:
  /srv/:
    post:
      summary: 创建订单
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                course_id:
                  type: integer

🎯 命令使用

生成 API 代码

# 使用 yarn
yarn api:generate

# 或直接运行
node .claude/custom_skills/api-generator/scripts/generateApiFromOpenAPI.cjs

对比 API 变更

# 对比两个目录
yarn api:diff docs/openAPI/user/ docs/openAPI/user-new/

# 对比两个文件
yarn api:diff docs/openAPI/user/getInfo.md docs/openAPI/user/getInfo-v2.md

# 输出 JSON 格式
API_DIFF_FORMAT=json yarn api:diff ...

📊 生成示例

输入文档:getUserInfo.md

paths:
  /srv/:
    get:
      summary: 获取用户信息
      parameters:
        - name: a
          example: user_info
        - name: id
          description: 用户ID
          required: true

输出代码:src/api/user.js

import { fn, fetch } from '@/api/fn'

const Api = {
  GetUserInfo: '/srv/?a=user_info',
}

/**
 * @description: 获取用户信息
 * @param {Object} params 请求参数
 * @param {integer} params.id 用户ID
 * @returns {Promise<{code:number,data:any,msg:string}>}
 */
export const getUserInfoAPI = params => fn(fetch.get(Api.GetUserInfo, params))

🔄 变更检测示例

yarn api:generate

输出报告

🔍 开始检测 API 变更...

=== API 变更检测报告 ===

📦 对比范围: 5 个旧接口 → 6 个新接口
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✅ 新增接口 (1):
  + getUserProfile

⚠️  修改接口 (1):
  ↪ editUserInfo
    ✗ [破坏性] 删除必填参数: sms_code
    ✓ [非破坏性] 新增可选参数: avatar

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
总计: 1 新增, 1 修改, 0 删除
⚠️  检测到 1 个破坏性变更,请仔细检查业务逻辑!

💡 最佳实践

1. 文档命名

  • 模块目录:小写,下划线分隔(user_profile
  • 接口文件:小写,动词开头(getUserInfo.md

2. 接口分组

  • 按业务模块分组(user, course, order
  • 避免单个模块过大(< 20 个接口)
  • 相关接口放在同一模块

3. 版本管理

  • docs/openAPI/ 纳入版本控制
  • src/api/*.js 也纳入版本控制
  • 保留变更历史,方便回滚

4. 团队协作

  • 前后端共同维护 OpenAPI 文档
  • 接口变更前先更新文档
  • 使用变更报告评估影响
  • 破坏性变更必须通知团队

🛠️ 跨项目使用

方法 1:复制 Skill

# 复制到其他项目
cp -r .claude/custom_skills/api-generator /other/project/.claude/custom_skills/

# 安装依赖
cd /other/project
yarn add -D js-yaml

# 添加脚本(手动编辑 package.json)

方法 2:使用安装脚本

bash .claude/custom_skills/api-generator/setup/install.sh

❓ 常见问题

Q: 生成代码后报错找不到模块?

A: 检查以下几点:

  1. src/api/fn.js 存在且导出 fnfetch
  2. 路径别名 @/ 正确配置
  3. 生成的文件在 src/api/ 目录下

Q: 如何处理需要认证的接口?

A: 生成的代码会自动使用 src/utils/axios.js 中的拦截器,自动添加认证头。

Q: 生成的函数名不符合预期?

A: 文件名使用小写字母和数字,多个单词用下划线分隔,避免特殊字符。

Q: 变更检测不准确?

A: 清理备份重新建立基线:

rm -rf .tmp/openAPI-*
yarn api:generate

📖 完整文档

详细使用说明请参考:API Generator Skill 文档

🔗 相关资源