开学特惠 会员低至4.4折 限时加赠 10000 AI积分 立即前往 arrow

AI生成接口Mock:按契约模拟成功与异常

文章目录
免费使用墨刀
更新时间: 2026年10月10日

AI生成接口Mock,应先读取接口契约,再为正常、空数据和失败等场景返回明确的状态码、响应头与响应体。只有一份JSON样本,还无法验证前端在请求失败、方法错误或数据为空时会怎样表现。

把接口文档、类型定义和页面请求代码放在本地项目中,可以用墨刀AI客户端协助整理Mock规则与文件。先确定模拟范围,再生成可运行服务;不需要为了演示界面去连接真实客户数据或线上接口。

工单接口Mock的正常、空列表和失败响应场景
同一条接口需要覆盖不同结果,页面联调才不止有一条成功路径。

先写一份小而一致的接口约定

本例是工单列表接口GET /tickets。成功响应包含items和total,每条工单包含字符串编号、标题和状态。空列表仍返回200,只是数组为空;服务失败返回503和明确的错误码。

场景HTTP状态响应约定页面要验证
success200一条open工单,total为1正常列表与字段展示
empty200items为空,total为0空数据说明和下一步
error503code与message错误提示、重试和原条件保留

这里的scenario查询参数只用于本地切换情境,不是正式接口必须提供的业务字段。把这一点写清,可以避免前端将模拟控制参数带到生产请求中。接口若本来已有错误格式,应沿用现有约定,不让AI凭空发明另一套。

保存并启动一个无需第三方包的服务

将下面内容保存为mock-server.mjs,安装Node.js后在该文件目录执行node mock-server.mjs。本例在Node.js v24.14.0验证,使用Node.js内置HTTP模块接收请求并返回JSON;只监听本机地址。

import http from 'node:http';

const fixtures = {
  success: { status: 200, body: { items: [{ id: 'T-1', title: '检查导出结果', status: 'open' }], total: 1 } },
  empty: { status: 200, body: { items: [], total: 0 } },
  error: { status: 503, body: { code: 'TEMPORARILY_UNAVAILABLE', message: '服务暂时不可用' } }
};
const server = http.createServer((req, res) => {
  const url = new URL(req.url, 'http://127.0.0.1');
  const send = (status, body) => {
    res.writeHead(status, { 'Content-Type': 'application/json; charset=utf-8', 'Cache-Control': 'no-store' });
    res.end(JSON.stringify(body));
  };
  if (url.pathname !== '/tickets') return send(404, { code: 'NOT_FOUND' });
  if (req.method !== 'GET') {
    res.setHeader('Allow', 'GET');
    return send(405, { code: 'METHOD_NOT_ALLOWED' });
  }
  const scenario = url.searchParams.get('scenario') ?? 'success';
  if (!Object.hasOwn(fixtures, scenario)) return send(400, { code: 'UNKNOWN_SCENARIO' });
  const fixture = fixtures[scenario];
  send(fixture.status, fixture.body);
});
server.listen(Number(process.env.PORT ?? 8787), '127.0.0.1', () => {
  console.log(`Mock: http://127.0.0.1:${server.address().port}/tickets`);
});

启动后终端显示http://127.0.0.1:8787/tickets。若8787已被占用,可以先关闭自己的旧实例,或通过PORT环境变量选择其他可用端口。结束当前练习时,在运行服务的终端按Ctrl+C。

分别调用三个场景,看状态与内容是否一致

curl -i "http://127.0.0.1:8787/tickets"
curl -i "http://127.0.0.1:8787/tickets?scenario=empty"
curl -i "http://127.0.0.1:8787/tickets?scenario=error"

Windows PowerShell如果将curl解释成其他命令,可使用curl.exe运行同样参数。第一条应返回200及一条工单,第二条返回200及空数组,第三条返回503和TEMPORARILY_UNAVAILABLE。状态码也属于契约,不能所有情况都返回200,再让前端猜某段文字代表失败。

本例另外处理未知路径404、错误方法405和未知场景400。实际验证已覆盖这六条路径,响应与上述约定一致。它没有实现登录、分页、写入或真实数据库;后续需要哪一项,就应先把相应契约补齐再实现,而不是让Mock默默替正式服务扩功能。

让页面连上Mock时,别把环境区别藏起来

前端可通过开发环境的接口基址或本地代理连接这个服务。若页面与Mock地址不同源,浏览器会涉及跨域规则;本例没有开放任意来源,建议使用项目现有开发代理转发请求,或者只为明确的本地开发来源增加相应配置。

一次只让一个场景生效,便于重现。页面测试503时,确认界面没有把上一次成功列表当成新结果;恢复success后,检查重试是否回到正常内容。测试empty时,空数据提示不应使用“网络错误”的文案。

如果要增加延迟或超时,应明确延迟发生的位置和触发方式,避免把随机等待做成无法稳定复现的默认行为。固定场景能帮助团队讨论一个确定的问题,随机样本则适合另有目的的覆盖测试。

给AI的交付要求要包含运行方法和反例

读取contracts/tickets.md及前端工单请求代码,建立仅用于本地联调的Mock服务。保留字段类型和错误格式,提供success、empty、error三个可选择场景。未知路径、方法和场景要明确返回错误。交付服务文件、启动与停止方法、三条调用命令及对应预期结果;不要调用真实接口,也不要更改正式接口基址。

拿到代码后,先按命令运行,再逐项对照响应。若契约还没整理清楚,可以先完成接口文档与字段定义;若需要更多数据组合,再用可复现测试数据的方法扩充样本。Mock负责行为与返回,数据文件负责具体记录,两者保持分工更容易维护。

正式接口就绪后,对照差异再切换

用相同请求比较正式接口的字段、状态码、错误结构与空值处理。发现差异时判断是文档遗漏、Mock写错还是服务实现变化,不要为了让演示继续通过就随手兼容一切。

保留一张“场景—请求—预期响应—界面表现”的小表,后续改动都能重走这条链。Mock的价值不是让后端看起来已经完成,而是让界面依赖的契约更早变得可讨论、可调用和可验证。

免费在线原型设计工具

内容丰富组件拖拽即用

多人在线编辑实时协作

海量模板素材快速复用

一键分享交付在线评论互动