Apifox
Apifox 是集 API 设计、文档、调试、Mock、自动化测试于一体的 API 工具,定位为 Postman + Swagger + Mock 的一站式替代方案。支持 REST、GraphQL、WebSocket、gRPC 等协议,团队版支持多人协作与版本管理。
相关工具对比:纯接口调试可用 Postman,纯文档生成可参考 Spring Boot 的 Swagger与OpenAPI。
核心概念
项目
├── 接口(API) ← 核心单元,含定义、文档、用例
│ ├── 接口定义 ← 路径、方法、参数、响应 Schema
│ └── 测试用例 ← 绑定到接口的请求参数 + 断言
├── 数据模型(Schema)← 可复用的请求/响应结构
├── 环境 ← 变量集合(dev / staging / prod)
├── Mock 服务 ← 根据 Schema 自动/手动生成假数据
└── 测试套件 ← 多接口按顺序执行的自动化流程
环境与变量
环境配置
在「环境管理」中为不同阶段创建环境,每个环境维护独立的变量:
| 变量名 | 开发 | 测试 | 生产 |
|---|---|---|---|
BASE_URL | http://localhost:8080 | https://test-api.example.com | https://api.example.com |
TOKEN | dev-token-xxx | test-token-xxx | (不填,由脚本动态设置) |
变量类型
| 类型 | 作用域 | 说明 |
|---|---|---|
| 环境变量 | 当前环境 | 随环境切换自动替换 |
| 全局变量 | 所有环境 | 跨环境共享,如 AppKey |
| 临时变量 | 单次请求 | 前置脚本设置,请求结束后失效 |
在请求中引用变量:{{BASE_URL}}/api/users
接口设计
定义接口
- 新建接口 → 填写路径、方法、描述
- 请求参数:Path / Query / Header / Body(JSON/Form)
- 响应:定义每个状态码的响应 Schema(引用数据模型)
- 数据模型复用:在「数据模型」中定义
UserResponse,接口中直接引用,修改一处全局生效
数据模型示例
// UserResponse 数据模型
{
"id": { "type": "integer", "description": "用户 ID", "example": 1001 },
"name": { "type": "string", "description": "用户名", "example": "张三" },
"email": { "type": "string", "format": "email", "example": "test@example.com" },
"createdAt": { "type": "string", "format": "date-time" }
}导入 OpenAPI / Swagger
已有 Swagger 文档的项目可直接导入:「项目设置」→「导入」→ 粘贴 JSON/YAML 或填写 URL(支持定时同步)。
与 Spring Boot 的 Swagger与OpenAPI 配合时,填写 /v3/api-docs 地址即可自动同步接口定义。
接口调试
基本请求
- 选择环境后,
{{BASE_URL}}自动替换为对应值 - Body 支持 JSON / Form-data / x-www-form-urlencoded / 原始文本
- 响应区展示:状态码、耗时、响应体(可格式化预览)、Headers
前置 / 后置脚本
脚本使用 JavaScript,用于动态处理参数和提取响应数据:
// 前置脚本:生成签名
const timestamp = Date.now();
const sign = pm.environment.get('APP_KEY') + timestamp;
pm.environment.set('SIGN', CryptoJS.MD5(sign).toString());
pm.environment.set('TIMESTAMP', timestamp.toString());// 后置脚本:提取 Token 并存入环境变量(登录接口常用)
const res = pm.response.json();
if (res.code === 200) {
pm.environment.set('TOKEN', res.data.token);
console.log('Token 已更新:', res.data.token);
}// 后置脚本:断言响应
pm.test('状态码为 200', () => {
pm.response.to.have.status(200);
});
pm.test('返回数据非空', () => {
const body = pm.response.json();
pm.expect(body.data).to.not.be.null;
});Mock 服务
智能 Mock
根据接口定义的 Schema 和字段名自动推断生成真实感数据(如 name 字段自动生成中文姓名,email 生成合法邮箱)。
开启路径:接口详情 → 「Mock」标签 → 复制 Mock 地址。
自定义 Mock 规则
// 在数据模型字段的「Mock」配置中设置
{
"name": "@cname", // 随机中文姓名
"phone": "@phone", // 随机手机号
"age": "@integer(18, 60)", // 18~60 的整数
"avatar": "@image('100x100')",
"status": "@pick(['active','inactive'])"
}Mock 语法基于 Mock.js,支持占位符、模板、正则等。
期望(高级 Mock)
根据请求参数返回不同的 Mock 数据(条件响应):
- 请求参数
id=1→ 返回正常用户数据 - 请求参数
id=999→ 返回 404 错误响应
自动化测试
测试套件
将多个接口用例串联为测试流程,典型场景:
1. 登录接口 → 提取 Token → 存入环境变量
2. 创建订单 → 提取 orderId
3. 查询订单 → 断言 status = "PENDING"
4. 支付订单 → 断言 status = "PAID"
5. 删除订单 → 断言 404
用例间数据传递
// 步骤 1(登录)后置脚本
pm.environment.set('ACCESS_TOKEN', pm.response.json().data.token);
// 步骤 2(创建订单)后置脚本
pm.environment.set('ORDER_ID', pm.response.json().data.id);
// 步骤 3(查询订单)请求路径
GET {{BASE_URL}}/orders/{{ORDER_ID}}CI 集成
Apifox 支持导出为命令行工具 apifox-cli 或集成到 CI 流水线:
# 安装 CLI
npm install -g apifox-cli
# 运行测试套件(项目 ID 和 Token 在项目设置中获取)
apifox run --project-id xxx --token yyy --env "测试环境"团队协作
- 分支管理:接口定义支持分支,开发新版本时不影响主干文档
- 变更通知:接口修改后自动通知订阅成员
- 评论:在接口上添加评论,方便前后端沟通
- 权限管理:项目成员分为「管理员 / 编辑 / 只读」角色
快捷键
| 操作 | 快捷键 |
|---|---|
| 发送请求 | Ctrl + Enter |
| 新建接口 | Ctrl + N |
| 切换环境 | Ctrl + E |
| 格式化 JSON | Ctrl + B |
| 搜索接口 | Ctrl + K |
相关链接
- Postman — 轻量接口调试替代方案
- Swagger与OpenAPI — Spring Boot 项目自动生成 API 文档,可导入 Apifox
- Git — 接口定义版本管理与分支策略