抛弃Postman?Hoppscotch vs Bruno 真实对比:你的API集合应该存在Git里

👉 工具网址:https://hoppscotch.io

2026年3月,我卸载了Postman。直接的导火索是它一次更新把集合变量移到了三层菜单深处,但真正的原因是一堆摩擦点——单独看都算小问题,累积起来却让这个工具变得很不顺手。离线使用必须登录、免费版工作区协作用户数限制、还有那个2018年我装它时它还是个轻量HTTP客户端,现在却变成了一个包含mock服务器、文档生成器和监控面板的“API平台”——这些东西我从来没碰过,也不想学。

两开源替代品一直在推荐列表里出现:Hoppscotch和Bruno。Hoppscotch自称是“开源API开发生态系统”——一个基于浏览器的工具,可以运行集合请求、生成代码片段、支持REST、GraphQL、WebSocket和MQTT。Bruno则自称是“开源API客户端,它将集合直接存储在你的文件系统中”——一个离线优先的桌面应用,集合就是纯文本文件,你可以和代码一起用Git做版本管理。

我用了它们一个月,日常开发中测试一个Node.js REST API(37个端点,6个资源组)和一个GraphQL API(15个查询和变更)。下面是我的对比。

理念的分水岭:浏览器 vs 文件系统

Hoppscotch和Bruno最根本的区别不在于功能,而在于你的API集合存放在哪里,谁控制它们。

Hoppscotch运行在浏览器里。默认情况下,你的集合、环境变量和请求历史都保存在浏览器的本地存储中。你可以将它们同步到Hoppscotch云端账号,或者自己搭建后端服务自托管,但主要界面是网站在hoppscotch.io上。这既是Hoppscotch最大的优势(零安装、任何有浏览器的机器都能用),也是它最大的弱点——除非你手动导出,否则API集合就困在浏览器存储里。

Bruno是一个桌面应用。你的集合以纯文本文件的形式存放在你文件系统的目录里——每个请求是一个.bru文件,看起来像简化的HTTP消息。环境变量和集合设置也是纯文本文件。这是Bruno最大的优势:你的API集合是可以放在项目仓库里的头等公民,和代码一起做版本管理,任何文本编辑器都能打开。代价是Bruno只能用在桌面——没有浏览器快速访问,没有移动端界面,也没有一个同事机器上就能打开的共享工作区。

用了一个月后,符合我工作流的胜者是Bruno,但原因很个人化:我的API集合和API服务器代码放在同一个GitHub仓库里。其他开发者克隆仓库后,既能拿到代码也能拿到测试用的API请求。当API变动时,集合也在同一个commit里更新。当我审查一个PR时,diff同时显示了代码变更和对应的请求更新。这种工作流在Hoppscotch里是不可能的,在Bruno里却轻而易举——光这一点就超过了其他所有功能的对比。

Bruno把每个请求存成一个.bru文件,格式很简单:HTTP方法、URL、请求头和请求体都是人类可读的字段。下面是一个GET请求的例子:

“`
meta {
name: GetUserById // 请求名称
type: http // 请求类型
seq: 3 // 在集合中的顺序
}

get {
url: {{baseUrl}}/users/{{userId}} // 使用环境变量
body: none // 没有请求体
auth: bearer // 认证方式:Bearer Token
}

headers {
Content-Type: application/json
}
“`

这个文件在任何文本编辑器里都能看,在任何Git客户端里都能做diff,在任何PR里都能审查。没有导出步骤,没有浏览器存储里的JSON blob,也没有哪天Bruno消失了就不能用的专属格式。

集合管理:两种工具如何组织请求

Hoppscotch用集合来组织请求,里面可以分文件夹和子文件夹。用过Postman的人都很熟悉——左侧边栏树形结构,拖拽排序,可以按顺序运行整个集合或单个文件夹。Hoppscotch还支持在每个请求上写JS预请求脚本和测试脚本,分别在发送请求前和收到响应后运行。

Bruno把请求组织成集合,这些集合实际上是磁盘上的目录结构。Bruno界面的一个文件夹就是你文件系统里的一个文件夹。一个集合就是一个包含了.bru文件的目录。这意味着你可以用任意目录结构来组织集合,然后用文件管理器或终端移动文件来重新排列。它还意味着你可以用shell脚本生成、修改或验证集合——这种用法Hoppscotch不支持,因为它的集合存在浏览器里。

Bruno的脚本模型也使用JavaScript运行时来处理预请求和后响应脚本,和Hoppscotch、Postman类似。API稍有不同——Bruno用自己内置的bru全局对象做断言和变量操作——但心智模型是一样的。如果你写过Postman测试脚本,转过来用Bruno大概花一个小时读文档和尝试就够了。

Hoppscotch在集合管理上的优势是协作工作区。团队成员可以通过Hoppscotch云端账号访问同一个集合,有基于角色的权限和实时更新。Bruno没有这种功能——协作意味着通过Git共享集合文件,两人同时编辑同一个请求时得手动解决合并冲突。

环境变量和动态值

两个工具都支持环境变量,但实现方式体现了各自的设计哲学。

Hoppscotch把环境变量存在浏览器(或云端账号)里,作为键值对。你可以创建多个环境——开发、测试、生产——用一个下拉菜单切换。变量使用<<变量名>>语法,和Postman一致。内置了<<timestamp>><<randomInt>>这类动态变量。环境同步需要Hoppscotch云端账号或自托管后端。

Bruno把环境变量存成JSON文件,放在集合目录里。一个典型的环境文件长这样:

{
  "name": "Development",                // 环境名称
  "variables": {
    "baseUrl": "http://localhost:3000",  // 后端地址
    "apiKey": "dev-key-do-not-use-in-production", // 开发用API密钥
    "userId": "usr_test123"              // 测试用户ID
  }
}

这种方式意味着环境变量也受版本控制。你可以把一个使用localhost地址的开发环境文件提交到仓库,而生产环境文件不提交(或者加密存储)。Bruno支持{{变量名}}插值语法,UI里也有下拉菜单切换环境。

基于文件系统的环境变量管理解决了我们在Postman里遇到的一个问题:环境变量在团队成员之间不同步。因为开发环境文件已经提交到仓库,每个人克隆下来都有相同的配置。生产环境则留在本地。

REST和GraphQL支持

两个工具都支持REST和GraphQL,但GraphQL体验差别明显。

Hoppscotch的GraphQL界面是一等公民。你在分栏编辑器中编写查询,支持Schema自省、自动补全,并且根据Schema生成文档。变量在独立的面板中定义,响应结果带语法高亮和可折叠区块。Hoppscotch还通过WebSocket支持GraphQL订阅——这是Postman很晚才加进来的功能,Bruno不支持。

Bruno的GraphQL支持通过专用的body类型实现。你把查询写在请求体中,变量在JSON块里定义,然后发送请求。Schema自省和自动补全都是内置的——你需要自己知道Schema,或者外部查阅。对于拥有完善文档的GraphQL Schema的团队来说,这只是小麻烦。对于正在探索新GraphQL API或者Schema频繁变动的团队,Hoppscotch的自省和自动补全是巨大的效率优势。

在REST方面,两个工具都能处理完整的请求表面:请求头、查询参数、路径变量、请求体(JSON、form-data、multipart、raw)、认证(Basic、Bearer、OAuth 2.0、API Key)以及带语法高亮的响应查看。差异在细节上而不是能力上——Hoppscotch的响应查看器更精致一些,有可折叠的JSON树;Bruno的响应查看器以纯文本渲染,带可选的语法高亮。

离线与数据所有权问题

Postman最常被诟病的是必须登录,数据存在Postman服务器上。Hoppscotch和Bruno都解决了这个问题,但方式不同。

Hoppscotch可以不登录使用——你的集合存在浏览器的本地存储里。风险在于,一旦清空浏览器数据就会丢失集合,除非你手动导出。自托管后端(Hoppscotch的开源服务器)可以摆脱对Hoppscotch云的依赖,但需要你自己维护基础设施。对个人用户来说,导出功能是救命稻草:定期把集合导出成JSON文件,存在项目仓库里。

Bruno彻底解决了数据所有权问题。你的集合就是硬盘上的文件。如果明天Bruno消失了,你还有这些文件。如果想在多个机器上访问集合,你可以通过Git、Dropbox或者任何文件同步工具来同步。没有云平台,不需要注册账号,也不需要维护任何基础设施。

Postman的API平台还包括mock服务器、API文档托管、带定时测试的监控以及带有工作区和版本历史的高级协作模型。Hoppscotch也在朝这个方向走——它提供云端同步选项和自托管协作后端——但在团队工作流方面还没有达到Postman的成熟度。Bruno则明确选择不构建这些功能,只专注于核心的请求发送体验和Git友好的文件存储。如果你的团队依赖Postman的mock服务器或定时监控,那么Hoppscotch和Bruno目前都替代不了Postman。

哪种工具适合哪种开发者

用了一个月后,答案取决于两个问题:你希望你的API集合存放在哪里?你需要GraphQL自省吗?

选择Hoppscotch,如果你在多台机器上工作,希望无需安装就能用浏览器访问;如果你需要GraphQL Schema自省和自动补全;如果你希望在任何机器上打开浏览器就能立刻使用。Hoppscotch也是那些需要协作工作区、愿意自托管后端或付费使用云端同步的团队更好的选择。

选择Bruno,如果你把API集合和代码一起用Git做版本管理;如果你更喜欢文件系统上的文件而不是浏览器存储;如果你希望自己的集合是纯文本文件,工具没了它还在。Bruno也适合不需要团队协作功能、希望零外部依赖的个人开发者。

两个工具都是开源且免费的。切换成本只有几分钟——装上两个,导入一个集合,看看哪种工作流更适合你。一周之内你就会知道,当要测试一个端点时,你会伸手去拿哪个工具。

直达网址:https://hoppscotch.io

类似文章