前后端分离: YApi 接口管理平台的定义、导出与批量导入
纲要
完整使用链路:
YApi是什么:高效、易用、功能强大的API管理平台,需自行部署- 定义接口:创建项目 → 添加分类 → 添加接口 → 配置请求参数与响应数据
- 接口状态流转:未完成 → 已完成,作为开发进度的可视化标识
- 在线测试:
YApi的"运行"功能可真正发请求,类似Postman - 导出:支持
HTML、Markdown、JSON、Swagger JSON等多种格式 - 导入:支持
Postman、HAR、Swagger等格式批量导入,一次导入 73 个接口
一、YApi 是什么
定位
YApi是高效、易用、功能强大的API管理平台,目的是为开发、产品、测试人员提供更优雅的接口管理服务。
它可以帮助开发者轻松创建、发布、维护API。开发者只需利用平台提供的接口数据写入工具和简单的点击操作,就能实现接口的管理。
为什么需要它
回顾上一篇:前后端分离开发的第一步是「定制接口」。接口约定写在哪里?
| 载体 | 问题 |
|---|---|
Word/Excel文档 | 易与代码脱节,改了代码忘了改文档 |
| 口头/会议约定 | 无据可查,人员变动即失传 |
| 聊天记录 | 无法检索,很快被淹没 |
YApi这类管理平台 | 集中管理、版本可追溯、在线可测试、可导出分享 |
有了它,前后端人员看同一份接口定义开发,联调时"按文档验收",责任清晰。
部署方式
YApi需要自行部署——它本质上是一个Web服务,源码托管在GitHub上。
官方推荐的部署方式:
# 方式一:npm 全局安装(需 NodeJS + MongoDB)npminstall-gyapi-cli--registryhttps://registry.npm.taobao.org yapi server# 浏览器访问 http://localhost:9090 按向导完成部署# 方式二:Docker 部署dockerrun-d--nameyapi-mongo-p27017:27017 mongo:4.4dockerrun-d--nameyapi-p3000:3000--linkyapi-mongo:mongo\-eYAPI_ADMIN_ACCOUNT=admin@company.com\-eYAPI_ADMIN_PASSWORD=ymfe.org\jayfong/yapi:latest依赖关系:YApi需要NodeJS(运行环境)与MongoDB(数据存储)。这是它部署成本较高的原因——不像纯静态文档那样开箱即用。
课程中平台已提前部署好,直接使用即可。
同类工具对比
| 工具 | 部署成本 | 特点 |
|---|---|---|
YApi | 中(需NodeJS+MongoDB) | 国产、开源、功能全、支持Mock |
Swagger/Knife4j | 低(Jar包依赖) | 代码注解驱动,与代码强同步 |
Postman | 低(客户端) | 测试强,协作需付费版 |
Apifox | 低(SaaS) | 新兴,接口+Mock+测试一体 |
ShowDoc | 低 | 轻量文档,偏展示 |
二、创建项目与分类
注册登录
首次使用需要注册(邮箱 + 密码),注册后登录。
添加项目
右上角「添加项目」:
| 配置项 | 值 | 说明 |
|---|---|---|
| 项目名称 | 瑞吉外卖 | 项目标识 |
| 分组 | 个人空间 | 也可用团队分组 |
| 路径 | 可留空 | 接口URL的统一前缀 |
| 权限 | 私有 | 仅组长与开发者可见 |
创建后进入项目,显示「全部接口 共 0 个」。
添加分类
接口多时必须分类。一个外卖平台有员工、分类、菜品、套餐、订单、购物车等多个模块,接口上百个,平铺会完全无法维护。
按业务模块建分类:
瑞吉外卖/ ├── 员工相关接口 ├── 分类相关接口 ├── 菜品相关接口 ├── 套餐相关接口 ├── 订单相关接口 ├── 购物车相关接口 ├── 地址簿相关接口 └── 公共接口(文件上传/下载)课程演示中创建了「菜品相关接口」与「套餐相关接口」两个分类。
分类粒度建议与后端Controller一一对应,这样接口天然与代码模块对齐,查找方便。
三、定义接口
基本信息
进入某个分类 → 添加接口:
| 字段 | 示例 | 说明 |
|---|---|---|
| 接口名称 | 菜品分页查询 | 功能描述 |
| 接口分类 | 菜品相关接口 | 自动带入当前分类 |
| 请求方式 | GET | 分页查询用GET |
| 请求路径 | /dish/page | 与后端@GetMapping一致 |
| 状态 | 未完成 | 开发进度标识 |
提交后基本信息保存,再点「编辑」补充参数细节。
请求参数
参数分两部分:
Header(请求头)
Content-Type: application/json分页查询是GET请求、参数在URL上,不需要设置Content-Type。但POST提交JSON时必须写明,这是最常见的约定项。
Query/Body(请求参数)
以菜品分页查询为例:
| 参数名 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
page | Integer | 必填 | 1 | 页码 |
pageSize | Integer | 必填 | 10 | 每页显示记录数 |
name | String | 非必填 | 鱼香肉丝 | 菜品名称,模糊查询 |
区分必填与非必填很重要——非必填参数后端要做判空处理(如LambdaQueryWrapper的like(name != null, ...)),前端知道可以不传。
返回数据
YApi支持两种方式填写响应结构:
- 在表格里逐行添加字段
- 点「导入
JSON」直接粘贴一段JSON样例(更方便)
粘贴:
{"code":1,"message":"ok"}点确定后,YApi会自动解析出字段结构并填充到表格中。
对于嵌套结构,比如菜品分页的真实响应:
{"code":1,"msg":null,"data":{"records":[{"id":"1397849739276890114","name":"鱼香肉丝","categoryId":"1397844263642378242","categoryName":"川菜","price":3800,"image":"dish-xxx.jpg","status":1}],"total":24,"size":10,"current":1,"pages":3},"map":{}}YApi会递归解析出data.records[].name这样的完整层级,前端据此定义TypeScript类型或做字段映射。
建议直接粘贴真实响应样例,比手工填表格准确得多——可以从Swagger或浏览器Network面板拷一段真实返回。
保存与预览
保存后点「预览」,可以看到完整的接口文档:基本信息 + 请求参数 + 返回数据。
前后端人员就是看这个页面开发各自的代码。
状态流转
接口开发完成后,把状态从「未完成」改为「已完成」。
这个状态是整个项目进度的可视化标识——打开项目,一眼能看出 73 个接口里有多少已完成、多少还在做。
在线测试
YApi提供「运行」按钮,可以真正发出请求测试后端接口,功能类似Postman。
课程演示时点发送报了异常,是因为后端服务没启动。后端跑起来后点发送,会真的把请求发过去并显示响应。
这个能力的价值:接口文档与测试工具合一,不用在YApi看文档、再到Postman里手工敲一遍地址参数。
四、导出接口文档
操作路径
「数据管理」→「数据导出」→ 选择格式 → 导出。
支持的格式
| 格式 | 用途 |
|---|---|
HTML | 导出成api.html,浏览器直接打开,离线可看 |
Markdown | 导出成api.md,可贴进Wiki、Git仓库 |
JSON | 结构化数据,供其他工具消费 |
Swagger JSON | 导入到其他支持Swagger的平台 |
为什么需要导出
离线查看。内网部署的YApi在出差、断网环境访问不了,导出的静态文件可以随身带。
归档与交付。项目结项交付时,接口文档是必须交付物之一。
二次加工。Markdown可以合并进项目文档,Swagger JSON可以导入其他工具链。
导出示例
导出的api.html内容与平台上看到的完全一致,包含接口基本信息、请求参数、返回数据。
Markdown版本结构大致为:
# 瑞吉外卖 ## 菜品相关接口 ### 菜品分页查询 **接口地址** `/dish/page` **请求方式** `GET` **请求参数** | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | page | Integer | 是 | 页码 | | pageSize | Integer | 是 | 每页记录数 | | name | String | 否 | 菜品名称 | **返回数据** ```json { "code": 1, "message": "ok" } ```五、批量导入接口
为什么需要导入
如果一个一个手工创建接口,一个中等项目有上百个接口,工作量巨大。
如果后端已经用Swagger生成了接口描述文件,就可以直接批量导入YApi。
操作路径
「数据管理」→「数据导入」→ 选择格式 → 上传文件 → 确认同步。
支持的格式
| 格式 | 来源 |
|---|---|
Postman | Postman导出的集合 |
HAR | 浏览器Network面板导出的请求记录 |
Swagger | Swagger生成的JSON |
JSON | YApi自身的导出格式 |
课程演示用的是Swagger JSON,导入后一次性生成 73 个接口,且自动分好类。
Swagger JSON长什么样
{"swagger":"2.0","info":{"title":"瑞吉外卖","version":"1.0"},"host":"localhost:8080","basePath":"/","tags":[{"name":"菜品管理"},{"name":"套餐管理"},{"name":"订单管理"}],"paths":{"/dish/page":{"get":{"tags":["菜品管理"],"summary":"菜品分页查询","parameters":[{"name":"page","in":"query","type":"integer","required":true},{"name":"pageSize","in":"query","type":"integer","required":true},{"name":"name","in":"query","type":"string","required":false}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/R«Page«DishDto»»"}}}}}},"definitions":{}}这个文件完整描述了:
swagger: "2.0"—— 规范版本info—— 项目信息host/basePath—— 服务器地址tags—— 接口分组(对应YApi的分类)paths—— 每个路径的请求方法、参数、响应
YApi解析这个文件,就能还原出全部接口。
导入结果
导入完成后,「接口」列表会多出大量接口,并按tags自动分类:
公共接口 ├── GET /common/download 文件下载 └── POST /common/upload 文件上传 分类管理 ├── POST /category 新增分类 ├── GET /category/page 分类分页查询 ├── DELETE /category 删除分类 └── PUT /category 修改分类 菜品管理 ├── POST /dish 新增菜品 ├── GET /dish/page 菜品分页查询 └── PUT /dish 修改菜品 ...每个接口都有完整的请求参数与响应结构描述。响应里能看到code、data、map、message这些R<T>的字段,以及data内部的嵌套结构。
YApi与Swagger的协作关系
后端工程师的工作在第一步:写完Controller加注解,Swagger自动生成描述文件,导入YApi后全团队共享。
这比手工维护文档高效得多,且代码与文档天然同步——改了代码重新导出即可。
六、接口文档的字段约定
结合外卖平台项目,一份好用的接口文档应包含:
| 要素 | 要求 | 反例 |
|---|---|---|
| 接口名称 | 动词 + 对象,见名知意 | “接口1” |
| 请求方法 | 严格区分GET/POST/PUT/DELETE | 全用POST |
| 请求路径 | 与后端注解一致 | 文档写/dish/list,代码是/dish/page |
| 参数是否必填 | 明确标注 | 不标,前端猜 |
| 参数示例 | 给真实可用的值 | 给xxx |
| 响应字段类型 | 明确,特别是Long是否为字符串 | 只写"对象" |
| 错误码含义 | 列出常见错误 | 只写"失败" |
| 分页结构 | 说明records/total/pages | 让前端自己摸索 |
特别提醒Long类型:外卖平台所有ID是 19 位雪花ID,经JacksonObjectMapper序列化为字符串。文档里必须写明是String,否则前端按number解析会遇到精度丢失(前面第 26 篇讲过)。
API 速览
| 功能 | 说明 |
|---|---|
| 添加项目 | 创建API项目,设置名称、分组、权限 |
| 添加分类 | 按业务模块对接口分组 |
| 添加接口 | 定义名称、方法、路径、状态 |
Header参数 | 请求头约定,如Content-Type: application/json |
Query/Body参数 | 请求参数,含类型、是否必填、示例 |
导入JSON | 粘贴响应样例自动解析字段结构 |
| 运行(在线测试) | 真正发请求测试后端,类似Postman |
| 状态 | 未完成 / 已完成,标识开发进度 |
| 数据导出 | 支持HTML/Markdown/JSON/Swagger JSON |
| 数据导入 | 支持Postman/HAR/Swagger/JSON |
swagger: "2.0" | Swagger规范版本标识 |
tags | Swagger中的接口分组,导入后成为YApi分类 |
paths | Swagger中的接口路径与方法描述 |
官方文档
YApi官方文档:https://hellosean1025.github.io/yapi/YApiGitHub仓库:https://github.com/YMFE/yapiOpenAPI规范(Swagger):https://swagger.io/specification/Swagger官方文档:https://swagger.io/docs/Postman文档:https://learning.postman.com/docs/
总结
YApi解决的是"接口约定写在哪"的问题。它是需自行部署的Web服务(依赖NodeJS+MongoDB),为开发、产品、测试提供统一的接口管理服务。
使用链路是「项目 → 分类 → 接口 → 参数 → 响应」。分类是必须的——上百个接口平铺会完全无法维护,建议分类粒度与后端Controller一一对应。
填响应结构时直接粘贴真实JSON样例最高效。YApi会自动递归解析出嵌套字段,比逐行手工填表准确得多。真实样例可以从Swagger或浏览器Network面板拷贝。
YApi自带在线测试能力,点"运行"就能真发请求,不必在YApi看文档再到Postman重敲一遍。
导入功能是与Swagger协作的关键。后端写代码加Swagger注解 → 生成swagger.json→ 批量导入YApi(课程演示一次导入 73 个接口,且自动分好类)。这比手工创建接口高效一个数量级,且代码改了重新导出即可,文档与代码天然同步。
接口文档里Long类型必须标注为String。外卖平台的 19 位雪花ID经JacksonObjectMapper序列化后是字符串,前端若按数字解析会踩精度丢失的坑。
下一篇讲Swagger——后端工程师更常用的接口文档方案:用注解写在代码里,自动生成可交互文档,还能在线调试。