适用于 API mock 的免费开源 CLI 工具

本文推荐了多款免费开源、可自托管的 API Mock 命令行工具(如 Prism、Mockoon 等),并剖析其核心优势、优缺点及适用场景,助你轻松搞定 CI 集成与高效本地开发。

用 Apifox,节省研发团队的每一分钟

适用于 API mock 的免费开源 CLI 工具

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

当你在命令行中 mock 接口时,开源许可协议与功能列表同样重要。一个你可以阅读源码、自行托管并在 CI 中运行且无席位限制的 mock 服务端,与一个需要登录的托管式 SaaS mock 服务有着天壤之别。本指南将介绍开源领域的工具:你可以免费克隆、检查和运行它们。

这里介绍的每款工具都是在宽松许可协议(MIT 或 Apache-2.0)下提供源码的,托管在公开的 GitHub 仓库中,并且无需账号即可自行托管。这就是筛选标准。如果你想寻找体积更小、按启动速度和安装包大小排序的单二进制文件,请阅读另一篇关于轻量级 mock 服务端推荐的配套文章;而本列表侧重于源码开放和自行托管,因此即使是体量较重的可自行托管平台也占有一席之地。

针对每款工具,我们都会提供其开源许可协议、一条用于验证其正常运行的“安装并运行”命令、其最擅长的场景以及不足之处。如果你想了解更广泛的领域(包括商业方案),可以阅读最佳 API mock 工具汇总和 REST API mock 工具概述。

在开始列表之前,先做一个坦诚的说明。Apifox 并不是开源的,它是一个免费增值的商业平台。它仅在文末作为这些工具的集成替代方案出现一次,并带有清晰的标记,不作为开源项目列入。下面编号章节中的所有内容都是真正的开源项目。

什么是开源的 CLI mock 工具

决定一个工具是否能列入此名单有三个要素。

开源许可协议。 源码必须在宽松的许可协议下公开。这里挑选的每个工具都采用 MIT 或 Apache-2.0 协议,因此你可以阅读、fork 并在自己的产品中集成它们,而无需支付许可费或受席位限制。

可自行托管。 你可以在自己的笔记本电脑、容器或自己的服务端上运行它。没有托管的控制面板,没有数据回传,没有账号限制。这使得 mock 在隔离的 CI 运行器(CI runner)中依然可用。

公开维护。 拥有一个包含真实提交历史、Issue 和 Release 的公开 GitHub 仓库。Star 数量只是一个粗略的信号,最近的提交和标记的 Release 才是更好的衡量标准。

请注意,不在列表考量范围内的是:纯粹的速度或安装大小。这些是轻量级工具关注的角度。在这里,只要源码开放且许可协议免费,大型的、基于容器的、可自行托管的平台都在考虑范围内。

Prism (Stoplight)

Prism 可以将 OpenAPI 或 Postman 文件转换为实时的 mock 服务端。将其指向某个接口定义/规范,它就可以提供示例响应,根据数据模型校验传入的请求,并可以作为真实 API 前端的校验代理运行。许可协议:Apache-2.0。仓库:stoplightio/prism

npm install -g @stoplight/prism-cli
prism mock https://raw.githubusercontent.com/stoplightio/prism/master/examples/petstore.oas2.yaml

该命令会在 http://127.0.0.1:4010 上启动一个完全由接口规范驱动的 mock。发送 GET /pets 将返回 OpenAPI 文档中的示例;如果发送错误的 payload,Prism 会告诉你违反了数据模型的哪一部分。

最擅长: 以 OpenAPI 文件作为唯一事实源、基于规范驱动的契约 mock。其校验代理模式是一大亮点,能够捕获你的接口规范与真实 API 之间的偏差。

局限性: 响应来自你的示例和数据模型,因此 mock 的丰富程度完全取决于接口规范。没有内置的有状态行为(即不支持“先创建,再读取”的逻辑)。作为一个 Node 工具,你需要安装 Node 运行环境。

Mockoon CLI

Mockoon 最为人熟知的是其桌面版,但其 CLI 版本搭载了相同的引擎(无 GUI 界面),专门针对 CI 和自托管场景设计。你可以在桌面版中或手动设计一个环境,也可以直接向其提供一个 OpenAPI 文件,它便会运行该 mock 服务。许可证:MIT。仓库:mockoon/mockoon

npm install -g @mockoon/cli
mockoon-cli start --data ./environment.json --port 3000

你也可以直接通过 --data ./openapi.yaml 传入 OpenAPI 文件来启动服务。添加 --watch 参数可以在文件发生变更时自动重载,添加 --log-transaction 则可以打印完整的请求/响应日志。

最擅长: 无需编写代码即可实现丰富的、基于规则的响应。Mockoon 支持响应模板、条件规则和代理模式,因此单个接口可以根据请求的不同返回不同的 body。在桌面版中进行可视化设计,并配合 CLI 进行无头(headless)运行,这种分工非常清晰。

局限性: 最佳的编写方式是使用其桌面版,直接手动编辑环境的 JSON 配置文件会比较繁琐。此外,其动态模板语法也存在一定的学习曲线。

json-server

json-server 是伪造 REST API 最快捷的方式。只需提供一个 JSON 文件,它就能生成完整的 CRUD 路由(GET、POST、PUT、PATCH、DELETE),并能将数据修改真实地持久化写入该文件中。许可证:MIT。仓库:typicode/json-server

npx json-server db.json

只要在 db.json 中定义了一个顶层的 "posts" 数组,你就能立即获得 GET /postsGET /posts/1POST /posts 等接口,并且还支持通过 query 参数进行过滤、排序和分页。发送 POST 请求添加一条新记录,它就会被写入文件;再次读取该记录即可成功获取。

最擅长: 后端尚未就绪前的纯前端开发。它开箱即用支持有状态,这是 Prism 和大多数基于规范驱动的 mock 所不具备的。零配置,且使用 npx 运行意味着你甚至不需要安装它。

局限性: 它对 REST 的设计规范有强烈的约束,因此无法随意匹配自定义的 API。不支持导入 OpenAPI,JSON 文件本身即为契约。它不适用于压力测试或模拟类似生产环境的行为。

WireMock

WireMock 是开源 HTTP mock 领域的重量级选手,每月有数百万次的下载量。它作为一个独立的进程运行,可以通过 JSON 管理 API 或 JSON 桩(stub)文件进行配置,支持请求匹配、响应模板、有状态场景、故障注入以及录制与回放。许可证:Apache-2.0。仓库:wiremock/wiremock

docker run -it --rm -p 8080:8080 wiremock/wiremock:latest curl -X POST http://localhost:8080/__admin/mappings \ -H 'Content-Type: application/json' \ -d '{"request":{"method":"GET","url":"/hello"},"response":{"status":200,"body":"world"}}'

第一行启动了 WireMock;第二行通过其 admin API 注册了一个存根 (stub)。现在运行 curl http://localhost:8080/hello 就会返回 world。你也可以将存根文件放入 mappings/ 目录并将其挂载到容器中。

最擅长:复杂的测试场景。有状态的行为、通过延迟和故障模拟不稳定的第三方,以及通过代理加录制来捕获真实 API 并以便后续回放。当你的 mock 需要在测试中表现得与真实服务完全一致时,这就是首选工具。

局限性:它是一个基于 JVM 的工具,因此需要容器或 Java 运行时作为准入门槛。其配置项繁多,对于简单的 mock 来说有些大材小用。它不像 Prism 那样,拥有可以“读取规范并直接运行”的单一命令。

MockServer

MockServer 是一个在单一端口上运行的 HTTP(S) mock 和代理,专门用于集成测试。它能够 mock API、代理并录制实时流量,并允许你注入故障以测试客户端的应对能力。最近的版本增加了对 HTTP/2、gRPC 和 WebSocket 的支持。许可证:Apache-2.0。仓库:mock-server/mockserver

docker run -d --rm -p 1080:1080 mockserver/mockserver curl -X PUT 'http://localhost:1080/mockserver/expectation' \ -H 'Content-Type: application/json' \ -d '{"httpRequest":{"path":"/order"},"httpResponse":{"body":"{\"status\":\"ok\"}"}}'

该 PUT 请求注册了一个“mock 期望”;在此之后,运行 curl http://localhost:1080/order 就会返回你的 JSON。MockServer 的客户端(Java、JavaScript、Ruby 等)允许你在测试代码内部设置相同的 mock 期望,而无需通过 curl。

最擅长:在同一处进行 mock 和代理,以及故障注入。如果你需要验证某个特定请求是否被发送了特定的次数,MockServer 的验证 API 就是为此而设计的。非常适合重度依赖 JVM 的技术栈。如果它不太适合你的需求,可以阅读我们的 MockServer 替代方案文章。

局限性:和 WireMock 一样,它是基于 JVM 的,且 mock 期望的 JSON 格式较为冗长。它与 WireMock 的功能重叠度很高;你可以根据哪个客户端库更适合你的测试技术栈来二选一。

Microcks

Microcks 是平台级的选择,它是云原生计算基金会(CNCF)的孵化项目。它能将 OpenAPI、AsyncAPI、gRPC、GraphQL、Postman 集合和 SoapUI 项目转化为实时 mock,并复用这些契约对你的真实实现进行一致性测试。它不仅支持 HTTP,还覆盖了事件驱动和异步协议。许可证:Apache-2.0。仓库:microcks/microcks

bash docker run -d --name microcks -p 8585:8080 quay.io/microcks/microcks-uber:latest

这会运行多合一镜像;打开 http://localhost:8585 并导入接口规范以获取 mock 接口。配套的 microcks-cli 可以通过 CI 驱动正在运行的服务端:

microcks-cli import 'petstore.yaml:true' \
  --microcksURL=http://localhost:8585/api \
  --keycloakClientId=... --keycloakClientSecret=...

最适合:希望跨多种 API 和协议对 mock 进行统一管控,且内置契约测试的团队。在此领域中,支持异步/事件驱动的 mock(如 Kafka、MQTT 等)是比较少见的。

局限性:这是一个服务端,而不是单个二进制文件。一个重要的注意事项是:microcks-cli 是针对正在运行的 Microcks 实例触发测试并导入产物的,它本身并不直接提供 mock 服务。因此,该 CLI 只是一个客户端,你仍然需要运行整个平台。对于一次性的本地 mock,这比 Prism 或 json-server 显得更为厚重。

诚恳的题外话:Apifox

Apifox 并不是开源的,所以它在这里没有排上编号。但如果你注意到上述工具分别解决不同的问题(规范驱动的 mock、有状态的 CRUD、契约测试),而你不想把它们拼凑在一起,那么它非常值得一提。Apifox 是一个免费增值模式的平台,其免费额度中包含了 mock 功能。通过 apifox-cli 中的 apifox mock,你可以在终端中管理 mock 期望,并在同一个项目中同步进行设计、测试和文档编写。智能 mock 可以根据你的数据模型自动生成逼真的字段值,免去了手写示例 body 的烦恼。

权衡非常明显:你获得的是一体化的工作流和免费额度,而不是开源和自托管。如果开源或离线自托管是硬性需求,那么上述六种工具之一就是你的选择。如果一体化的“设计到 mock”闭环更为重要,Apifox 则是避免拼接多个工具的替代方案。

如何选择

工具 最适合 安装 许可证 备注
Prism 规范驱动的 mock + 校验代理 npm i -g @stoplight/prism-cli Apache-2.0 输入 OpenAPI/Postman,输出 mock;无状态
Mockoon CLI 基于规则的响应,无需代码 npm i -g @mockoon/cli MIT 在应用中进行设计,无头(headless)运行
json-server 面向前端的有状态伪 REST npx json-server db.json MIT 具备持久化功能的完整 CRUD,零配置
WireMock 复杂的测试场景、故障模拟 docker run wiremock/wiremock Apache-2.0 JVM;录制与回放;有状态
MockServer mock + 代理 + 验证 docker run mockserver/mockserver Apache-2.0 JVM;HTTP/2、gRPC、WebSocket
Microcks 统一管控的多 API/协议目录 docker run microcks-uber Apache-2.0 CNCF 平台;CLI 是客户端,而不是服务端
Apifox(非开源) 一体化的“设计到 mock” npm i -g apifox-cli 免费增值 免费额度;单个项目内使用 apifox mock

根据具体的需求形态来选择,而不是看流行程度。如果需要一个能够读取 OpenAPI 文件并强制执行其规范的 mock,可以从 Prism 开始。如果要在后端服务就绪之前进行有状态的 CRUD,json-server 在速度上更胜一筹。对于包含故障注入和录制回放的丰富测试场景,可以选择 WireMock 或 MockServer(根据你所使用的客户端库来选择)。对于包含契约测试的共享式、多协议目录,Microcks 是理想之选。至于哪种形态适合哪种情况,可以参考将工具与场景进行映射的 API mock 用例指南。

总结

开源 CLI mock 工具为你免费提供了一个可阅读、可自托管并在 CI 中运行的 mock 服务端。Prism 和 json-server 只需一行命令即可覆盖常见场景;WireMock 和 MockServer 能够应对复杂的测试场景;Microcks 则将其扩展为跨协议的受管控目录。这六款工具均采用 MIT 或 Apache-2.0 协议,支持自托管,且全部在 GitHub 上公开。

如果你希望在进行 API 设计、测试和编写文档的同时管理 mock,而不想把各种独立的工具拼凑在一起,可以下载 Apifox 并在免费额度内尝试 apifox mock。它虽非开源,但能提供一个一站式平台,让你在从命令行到 CI 的整个工作流闭环中高效运行。

开发必备:API 全流程管理神器 Apifox

介绍完上文的内容,我想额外介绍一个对开发者同样重要的效率工具 —— Apifox。作为一个集 API 文档、调试、设计、测试、Mock、自动化测试于一体的工具,Apifox 是目前提升研发效率的首选。

如果你正在开发项目,不妨试试其极其友好的界面设计,它完全兼容 Postman 和 Swagger 数据格式,导入数据非常方便,,即使是新手也能很快上手,点击这里即可注册使用

Apifox

值得一提的是,除了个人和常规团队使用,针对有高安全合规要求、或需要在内网环境协作的企业,Apifox 还提供了深度定制的私有化部署方案

获取专属报价与部署方案

icon 详细的私有化部署系统架构与安全白皮书
icon 针对您公司规模的专属报价单
icon 免费的 1v1 专属产品演示 (Demo) 机会
获取部署方案
* 提交后,我们的客户经理将在 1 个工作日内与您联系
林俊锋 企业微信
@Apifox 专属顾问
扫码备注: 私有化 + 公司名