Skip to content
vanglisPublic

About

原样复刻apifox

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

apifox-rs

用 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

前端通过 /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

About

原样复刻apifox

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages