free-ride-car

api-codegen

3
0
# Install this skill:
npx skills add free-ride-car/fun-skills --skill "api-codegen"

Install specific skill from multi-skill repository

# Description

根据接口 URL 自动查找文档并生成 TypeScript 接口函数代码

# SKILL.md


name: api-codegen
description: 根据接口 URL 自动查找文档并生成 TypeScript 接口函数代码
metadata:
author: zhoujianting
version: "1.0"
allowed-tools:
- Read
- Glob
- Grep
- Write
- Edit
- Bash


API 接口封装技能

根据输入的接口 URL,自动查找对应的接口文档并封装成 TypeScript 接口函数。

触发条件

  • /api-codegen /api/xxx
  • 封装接口 /api/xxx
  • 帮我封装这个接口:/api/xxx

配置

配置项 默认值 说明
文档目录 \\Zengjie\开发共享\智汇\API 可通过 --docs <目录> 指定自定义目录

执行步骤

1. 解析用户输入

从用户输入中提取:
- 接口 URL:例如 /zhihui/geoReport/domainRank
- 文档目录(可选):如果用户指定了目录则使用指定目录,否则使用默认目录 \\Zengjie\开发共享\智汇\API

2. 查找接口文档

在文档目录下查找对应的接口文档:

文档命名规则:
- 取接口 URL 的最后两个路径段,用 - 连接
- 例如:/zhihui/geoReport/domainRankgeoReport-domainRank.md
- 例如:/zhihui/geoReport/getSubProjectListgeoReport-getSubProjectList.md

查找策略(按优先级顺序):
1. 精确匹配文件名:在文档目录下查找 {倒数第二段}-{最后一段}.md
2. 内容匹配:遍历目录下所有 .md 文件,匹配 ## 接口信息 表格中的 接口URL 字段
3. MCP API 文档查找:通过 mcp__API_____read_project_oas_r3ac2t 工具读取 OpenAPI Spec,查找匹配的接口路径

3. 解析接口文档

文档格式遵循 API_DOC_STANDARD.md 规范,从文档中提取:

信息 位置
接口名称 ## 接口信息 表格中的 接口名称
接口描述 ## 接口信息 表格中的 接口描述
请求方式 ## 接口信息 表格中的 请求方式 (GET/POST/PUT/DELETE)
请求参数 ## 请求参数 下的 ### Body(JSON)### Query Parameters 表格
响应数据 ## 响应数据 下的 JSON 示例和 ## 字段说明 表格

4. 生成 TypeScript 接口代码

类型定义规则:
- 复杂嵌套结构定义独立 interface,命名:XxxResult
- 分页响应定义 PageData 接口,包含 recordstotalsizecurrentpages

5. 代码规范

函数命名:
- 前缀 req + 接口名称(驼峰式)
- 例如:domainRankreqGetDomainRank
- 注意:如果接口 URL 的最后一个单词比较简短(如 adddeletegetlistupdate 等常见动词),需要拼接最后两个单词
- 例如:/geo/report/addreqAddReport(add 较短,拼接为 AddReport)
- 例如:/geo/getDomainRankreqGetDomainRank(getDomainRank 较长,直接使用)

请求方式处理:
| 请求方式 | 参数名 | Content-Type |
|----------|--------|--------------|
| GET | params | 无需设置 |
| POST (JSON) | data | ContentTypeEnum.JSON |
| POST (表单) | data | ContentTypeEnum.FORM_URLENCODED |

参数类型映射:
| 文档类型 | TypeScript 类型 |
|----------|-----------------|
| string | string |
| integer | number |
| number | number |
| boolean | boolean |
| array | T[] |
| string[] | string[] |
| object | 定义 interface |

必填/可选处理:
- 文档中 是否必填 → 必填参数
- 文档中 是否必填 → 可选参数(加 ?

6. 导入依赖

确保目标文件顶部有必要的导入:

import { request } from '@/core/service'
import { ContentTypeEnum } from '@/core/service/Axios'

示例

输入: /api-codegen /api/user/list

生成代码:

export interface UserResult {
    /** 用户ID */
    id: string
    /** 用户名 */
    name: string
}

/** 获取用户列表 */
export const reqGetUserList = (data: {
    /** 页码 */
    pageNum?: number
    /** 每页数量 */
    pageSize?: number
}): Promise<{
    success: boolean
    data: UserResult[]
}> => {
    return request.post({
        url: '/api/user/list',
        data
    })
}

错误处理

  • 如果找不到对应的接口文档,提示用户文档不存在,并询问是否手动提供接口信息
  • 如果文档格式不符合规范,尝试智能解析,并提示用户确认

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.