write-api
根据用户需求搜索 YAPI 接口,自动定位目标文件,生成风格一致的前端 API 方法。
执行流程
所有 YAPI 接口请求 Header 中 ShortName 的值为当前操作系统用户名。
第一步:解析用户意图
判断用户输入类型:
- 包含 YAPI ID(纯数字或明确提及 ID)→ 跳到第二步"获取详情"
- 自然语言描述(如"截图队列接口"、"用户列表API")→ 提取关键词,进入搜索流程
第二步:调用 YAPI 接口
2a. 搜索接口(关键词模式)
关键词若含中文,需先 URL 编码(如 截图 → %E6%88%AA%E5%9B%BE):
curl -s -H "ShortName: {动态用户名}" "https://hicode.hikvision.com/gateway/front-platform-system/yapi/projectInfo?keyword={URL编码后的关键词}"
从响应 data.interface[] 中提取匹配项:
- 仅一条结果 → 直接使用,无需用户选择。
- 多条结果 → 展示编号列表,等用户选择(可多选,逗号分隔):
找到以下匹配接口,请选择(输入序号,多个用逗号分隔): 1. 屏幕截图队列(发送) - ID: 1590163 2. 屏幕截图队列(接收) - ID: 1590173 - 无结果 → 提示用户换关键词重试。
2b. 获取接口详情
curl -s -H "ShortName: {动态用户名}" "https://hicode.hikvision.com/gateway/front-platform-system/yapi/info?id={_id}"
响应结构和类型定义详见 reference.md。
第三步:定位目标文件
按优先级逐级判断,命中即停:
- 用户已指定文件路径 → 直接使用
- 当前打开的文件是 API 文件 → 直接使用
判断条件:文件内容含import引入request/axios,或含export的请求方法调用 - 自动扫描项目:
- 搜索src/api/**/*.{ts,js}和src/services/**/*.{ts,js}
- 搜索含import.*request或import.*axios的文件
- 列出候选文件让用户确认 - 以上均无结果 → 请用户指定文件路径或打开目标文件
第四步:生成代码并插入
-
读取目标文件,分析现有代码风格:
- 缩进风格(空格数 / 制表符)
- 引号类型(单引号 / 双引号)
- 分号使用习惯
- 命名风格(驼峰 / 其他)
- 导入语句格式
- 不分析注释格式(注释固定使用 JSDoc,见下方规范) -
根据接口详情生成 API 方法,规则:
- 方法名:根据接口路径 + 请求方法生成驼峰命名(如GET /user/list→getUserList)
- 注释:固定 JSDoc 格式,见下方"注释规范"
- GET 参数:逐一列为函数参数,通过{ params: { ... } }传递
- POST/PUT 参数:从req_body_other(JSON Schema)解析字段,生成内联类型(非Record<string, any>)
- 路径参数:使用模板字符串`/api/user/${id}` -
插入到文件末尾,代码风格与现有代码一致。
注释规范(固定 JSDoc,不随目标文件风格变化)
/**
* {接口标题}
* @param {参数名} {参数描述}(必填/可选)
* @see http://yapi.hikvision.com/project/{project_id}/interface/api/{_id}
*/
规则:
- 第一行固定为接口标题,取 title 字段
- 每个参数单独一行 @param,描述取字段的 desc,末尾标注(必填)或(可选)
- 参数来源:req_query / req_params / req_body_form / req_body_other 中的字段
- POST/PUT 的 data 参数:用缩进子行列出每个字段及其描述和必填标识
- 若接口无参数,省略 @param 行
- 最后一行固定为 @see 链接,project_id 和 _id 均从接口详情中取
使用示例
以下方式均可触发:
"帮我加一个截图队列的接口""写一个用户列表的API方法""yapi 1590163 这个接口帮我生成一下""把订单查询接口加到当前文件""write-api ids=123,456"(兼容旧模式,多个ID逗号分隔)
补充说明
- 支持一次处理多个接口(多个ID或搜索后选择多个)
- 生成代码前检查目标文件中是否已存在同路径的接口方法,避免重复
- 代码生成模板、类型定义和 YAPI 响应结构详见 reference.md