用 AI 辅助接口设计与联调:从模糊需求到 OpenAPI、Mock 和测试用例
在实际开发中,接口联调经常不是卡在代码难写,而是卡在“需求描述不够清楚”。产品文档里写着“用户可以查询订单列表,支持按状态筛选”,但到了开发阶段,前端会问:分页字段叫什么?订单状态有哪些枚举?时间格式是时间戳还是字符串?空列表怎么返回?后端会问:是否需要按租户隔离?已取消订单是否展示?接口失败码怎么定义?
这类问题如果等到前后端联调时才暴露,往往会造成返工。本文以一个 CSDN 上常见的 Web 项目场景为例,介绍如何使用 ChatGPT、Claude、Gemini、DeepSeek 等 AI 大模型,辅助完成需求澄清、接口设计、OpenAPI 文档生成、Mock 数据构造和测试用例补全。重点不是让 AI 替代开发,而是把它放进研发流程中,帮助我们把模糊输入整理成可评审、可验证的交付物。
一、场景背景:一个“订单列表接口”为什么容易返工
假设我们正在开发一个后台管理系统,产品需求描述如下:
运营人员可以查看订单列表,支持按订单状态、下单时间、手机号搜索,列表展示订单号、用户昵称、订单金额、支付状态、创建时间。
这段需求看起来不复杂,但真正落到接口设计时,会出现很多隐藏问题:
- 订单状态和支付状态是不是同一个字段?
- 手机号搜索是精确匹配还是模糊匹配?
- 时间范围是否包含起止边界?
- 金额单位是元还是分?
- 分页从
page=1开始还是从offset=0开始? - 空数据返回
[]还是null? - 是否需要返回订单总数?
- 用户昵称为空时怎么展示?
- 接口错误码如何定义?
- 前端 Mock 数据如何保持和接口文档一致?
这些问题很适合让 AI 先帮我们整理成“需求澄清清单”和“接口草案”,再由产品、前端、后端一起确认。
二、第一步:让 AI 把口语需求转成澄清问题
不要直接让 AI “生成接口”,更好的做法是先让它识别不确定点。
Prompt 示例:需求澄清
text
你是一名后端接口设计助手。下面是一段产品需求:
运营人员可以查看订单列表,支持按订单状态、下单时间、手机号搜索,列表展示订单号、用户昵称、订单金额、支付状态、创建时间。
请你输出:1. 需要向产品确认的问题;2. 需要向前端确认的问题;3. 需要后端自行确认的技术问题;4. 按优先级排序。
要求:- 不要直接生成接口;- 问题要具体;- 用表格输出;- 重点关注分页、筛选条件、字段类型、枚举、异常情况。
AI 通常会输出类似内容:
| 角色 | 问题 | 为什么要确认 | 优先级 |
|---|---|---|---|
| 产品 | 订单状态有哪些枚举? | 影响筛选条件和返回字段 | 高 |
| 产品 | 手机号搜索是否精确匹配? | 影响 SQL 和索引设计 | 高 |
| 前端 | 分页参数命名习惯是什么? | 避免联调字段不一致 | 中 |
| 后端 | 金额是否统一用分存储和返回? | 避免浮点精度问题 | 高 |
| 后端 | 是否需要租户或权限过滤? | 涉及数据安全 | 高 |
这一步的价值在于:AI 不急着给答案,而是帮我们把需求中的灰色地带暴露出来。
三、第二步:生成接口草案,而不是最终接口
在需求问题确认后,可以让 AI 生成一个 RESTful 接口草案。这里建议明确技术约束,比如 Java Spring Boot、前端使用 TypeScript、文档使用 OpenAPI。
Prompt 示例:接口设计
text
请基于以下已确认规则,设计一个订单列表查询接口。
技术背景:- 后端:Java Spring Boot- 前端:Vue3 + TypeScript- 接口风格:RESTful- 文档格式:OpenAPI 3.0
业务规则:- 查询订单列表;- 支持 page、pageSize 分页;- 支持 orderStatus、payStatus、mobile、createdStart、createdEnd 筛选;- 金额统一用分返回;- 创建时间使用 ISO 8601 字符串;- 返回 total 和 list;- 空列表返回空数组;- 手机号精确匹配;- page 从 1 开始。
请输出:1. 接口路径和方法;2. 请求参数;3. 响应字段;4. 错误码;5. OpenAPI YAML 示例。
AI 可能会给出这样的接口设计:
yaml
openapi: 3.0.3info: title: Order Admin API version: 1.0.0
paths: /api/admin/orders: get: summary: 查询订单列表 parameters: - name: page in: query required: true schema: type: integer minimum: 1 description: 页码,从 1 开始 - name: pageSize in: query required: true schema: type: integer minimum: 1 maximum: 100 description: 每页数量 - name: orderStatus in: query required: false schema: type: string enum: [CREATED, PAID, CANCELED, FINISHED] - name: payStatus in: query required: false schema: type: string enum: [UNPAID, PAID, REFUNDED] - name: mobile in: query required: false schema: type: string description: 用户手机号,精确匹配 - name: createdStart in: query required: false schema: type: string format: date-time - name: createdEnd in: query required: false schema: type: string format: date-time responses: "200": description: 查询成功 content: application/json: schema: $ref: "#/components/schemas/OrderPageResponse"
components: schemas: OrderPageResponse: type: object properties: code: type: string example: "0" message: type: string example: "success" data: type: object properties: total: type: integer example: 128 list: type: array items: $ref: "#/components/schemas/OrderItem"
OrderItem: type: object properties: orderNo: type: string example: "OD202606210001" userNickname: type: string example: "张三" amount: type: integer example: 129900 description: 订单金额,单位为分 orderStatus: type: string example: "PAID" payStatus: type: string example: "PAID" createdAt: type: string format: date-time example: "2026-06-21T10:30:00+08:00"
注意,这还不是最终文档。开发者需要继续检查枚举是否符合业务、字段命名是否符合团队规范、响应结构是否和已有项目一致。
四、第三步:让 AI 生成 DTO 和 Controller 草稿
接口确认后,可以让 AI 生成 Java 代码草稿。这里依旧要强调:AI 生成的是起点,不是可直接上线的成品。
java
@Datapublic class OrderQueryRequest {
@Min(1) private Integer page = 1;
@Min(1) @Max(100) private Integer pageSize = 20;
private String orderStatus;
private String payStatus;
private String mobile;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) private LocalDateTime createdStart;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) private LocalDateTime createdEnd;}
Controller 示例:
java
@RestController@RequestMapping("/api/admin/orders")public class AdminOrderController {
private final OrderQueryService orderQueryService;
public AdminOrderController(OrderQueryService orderQueryService) { this.orderQueryService = orderQueryService; }
@GetMapping public ApiResponse<PageResult<OrderItemVO>> listOrders( @Valid OrderQueryRequest request ) { PageResult<OrderItemVO> result = orderQueryService.queryOrders(request); return ApiResponse.success(result); }}
Service 层伪代码:
java
public PageResult<OrderItemVO> queryOrders(OrderQueryRequest request) { validateTimeRange(request.getCreatedStart(), request.getCreatedEnd());
// 1. 校验枚举值 // 2. 构造查询条件 // 3. 执行分页查询 // 4. 转换金额、时间、状态字段 // 5. 返回 total + list}
这里有几个需要人工补充的点:
- 枚举校验最好不要只用字符串;
- 手机号查询是否需要脱敏;
- 后台接口是否需要权限注解;
- SQL 是否命中索引;
- 时间范围是否需要限制最大跨度;
- 查询结果是否包含敏感字段。
五、第四步:用 AI 辅助生成 Mock 数据
前后端并行开发时,Mock 数据很关键。可以把接口文档发给 AI,让它生成覆盖多种状态的数据。
Prompt 示例:Mock 数据
text
请根据下面的订单列表接口,生成 8 条前端 Mock 数据。
要求:- 覆盖 CREATED、PAID、CANCELED、FINISHED 状态;- 覆盖 UNPAID、PAID、REFUNDED 支付状态;- amount 单位为分;- createdAt 使用 ISO 8601;- 包含一个 userNickname 为空字符串的情况;- 输出 JSON。
示例输出:
json
{ "code": "0", "message": "success", "data": { "total": 8, "list": [ { "orderNo": "OD202606210001", "userNickname": "张三", "amount": 129900, "orderStatus": "PAID", "payStatus": "PAID", "createdAt": "2026-06-21T10:30:00+08:00" }, { "orderNo": "OD202606210002", "userNickname": "", "amount": 9900, "orderStatus": "CREATED", "payStatus": "UNPAID", "createdAt": "2026-06-21T11:00:00+08:00" } ] }}
Mock 数据不只是为了让页面“有东西显示”,还应该覆盖异常和边界:
- 空列表;
- 最大金额;
- 昵称为空;
- 状态组合异常;
- 时间跨天;
- pageSize 较大;
- total 为 0;
- 返回错误码。
六、第五步:让 AI 补全测试用例
接口设计完成后,最容易遗漏的是测试用例。可以让 AI 根据接口规则生成测试矩阵。
Prompt 示例:测试用例生成
text
请为订单列表查询接口生成测试用例。
接口规则:- GET /api/admin/orders- page 从 1 开始;- pageSize 最大 100;- 支持 orderStatus、payStatus、mobile、createdStart、createdEnd;- 手机号精确匹配;- 金额单位为分;- 空列表返回 [];- createdStart 不能晚于 createdEnd。
请输出:1. 正常用例;2. 异常用例;3. 边界用例;4. 权限用例;5. 每条用例的预期结果。
可以整理成如下表格:
| 类型 | 输入 | 预期结果 |
|---|---|---|
| 正常 | page=1&pageSize=20 |
返回订单列表和 total |
| 正常 | orderStatus=PAID |
只返回已支付订单 |
| 正常 | mobile=13800000000 |
精确匹配手机号 |
| 边界 | page=1&pageSize=100 |
正常返回 |
| 异常 | page=0 |
返回参数错误 |
| 异常 | pageSize=101 |
返回参数错误 |
| 异常 | createdStart > createdEnd |
返回参数错误 |
| 权限 | 未登录访问 | 返回未认证 |
| 权限 | 无订单查看权限 | 返回无权限 |
这类测试清单可以直接转成接口自动化测试脚本,也可以作为后端自测和前端联调 Checklist。
七、不同模型适合放在哪些环节
在接口设计和联调场景里,不同模型的优势不完全一样:
| 模型 | 适合任务 | 使用建议 |
|---|---|---|
| ChatGPT | 需求拆解、接口草案、代码草稿 | 适合从模糊描述开始整理结构 |
| Claude | 长 PRD 理解、文档一致性检查 | 适合处理较长需求和复杂业务规则 |
| Gemini | 表格化整理、多源资料归纳 | 适合生成测试矩阵、字段对照表 |
| DeepSeek | 中文技术问答、代码解释、推理分析 | 适合分析 Java 代码、SQL 条件和中文文档 |
| Grok | 快速发散思路 | 适合补充遗漏场景和边界条件 |
实际使用时,不建议每个小问题都多模型对比。比较合理的方式是:
- 普通接口草案用一个模型快速生成;
- 关键业务规则用另一个模型复核;
- OpenAPI、DTO、测试用例之间做一致性检查;
- 最终由开发、测试、产品共同确认。
八、AI 输出如何验证
AI 生成的接口、代码和测试用例必须经过验证。可以从以下几个角度检查:
1. 与业务规则对齐
确认字段是否来自真实需求,不要让 AI 自行添加未确认的业务字段。例如 AI 可能会生成 discountAmount、couponId,但需求里并没有这些内容。
2. 与团队规范对齐
检查路径命名、响应结构、错误码、分页格式是否符合已有项目规范。不要在同一个系统里出现多套分页风格。
3. 与类型系统对齐
前端 TypeScript 类型、后端 Java DTO、OpenAPI schema 应保持一致。可以让 AI 帮忙生成对照表,但最终要由代码生成工具或编译检查验证。
4. 与数据库查询对齐
接口支持的筛选条件要考虑索引。例如手机号精确匹配通常可以走索引,但时间范围叠加状态筛选时,需要结合实际数据量评估。
5. 与测试结果对齐
用 Postman、Apifox、curl 或自动化测试实际请求接口,验证响应结构、错误码和边界条件。
示例 curl:
bash
curl "http://localhost:8080/api/admin/orders?page=1&pageSize=20&orderStatus=PAID"
九、多模型工具的判断标准
如果团队希望把多模型能力纳入研发流程,可以从以下方面判断工具是否适合:
-
是否方便复用 Prompt
接口设计、测试用例、文档整理都适合沉淀模板。 -
是否支持同一问题多模型对比
对关键需求、复杂边界和测试清单,多模型对比可以发现遗漏。 -
是否便于保留上下文
从需求到 OpenAPI,再到 DTO 和测试用例,需要连续上下文。 -
是否支持结构化输出
表格、JSON、YAML、Markdown 对开发者更友好。 -
是否方便人工校对
AI 输出必须能被复制、评审、修改,而不是只停留在聊天结果里。
十、风险边界:这些事情不要直接交给 AI
AI 可以辅助接口设计,但不能替代研发判断:
- 不要把未脱敏的公司代码、日志、用户数据直接输入模型;
- 不要让 AI 自行决定权限规则;
- 不要让 AI 自行编造业务枚举;
- 不要直接上线 AI 生成的 SQL;
- 不要忽略接口兼容性;
- 不要让 AI 替代产品评审和测试验收;
- 不要把“看起来完整”的 OpenAPI 当成最终事实。
在真实项目中,AI 适合做“草稿生成器、检查清单助手、边界条件提醒器”,最终决策仍然要回到业务规则、代码规范和测试结果。
FAQ:常见误区
1. AI 生成的接口文档能直接给前端用吗?
不建议直接使用。可以先作为草案,再经过产品、前端、后端共同确认。尤其是字段含义、枚举、错误码、权限规则,必须人工确认。
2. 单一模型够不够?
普通接口草案通常够用。但涉及复杂业务规则、长 PRD、权限模型或关键测试用例时,建议用另一个模型交叉检查,减少遗漏。
3. Prompt 怎么写更稳定?
尽量明确角色、背景、输入、输出格式和约束。例如指定“输出 OpenAPI 3.0 YAML”“分页从 1 开始”“金额单位为分”“不要添加需求中没有的字段”。
4. 如何避免 AI 编造字段或接口?
在 Prompt 中明确要求“只能基于已给需求生成,不确定项列为待确认问题”。生成后再逐字段 Review,不确认的字段不要进入正式文档。
5. 测试用例生成后还要做什么?
要把测试用例转成可执行检查,比如单元测试、接口自动化测试或联调用例。AI 生成的是清单,真正可信的是执行结果。
总结
把 AI 用进接口设计和联调流程,比较稳妥的方式不是让它“一次生成最终方案”,而是分阶段使用:
- 先让 AI 从模糊需求中提炼澄清问题;
- 再生成接口草案和 OpenAPI 文档;
- 根据接口文档生成 DTO、Mock 数据和测试用例;
- 用人工 Review、代码规范、接口测试和数据库验证逐项确认;
- 对重要业务规则使用多模型交叉验证,但不把 AI 当最终决策者。
对于开发者来说,真正有价值的不是某一次回答,而是形成一套可复用的工作流:输入清楚、输出结构化、评审有依据、测试能验证。这样 AI 才能稳定地融入研发过程,而不是成为新的不确定因素。
更多推荐



所有评论(0)