作为一名全栈开发者,我每天都在和 API 打交道。前端开发等后端接口、第三方 API 限流、微服务联调......这些场景都需要 Mock 数据。
试过不少 Mock 工具,但总觉得差点意思:
- MockServer:功能强大但太重,需要 JVM
- JSON Server:轻量但只支持 REST,不支持动态响应
- Postman Mock:需要联网,付费才能团队协作
于是我决定自己造轮子。目标很简单:
零依赖、单二进制、功能完整、高性能
三个月后,MockAPI 诞生了。
成果一览
| 指标 | 数值 |
|---|---|
| 运行时依赖 | 0 |
| 安装方式 | go install 一条命令 |
| 启动时间 | < 100ms |
| 路由匹配性能 | 提升 24 倍 |
| 内存占用 | 减少 94% |
支持的功能:
- ✅ REST Mock(动态路由、路径参数、条件响应)
- ✅ GraphQL Mock
- ✅ WebSocket Mock
- ✅ gRPC-Web Mock
- ✅ JavaScript 脚本引擎
- ✅ Swagger/OpenAPI 导入
- ✅ 内置 Web UI
- ✅ 热重载
技术选型:为什么是 Go?
选择 Go 不是因为我只会 Go(虽然这也有关系),而是它完美契合这个场景:
1. 零运行时依赖
编译成单个二进制文件,用户不需要安装 Node.js、JVM 或任何其他运行时。下载即用,上传即跑。
2. 标准库足够强大
Go 的 net/http 性能优异,encoding/json 够用,embed 可以把 Web UI 嵌入二进制。
3. 跨平台编译
一次编译,到处运行。
4. 部署简单
没有复杂的依赖关系,不需要 Docker 也能轻松部署。
性能优化:从 O(n) 到 O(1)
项目初期,路由匹配是线性搜索。当路由数量增加时,性能急剧下降。
解决方案:RouteIndex
我设计了一个两层索引结构:
- 精确匹配:直接查 map,O(1)
- 参数路由:按前缀分组,大幅减少候选集
- 通配符路由:按方法分组
优化效果
性能提升 24 倍,内存减少 94% 。这就是算法优化的力量。
核心功能
动态路由
支持 :param 参数和 * 通配符。
JavaScript 脚本引擎
当静态响应不够用时,可以用 JavaScript 动态生成响应。
Swagger/OpenAPI 导入
有现成的 API 文档?一键导入,自动生成 Mock 路由。
内置 Web UI
打开浏览器就能管理:http://localhost:8088/_ui
功能:路由列表和管理、可视化添加路由、快速模板、请求日志查看、实时调试。
快速开始
# 安装
go install github.com/fynntang/MockAPI@latest
# 启动
mockapi serve
项目地址
- GitHub: github.com/fynntang/Mo…
- 官网: mockapi.work
如果这个项目对你有帮助,欢迎 Star ⭐
写在最后
开发 MockAPI 的过程让我学到了很多:
- 简单往往更好 - 零依赖比功能堆砌更重要
- 性能要趁早考虑 - 好的数据结构胜过后期优化
- 开发者体验很重要 - CLI 和 Web UI 大幅提升易用性
- 测试驱动开发 - 26 个测试用例让我睡得安稳
Happy Mocking! 🦞