当前位置: 首页 > news >正文

openapi-backend 5 分钟上手:用 OpenAPI 规范起 mock 服务,前端联调不用排队等接口

openapi-backend 5 分钟上手:用 OpenAPI 规范起 mock 服务,前端联调不用排队等接口

【免费下载链接】openapi-backendBuild, Validate, Route, Authenticate and Mock using OpenAPI项目地址: https://gitcode.com/gh_mirrors/op/openapi-backend

前端联调经常卡在等接口:后端没做完接口,前端只能停工或手写假数据。openapi-backend 可以直接把接口描述文档变成 mock 服务,前端在后端没实现之前就能调通接口。

▶️ 先看效果:curl 一条命令拿到 mock 数据

服务启动后监听 9000 端口:

curl -i http://localhost:9000/pets

返回:

[{ "id": 1, "name": "Odie" }]

没有任何后端代码,/pets 就返回结构符合规范的宠物数组。name 是 Odie 不是随机值,是规范里 example 字段钉住的,后文细讲。

🚀 三步跑起来:克隆、读规范、验证

克隆仓库并安装依赖

git clone https://gitcode.com/gh_mirrors/op/openapi-backend cd openapi-backend/examples/express-ts-mock npm install

这里用仓库内的 Express + TypeScript 示例,postinstall 脚本会自动把 TS 编译一遍,Node 14+ 即可。

openapi.yml 最小写法:operationId 与 example

openapi.yml 是 OpenAPI 规范(用 YAML 或 JSON 书写的接口描述文档,定义每个接口的 URL、参数和响应结构)的落地文件。理解最小片段就够了:

paths: /pets: get: operationId: getPets responses: '200': $ref: '#/components/responses/ListPetsRes' components: responses: ListPetsRes: content: application/json: schema: type: array # 数组,每项含 id(integer, >=1) 和 name(string, example: Odie)

只需看懂两处:

  • operationId:每个 API 操作的唯一标识(如 getPets),openapi-backend 靠它把请求路由到对应处理器,后面也用它来取 mock;
  • 响应 schema:'200'通过$ref引用ListPetsRes,schema 声明了一个数组,每项有 id/name,其中 name 上的example: Odie会被 mock 生成器直接采用。

启动服务并验证 /pets

npm run dev

控制台打印api listening at http://localhost:9000后即可验证:

curl -i http://localhost:9000/pets curl -i http://localhost:9000/pets/1a

第一条返回 200 和上面的 mock 数据;第二条的 id 不是整数,被校验拦截,validationFail 处理器返回 400 和错误明细。也就是说 mock 服务的校验能力是真的,不只是假数据。

图片占位:此处可插入终端执行上述两条 curl 命令及返回结果的截图(建议 4:3 横版)。

🎛️ 怎么定制 mock 数据:example、examples 与 notImplemented 回调

用 example / examples 钉住返回值

规范里有两种"钉法",适用场景不同:

写法位置什么时候用
example: Odieschema 的单个字段想让 mock 中该字段恒为固定值,如单测要对精确返回值断言
examples.garfield.value整个响应要模拟多套数据状态(有数据 / 无数据),按名字取不同返回

比如 openapi.yml 中 PetRes 声明了examples.garfield.value{ id: 1, name: 'Garfield' },GET /pets/1 就固定返回这个对象。

让 notImplemented 处理未实现的接口

关键配置在 index.ts:

const api = new OpenAPIBackend({ definition: path.join(__dirname, '..', 'openapi.yml'), handlers: { validationFail: async (c, req, res) => res.status(400).json({ err: c.validation.errors }), notFound: async (c, req, res) => res.status(404).json({ err: 'not found' }), notImplemented: async (c, req, res) => { const { status, mock } = c.api.mockResponseForOperation(c.operation.operationId); return res.status(status).json(mock); }, }, });

notImplemented回调在请求命中一个没有注册真实处理器的接口时触发,示例里用mockResponseForOperation(按接口的 operationId 生成符合规范的状态码与数据的库方法)自动产出响应。什么场景需要它:你还没写任何业务逻辑,想让规范里的接口全部可调用;或同一服务里真假接口混用——已就绪的注册处理器,其余走回调兜底。

🔌 接入真实项目:baseURL 切换与测试

baseURL 怎么切换:一行配置的事

前端代码只需把请求基地址指向 http://localhost:9000(如 axios 的baseURL),后端就绪后换成真实网关域名,改的是配置而不是业务代码。想保证 mock 数据与最终 API 一致,最好前后端共用同一份 OpenAPI 文档,本仓库的示例正是这么配的。

用测试锁定 mock 行为

index.test.ts 的做法值得照抄:beforeAll 里拉起服务、等 9000 端口就绪,再发真实 HTTP 请求,断言三件事:

  • GET /pets返回 200,且是包含{ id: 1, name: 'Odie' }的数组;
  • GET /pets/1a返回 400,且带错误信息;
  • GET /unknown返回 404。

三条断言就能确认 mock 服务的行为符合规范。

完整可运行示例在 examples/express-ts-mock/。下一步可以把示例 openapi.yml 换成你自己项目的 OpenAPI 文档,mock 服务就会跟着真实接口走;如果不用 Express,examples/ 目录还有 Koa、Fastify、Hapi 等实现可参考移植。

【免费下载链接】openapi-backendBuild, Validate, Route, Authenticate and Mock using OpenAPI项目地址: https://gitcode.com/gh_mirrors/op/openapi-backend

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4262958.html

相关文章:

  • 大脑+小脑协同:人形机器人具身智能架构设计与仿真实现
  • 多语言推理迁移难?RP-OPSD在线自蒸馏训练范式详解
  • FancyZones 窗口管理完整指南:5 步重建你的多屏工作流
  • 职业院校技能大赛特色赛,获奖很容易
  • 基于TensorFlow 2.5的SRGAN图像超分辨率实战:从原理到自定义训练
  • SQLAlchemy+Alembic实战:DownloaderForReddit数据库模型设计与自动迁移机制详解
  • YOLO农业质检数据集实战:大豆种子好坏检测与模型训练全流程
  • PAST-Bench:个人智能体自我改进能力的评测基准设计与实践
  • 基于OpenCV的多角度多尺度模板匹配算法:从原理到工程实践
  • 剪刀石头布目标检测数据集:VOC+YOLO双格式实战入门
  • LettersPractice:专为儿童阅读优化的修改版间隔重复系统(SRS)开源项目解析
  • HextaUI Blocks完全指南:84个现成页面积木,1天搭完整个SaaS产品
  • 基于熵权法与TOPSIS的贫困生评测系统:Matlab实现与公平性考量
  • 具身智能技术栈解析:从宇树机器人看开发者如何入门二次开发
  • 蓝桥杯国赛冲刺:每日一题体系化训练与核心算法突破
  • 【TDengine】如何通过 DBeaver 或其他 SQL 客户端工具连接 TDengine?
  • Bash 专业人员笔记 -- 第 8 章:作业与进程
  • Java稀疏数组实战:从棋盘存盘到性能优化与避坑指南
  • 解释方法评估怎么做?从静态数据到数据漂移的落地框架
  • 天骄机器人跳远7.97米夺冠:拆解动态运动控制技术链
  • Is Lying Only Sinful in Islam? Exploring Religious Bias in Multilingual Large Language Models Acr...
  • Wordle变AI擂台:多轮反馈与提示词工程实战
  • 深度优先搜索(DFS)实战:从哈密顿路径到“玩具蛇”算法解析
  • Java手撸TRC20地址生成与TRX转账全链路实现
  • 青岛活动策划公司靠谱吗
  • AI生成补丁遭拒真相:Linux无线维护者反对的是“AI Slop”而非AI
  • 15-权限配置详解
  • 免焊接机器人套件与SimpleLink MCU开发实战
  • 中学生英语背词APP避坑实测:2026年这5款值得推荐
  • XSS跨站脚本深度解析:为什么你插入的代码永远不执行?