我用 Go 写了一个 Mock 服务器,性能提升了 24 倍

0 阅读2分钟

作为一名全栈开发者,我每天都在和 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

项目地址

如果这个项目对你有帮助,欢迎 Star ⭐

写在最后

开发 MockAPI 的过程让我学到了很多:

  1. 简单往往更好 - 零依赖比功能堆砌更重要
  2. 性能要趁早考虑 - 好的数据结构胜过后期优化
  3. 开发者体验很重要 - CLI 和 Web UI 大幅提升易用性
  4. 测试驱动开发 - 26 个测试用例让我睡得安稳

Happy Mocking! 🦞