API特技替身Stunt:95个适配器本地模拟

【这是什么】
Stunt 是一个在本地运行“API 替身”的命令行工具,安装方式是 brew install --cask stuntapi/tap/stunt。执行 stunt demo 后,你会在本地端口得到一个状态完整的 Stripe 风格模拟环境,它返回的 curl 命令是真实可用的:创建一笔费用、再列出它、捕获它,并观察签名后的 webhook 触发到本地接收端。全过程使用合成数据、完全离线,不需要任何 Stripe 账户。
它目前内置 95 个适配器(Stripe、Twilio、GitHub、S3、Salesforce 等),每个适配器由 YAML + 沙箱化 Starlark 处理器 + 合成固定数据组成。适配器运行在 Starlark 虚拟机中,没有主机 I/O 或网络访问,因此安装陌生人的适配器被设计得像安装 npm 包一样安全。状态则保存在引擎原语中:SQLite 集合、KV、blob 存储、HMAC 令牌、带真实提供商签名方案的 webhook 发射器。所有执行是确定性的——可注入时钟、种子随机数生成器。
用作者自己的话概括:WireMock/Prism/MSW 擅长静态和基于 schema 的 mock,而 Stunt 是一个“可运行的替身”——创建、列出、修改、webhook、认证过期、游标分页、状态机,你不需要自己写这些东西。

【背景 / 谁做的】
作者是 Alessandro(https://polymatto.com/about,X 上 @polyMatto),自称拥有二十多年经验的工程师,从意大利到伦敦,经历覆盖大宗商品交易、市场数据、金融科技、支付、区块链 RPC 基础设施。他说自己“二十多年来一直在集成他人的 API”,但测试的故事从未改善:沙盒账户、CI 中的真实密钥、速率限制、因 mock 与真实行为不符导致的脆弱测试套件。
他构建 Stunt 的直接动机是:想要一个能真正模拟 API 状态行为的本地替身,而不是再写一遍静态 mock 逻辑。这个项目是他发布在 Hacker News 的第一个帖子,他自称预期会“扑街”,并说很快会有更多,可能下一个帖子是“wintty”。
【怎么获客】
Stunt 目前的获客路径基本围绕开发者社区和工具生态:
- Show HN 首发:直接面向 Hacker News 的高密度技术人群,帖子中给出完整命令行演示,并主动邀请对 Starlark 沙箱安全性“挑刺”,制造讨论点。
- Homebrew cask 分发:一条命令安装,极大降低试用门槛。对 CLI 工具,安装摩擦越小,转化率越高。
- 文档站
stuntapi.com:作为产品说明书和后续商业化的入口,承载更多使用场景和适配器列表。 - 适配器生态策略:如果用户需要的 API 不在 95 个里,可以用
stunt adapter import openapi|har|proto自建并提交 PR,这实际上是让用户成为贡献者,形成社区增长飞轮。 - 个人品牌:作者在 X/Twitter 和博客
polymatto.com上有工程背景背书,Open Source 项目自带“真实经历叙事”,容易引发同类集成工程师的共鸣。
没有看到付费广告或线下销售动作,属于典型的开发者工具早期冷启动。

【验证情况 / MRR】
截至帖子发布,Stunt 没有公开 MRR 或收入数据。验证主要体现在技术侧和社区早早期反馈:
- 作者用 CI 驱动真实提供商 SDK 测试适配器,包括
stripe-go、aws-sdk-go-v2(真实 SigV4)、go-github、twilio-go、go-shopify,以及 Node 三件套stripe-node、octokit、twilio-node。 - 这套测试框架确实捕获了真实错误:Stripe 金额字段以 JSON 字符串返回,导致类型化 SDK 直接拒绝响应;GitHub 分页 Link 头指向生产环境,octokit 直接跟随到了真实
api.github.com。这是非常有力的技术验证,证明适配器不是纸面 mock。 - 作者自述是 HN 第一帖,预期“扑街”,说明当前阶段仍以获取早期关注和测试反馈为主,尚未形成稳定的用户规模和商业闭环。
所以,Stunt 目前处于 “真实可用、已验证技术路线、商业化未启动” 的早期阶段。
【对一人公司的可复制性】
这个项目对一人公司具有很高的参考价值,尤其是“一个人如何用有限资源做一件看起来很大的事”。
- 用简单原语构建复杂生态:95 个适配器没有用 95 套独立代码,而是统一抽象成“YAML + Starlark + 合成数据”。一人公司应优先找到那个能覆盖长尾需求的“元结构”,而不是逐点实现。
- 自动化质量验证代替人工信心:作者没有靠“我手写了很多 mock”来赢得信任,而是让真实 SDK 去跑自己的二进制。这种 CI 驱动的真实验证,是低成本、高可信度的护城河。
- 主动限制范围:作者明确“宁愿做好真实集成实际使用的流程,而不是勾选每个端点”。对一人公司来说,克制功能野心、聚焦高频路径,是生存关键。
- 安全默认值降低第三方贡献门槛:安装陌生人适配器被设计成安全操作,这直接鼓励了社区 PR。如果 OPC 想借助外部力量扩展产品,必须有一个让贡献者“即使搞砸也不会造成伤害”的安全机制。
- 分销渠道极轻:一个 Homebrew cask + 一个文档站,就把产品送到了目标用户手里。OPC 做开发工具,最简单的分发往往是最有效的。
- 个人经历是天然营销材料:二十多年 API 集成的痛点,比任何广告文案都有说服力。OPC 创始人自己的职业履历,就是最好的信任状。
但要清醒:95 个适配器的维护压力不是免费的。即使有自动化测试,上游 API 一旦变更,Starlark 适配器仍需持续更新。这是 OPC 复制此模式时要最先评估的成本。
【风险与机会】
风险
- 适配器维护债:95 个非官方适配器对一人公司是沉重负担。API 变更、字段调整、签名算法变化都会导致替身“失真”,用户一旦发现 mock 行为与真实环境不符,信任立即崩盘。
- 定位与用户预期:作者承认“适配器是非官方的,且按保真度排名,并非 API 完整覆盖”。这很容易让第一次接触的用户误以为它应该完全兼容所有端点,如果文档/产品内没有反复强调,差评会集中在“某功能不支持”上。
- 平台依赖:Windows 目前是脚本安装而不是默认 winget 源,会损失一部分企业开发者;Homebrew 分发也只覆盖 macOS 生态。
- 商业化空白:开源工具要是停留在“GitHub 上有星星”阶段,很难变成可持续收入。Stunt 若没有云托管、企业版、支持合同或付费适配器市场,作者的时间会被维护吞噬殆尽。
- 法律灰色地带:模拟 Stripe/GitHub 等真实 API 的签名和 webhook 机制,虽然用于测试,但大规模分发时可能存在商标或条款层面的争议。
机会
- AI Agent 测试的增量市场:AI 编码代理/Agent 必然调用大量外部 API,而本地替身可以在无密钥、无网络的环境中测试 Agent 的 tool 调用路径。Stunt 的状态模拟能力正好契合这一需求,未来可以打出“API Agent 的模拟器”标签。
- 适配器市场平台化:如果第 96 个、第 196 个适配器都来自社区,Stunt 实际上可以成为一个“API 替身分发市场”。类似 Docker Hub 对容器镜像的角色,谁掌握分发入口,谁就掌握生态。
- 导入工具是杀手级用例:
stunt adapter import openapi|har|proto允许用户从现有规范自动生成适配器。这意味着 Stunt 不一定要自建全部适配器,而是提供一个“转换引擎”,企业可用自己的 OpenAPI 文档生成内部替身,这直接打开 B 端私有化场景。 - CI/CD 原生集成:若后续能封装成 GitHub Action、pre-commit 插件或 CircleCI orb,就能嵌入开发者的既有工作流,把一次性试用变成日常依赖。
- 企业合规需求:很多大公司不希望 CI 依赖第三方沙盒或真实密钥,本地、离线、确定性的替身库有合规价值,可以销售私有化部署方案或企业专属适配器包。
Stunt 目前是一个“小而锋利”的开发者工具,95 个适配器既是负担也是壁垒。这个项目能否从“作者实用工具”变成“OPC 可持续生意”,取决于它能否抓住 AI Agent 测试浪潮,并把适配器生态做成平台。
信息来源:Hacker News
- 第一步:用 Homebrew cask 打包 CLI,一条命令 `brew install` 完成分发
- 第二步:用 YAML 定义适配器元数据 + Starlark 沙箱处理器生成状态行为
- 第三步:用 SQLite 集合/KV/blob 与 webhook 发射器实现确定性状态原语
- 第四步:用真实 SDK(stripe-go、octokit 等)在 CI 中跑适配器做保真度验证
- 95 个适配器维护债重,上游 API 变更即失真
- 平台依赖:仅 Homebrew/macOS,Windows 无默认源
- 模拟真实 API 签名与 webhook 存在商标/条款争议
- 无 MRR 与商业化路径,作者时间易被维护吞噬