Name Last Update
..
example Loading commit data...
README.md Loading commit data...

OpenAPI 文档目录

本目录用于存放 OpenAPI 规范的接口文档,这些文档将自动转换为前端 API 调用代码。

快速开始

1. 创建新接口文档

# 创建模块目录
mkdir -p docs/openAPI/yourModule

# 复制模板
cp .claude/custom_skills/api-generator/templates/openAPI-template.md \
   docs/openAPI/yourModule/yourApiName.md

2. 编辑 OpenAPI 文档

按照 OpenAPI 3.0.1 规范编辑 YAML 代码块。

3. 生成 API 代码

yarn api:generate

生成的代码将保存在 src/api/ 目录。

4. 使用生成的 API

import { yourApiNameAPI } from '@/api/yourModule'

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

目录结构

docs/openAPI/
├── example/              # 示例模块
│   └── getExample.md     # 示例接口
├── user/                 # 用户模块(你的模块)
│   ├── getUserInfo.md    # 获取用户信息
│   └── editUserInfo.md   # 编辑用户信息
├── course/               # 课程模块(你的模块)
│   ├── getList.md        # 获取课程列表
│   └── getDetail.md      # 获取课程详情
└── order/                # 订单模块(你的模块)
    └── getList.md        # 获取订单列表

重要规则

  • 第一级目录 = 模块名(会生成 模块名.js 文件)
  • 第二级文件 = 接口名(会生成 接口名API 函数)

命令速查

# 生成 API 代码
yarn api:generate

# 对比 API 变更
yarn api:diff docs/openAPI/user/ docs/openAPI/user-new/

# 查看完整文档
cat .claude/custom_skills/api-generator/skill.md

OpenAPI 文档规范

基本结构

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

# 接口名称

## OpenAPI Specification

```yaml
openapi: 3.0.1
info:
  title: ''
  version: 1.0.0
paths:
  /srv/:
    get: # 或 post
      summary: 接口简介
      parameters: # GET 请求参数
        - 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

响应结构示例

responses:
  '200':
    content:
      application/json:
        schema:
          type: object
          properties:
            code:
              type: integer
              description: 0=失败,1=成功
            data:
              type: object
              properties:
                user:
                  type: object
                  properties:
                    id:
                      type: integer

生成的代码示例

输入:docs/openAPI/user/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; // 状态码
 *   msg: string; // 消息
 *   data: any;
 * }>}
 */
export const getUserInfoAPI = params => fn(fetch.get(Api.GetUserInfo, params))

变更检测

每次运行 yarn api:generate 时会自动:

  1. 备份当前文档到 /.tmp/openAPI-backup
  2. 与上次版本对比(保存在 /.tmp/openAPI-temp
  3. 生成变更报告

变更报告示例

🔍 开始检测 API 变更...

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

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

✅ 新增接口 (1):
  + getUserProfile

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

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

注意事项

  • 所有 .md 文件必须包含 YAML 代码块
  • 遵循 OpenAPI 3.0.1 规范编写 YAML
  • 文件名使用小写字母和数字,多个单词用下划线分隔
  • 参数 af 会被自动过滤,不会在 JSDoc 中显示
  • 生成的代码会自动使用项目的 src/api/fn.js 中的 fnfetch

参考文档

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

示例

查看 example/getExample.md 了解完整的文档编写示例。