
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 与 exampleopenapi.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 操作的唯一标识如 getPetsopenapi-backend 靠它把请求路由到对应处理器后面也用它来取 mock响应 schema200通过$ref引用ListPetsResschema 声明了一个数组每项有 id/name其中 name 上的example: Odie会被 mock 生成器直接采用。启动服务并验证 /petsnpm 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.tsconst 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 服务就会跟着真实接口走如果不用 Expressexamples/ 目录还有 Koa、Fastify、Hapi 等实现可参考移植。【免费下载链接】openapi-backendBuild, Validate, Route, Authenticate and Mock using OpenAPI项目地址: https://gitcode.com/gh_mirrors/op/openapi-backend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考