用 Rust 复刻的 Apifox 核心工作台,提供两种形态,共用同一套后端与前端:
- 桌面客户端(
apifox-desktop):原生窗口 + 系统 WebView,独立进程,端口自动分配,带系统托盘 - 本地服务(
apifox-rs):命令行起服务,浏览器访问
这是在对本机 Apifox 2.8.37 做逆向分析之后,按它的架构重新实现的版本:进程分层、变量优先级、脚本沙箱、Mock 服务这些设计都对齐了原版,代码全部重写。
cargo run -p apifox-desktop或双击 start-desktop.bat。启动后:
- 弹出原生窗口,标题栏显示当前 Mock 端口
- UI 与 Mock 服务都跑在本进程内,端口由系统分配(避免冲突),并写入
apifox-rs.port - 系统托盘图标可「打开控制台 / 退出」
- Windows 需要 WebView2 运行时(Win10/11 与 Edge 自带);缺失时会给出明确报错
cargo run -p apifox-server -- --port 4522 --mock-port 4523 --db apifox-rs.db --web web然后浏览器打开 http://127.0.0.1:4522 。
首次启动会自动生成一份示例数据(示例项目 + 三个接口 + 一个测试用例),可以直接点「发送」看效果。
| Crate | 职责 | 对应 Apifox |
|---|---|---|
apifox-core |
数据模型、{{变量}} 渲染、断言求值、OpenAPI 转换 |
接口/用例/环境的数据层 |
apifox-store |
SQLite 持久化(项目、目录、接口、用例、环境、历史) | 本地数据库 |
apifox-engine |
HTTP 执行引擎 + JS 脚本沙箱(boa) | 请求执行 + 前后置脚本 |
apifox-mock |
按接口定义返回示例数据的 Mock 服务(独立端口) | Mock 服务 |
apifox-server |
axum REST 服务 + 静态前端(同时作为 lib 被桌面版复用) | 客户端主进程 + UI |
apifox-desktop |
tao 窗口 + wry WebView + 系统托盘,进程内起服务 | Electron 壳(主进程 + 窗口) |
web/ |
原生 JS 单页界面(无构建步骤) | 渲染层 |
| 能力 | 状态 | 说明 |
|---|---|---|
| HTTP 请求引擎 | ✅ | GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS;重定向链记录、Cookie、超时、代理、multipart、form、urlencoded |
| 变量与作用域 | ✅ | 临时 > 环境 > 全局三级优先级,{{var}} 渲染贯穿 URL/头/参数/请求体 |
| 前后置脚本 | ✅ | JS 沙箱(boa),支持 pm.environment.*、pm.variables.*、pm.response.json()、pm.test()、pm.expect()、console.log |
| 断言 | ✅ | 状态码、响应时间、响应体包含、响应头、JSON 路径;脚本里的 pm.test 一并计入 |
| 数据模型与存储 | ✅ | 项目 / 目录 / 接口 / 用例 / 环境 / 全局变量 / 历史,存 SQLite |
| Mock 服务 | ✅ | 独立端口,按方法+路径匹配(支持 /users/{id}),可配延迟与默认响应 |
| OpenAPI | ✅ | 3.0 导入(按 schema 生成示例)与导出 |
| 多窗口 / 多标签 | 桌面版为单窗口;浏览器形态天然由浏览器承担 | |
| 团队协作与云同步 | ❌ | 需要服务端账号体系,不在本版范围 |
| gRPC / Protobuf / WebSocket / Socket.IO | ❌ | 可基于 apifox-engine 扩展 |
| 数据库连接(MySQL/Redis/…) | ❌ | 原版在脚本沙箱里提供,可作为后续沙箱 API 扩展 |
// 后置脚本
pm.test("状态码为 200", function () {
pm.expect(pm.response.code).to.eql(200);
});
var body = pm.response.json();
pm.environment.set("lastIp", body.origin); // 写回当前环境
console.log("出口 IP:", body.origin);前端通过 /api/* 交互,主要端点:
GET /api/projects 项目列表
POST /api/projects 新建项目
GET /api/projects/{id} 项目详情(目录/接口/环境/全局变量)
POST /api/projects/{id}/apis 新建接口
PUT /api/apis/{id} 更新接口
GET /api/apis/{id} 接口详情(含用例与历史)
POST /api/apis/{id}/cases 新建用例
POST /api/run 执行(api_id / case_id / environment_id)
POST /api/import-openapi 导入 OpenAPI
GET /api/projects/{id}/export-openapi 导出 OpenAPI
GET /api/mock/status Mock 服务状态
cargo test --workspace