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_URLhttp://localhost:8080https://test-api.example.comhttps://api.example.com
TOKENdev-token-xxxtest-token-xxx(不填,由脚本动态设置)

变量类型

类型作用域说明
环境变量当前环境随环境切换自动替换
全局变量所有环境跨环境共享,如 AppKey
临时变量单次请求前置脚本设置,请求结束后失效

在请求中引用变量:{{BASE_URL}}/api/users


接口设计

定义接口

  1. 新建接口 → 填写路径、方法、描述
  2. 请求参数:Path / Query / Header / Body(JSON/Form)
  3. 响应:定义每个状态码的响应 Schema(引用数据模型)
  4. 数据模型复用:在「数据模型」中定义 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
格式化 JSONCtrl + B
搜索接口Ctrl + K

相关链接

  • Postman — 轻量接口调试替代方案
  • Swagger与OpenAPI — Spring Boot 项目自动生成 API 文档,可导入 Apifox
  • Git — 接口定义版本管理与分支策略