Bruno 开源 API 客户端(Bru 语言 · 离线优先 · Git 协作):以官方俄语 README 为纲的全面技术解读

发布时间:2026/11/5 3:54:01

Bruno 开源 API 客户端(Bru 语言 · 离线优先 · Git 协作):以官方俄语 README 为纲的全面技术解读 Bruno 开源 API 客户端Bru 语言 · 离线优先 · Git 协作以官方俄语 README 为纲的全面技术解读【免费下载链接】brunoOpensource IDE For Exploring and Testing APIs (lightweight alternative to Postman/Insomnia)项目地址: https://gitcode.com/GitHub_Trending/br/bruno本文以仓库中官方文档 docs/readme/readme_ru.mdBruno 项目官方俄语介绍页为骨架结合本仓库的源码、.bru格式范例与测试夹具展开成文。核心覆盖Bruno 是什么、为何离线优先、集合以纯文本 Bru 语言落盘于文件系统、Git/任意版本控制协作、跨平台运行以及安装、CLI 与 Docker 的实战路径。读完本文你可以掌握 Bruno 的定位与数据模型能够用一个git clone或一句bru run在自己的机器上跑通 API 测试。一、项目定位面向探索与测试 API 的开源 IDEBruno 是一款开箱即用、面向探索与测试 API 的开源 IDE项目主页与各语言 README 均以此为核心定位。仓库根目录 readme.md 中将其表述为Opensource IDE for exploring and testing APIs而关联文档 docs/readme/readme_ru.md 进一步说明Bruno 是一个新颖而创新的 API 客户端其目标是变革 Postman 及类似工具所代表的既有格局。需要注意这句话是项目自身的愿景陈述而非一个已被第三方验证的结论因此本文不将其作为性能或市场地位的事实引用仅作为项目的自我定位呈现。从仓库结构可以确认该定位落到了实处——仓库是典型的多包monorepo工程桌面应用本体位于 packages/bruno-appElectron 壳层位于 packages/bruno-electronCLI 位于 packages/bruno-cli。俄语 README 明确指出桌面版由Next.js React Electron构建并支持本地集合локальные коллекции这与仓库中的技术选型一一对应界面框架Next.js React见 packages/bruno-app其package.json中声明了相关依赖桌面封装Electron见 packages/bruno-electron由src/index.js作为进程入口样式Tailwind见 packages/bruno-app/tailwind.config.js编辑器CodeMirror编辑器相关代码集中在packages/bruno-app/src/components/codemirror附近状态管理Redux大量packages/bruno-app/src/providers与selectors基于 Redux 组织文件系统监听chokidar详见 packages/bruno-docs 与bruno-electron中对工作区文件的观察逻辑需要说明此处的技术栈清单综合了 docs/contributing/contributing_ru.md 的明确声明与仓库源码结构读者可依据上述路径在源码中逐一印证。二、核心数据模型集合即文件系统上的一个文件夹这是 Bruno 与 Postman 类工具最本质的差异也是俄语 README 中反复强调的基石Bruno хранит ваши коллекции непосредственно в папке в вашей файловой системе.Bruno 将你的集合直接存放在文件系统的一个文件夹里。换句话说没有私有的云端数据库、没有隐藏的服务端存储一个集合就是一个目录目录里是若干用 Bru 语言编写的文本文件。这种集合即目录的模型带来了三个直接后果均可在源码中验证文本可读、可 diff。集合内容由纯文本标记语言 Bru 写成详见下一节因此天然适合版本控制。无供应商锁定。你随时可以复制、归档、迁移整个集合目录。协作基于通用工具。Git 或任意你喜欢的版本控制系统就是协作工具详见第四节。在仓库的测试夹具里可以直观看到集合 目录 .bru文件的布局。以 packages/bruno-cli/tests/runner/fixtures/collection-json-from-pathname/collection/collection.bru 为根集合文件同目录下嵌套folder_1、folder_2等子文件夹子文件夹内各有自己的folder.bru再往下就是一个个请求.bru文件——树状结构与磁盘目录结构一一对应。三、Bru一种用于描述 API 请求的纯文本标记语言俄语 README 明确指出为了保存 API 请求的信息Bruno 使用一种纯文本标记语言 Bru。这一设计是本项目最值得深挖的实现细节仓库中有完整独立的解析包 packages/bruno-lang 与其语言规范目录 packages/bruno-lang/v2/src。3.1 一个真实的请求文件长什么样以官方示例 packages/bruno-lang/example/request.bru 为例一个典型的 HTTP 请求.bru文件包含type http-request name Send Bulk SMS method GET url https://api.textlocal.in/bulk_json?apiKeysecretnumbers919988776655messagehellosender600010 body-mode json seq 1 params 1 apiKey secret 1 numbers 998877665 1 message hello /params headers 1 content-type application/json 1 accept-language en-US,en;q0.9,hi;q0.8 0 transaction-id {{transactionId}} /headers body(typejson) { apikey: secret, ... } /body可以看到 Bru 是分段式block 风格的键值文本顶部是请求的标量属性type如http-request、name、method、url、body-mode、seq执行序号等params、headers等用段名 内容 /段名的成对标记包裹段内每行以启用标志 键 值的形式书写其中数字1/0表示该参数或请求头是否启用即 GUI 中的勾选框状态headers的值支持{{变量}}插值语法示例中transaction-id使用了{{transactionId}}变量可来自环境、集合变量等body(typejson)支持按类型区分的请求体示例中同时演示了json与graphql两种 bodyscript段书写请求前后脚本示例中的onRequest(request)会在请求发送前改写 bodyonResponse(request, response)则可用expect(response.status).to.equal(200)做断言测试断言语义由 packages/bruno-js 的脚本运行环境提供。3.2 Bru 不是 JSON而是为 diff 而生的文本之所以用 Bru 而非 JSON/XML可从解析器实现反推其设计意图bru 文本与 JSON 的双向转换逻辑位于 packages/bruno-lang/v2/src/bruToJson.js 与 packages/bruno-lang/v2/src/jsonToBru.js而包的统一出口 packages/bruno-lang/src/index.js 将bruToJsonV2、jsonToBruV2、环境变量互转、集合文件互转等能力集中导出。文本化 双向往返转换round-trip意味着修改一个.bru文件只是几行文本变更git diff 清晰可读、可审查。这正好回应了 README用 git 协作的前提——协作的前提是变更可读。3.3 集合级与文件夹级 Bru 文件集合目录里不止请求.bru还有集合级与文件夹级的配置.bru。以测试集合 packages/bruno-tests/collection/collection.bru 为例headers { check: again token: {{collection_pre_var_token}} collection-header: collection-header-value } auth { mode: bearer } auth:bearer { token: {{bearer_auth_token}} } vars:pre-request { collection_pre_var: collection_pre_var_value collection_pre_var_token: {{request_pre_var_token}} collection-var: collection-var-value number coll_num: 100 boolean coll_bool: false object coll_obj: {scope:collection} } script:pre-request { const shouldTestCollectionScripts bru.getVar(should-test-collection-scripts); ... } tests { ... } docs { # bruno-testbench This is a test collection ... }由此可看出集合级 Bru 支持的关键机制headers/auth继承集合定义默认请求头与认证此处为bearer模式子请求无需重复填写即可继承vars:pre-request集合变量支持{{变量}}互相引用如collection_pre_var_token: {{request_pre_var_token}}还可用number、boolean、object等类型注解强制变量类型多行...用于对象/多行字符串script:pre-request集合级预请求脚本可调用bru.getVar / bru.setVar读写变量tests集合级断言脚本上述样例中test(collection level script, ...)使用expect(...)断言docsMarkdown 风格的集合文档说明。文件夹级.bru结构与集合级类似实现同理从而支持集合 → 文件夹 → 请求三级的默认值、脚本与变量继承。四、协作方式Git 与任意版本控制系统这是俄语 README 除离线外的第二个核心卖点Для совместной работы над коллекциями API можно использовать git или любой другой контроль версий по вашему выбору.可以用 git 或你选定的任意版本控制系统在 API 集合上进行协作。由于集合只是磁盘上的文本目录你的协作流程与协作普通代码别无二致克隆或分享集合目录仓库内 packages/bruno-tests、tests 下大量以目录形式组织的测试集合即是这种形态的实例成员各自在本地修改.bru文件通过 PR / MR 走常规代码评审合并后其他人pull即获得最新的请求、环境与脚本。没有集中式服务器、没有多人同时编辑同一份云文档的锁冲突——一切由你既有的 Git 工作流接管。仓库中的 Git 集成测试如 tests/workspace/git-backed-collections也印证了git 作为一等公民的开发方向。五、离线优先数据留在你的设备上俄语 README 毫不含糊地声明了产品的隐私立场Bruno работает только в автономном режиме. Добавление облачной синхронизации в Bruno не планируется.Bruno 仅在离线模式下工作且未来也不计划加入云同步。结合上文可以理解其中的因果链因为集合以明文 Bru 落在本地文件系统、协作走 Git云端同步既非必要也与其数据主权理念相悖。Bruno 团队珍视用户数据隐私认为数据应当留在你自己的设备上长期愿景与路线图详见官方 Discussion俄语页中给出的外部链接均为跳转至项目官方的在线讨论与文档站点这里不再展开列出外部 URL。从工程实现看离线优先体现在两个层面桌面端 packages/bruno-electron 通过 chokidar 等文件监听能力直接读取/观察本地集合目录应用本身不需要后端服务即可完成集合的增删改查命令行的运行与测试亦完全在本地执行见第六节天然适配 CI/CD 与无网络环境。需要客观说明的一点README 所声明的无云同步是对产品当前形态与规划的陈述若要了解最新状态例如是否存在任何在线增值服务应以官方站点与实际发布版本为准本文不进行任何额外推断。六、安装、CLI 与 Docker三种运行形态英文主 README readme.md 对如何获得、运行 Bruno 给出了比俄语页更完整的操作清单以下结合两者整理。它们与本仓库的关系是仓库是这些发布物的源码来源例如 CLI 的实现位于 packages/bruno-cli/src其index.js、commands目录分别承载命令注册与参数解析。6.1 桌面客户端安装Mac / Windows / Linux官方提供各主流平台二进制下载同时支持多种包管理器安装# Mac 上使用 Homebrew brew install bruno # Windows 上使用 Chocolatey choco install bruno # Windows 上使用 Scoop scoop bucket add extras scoop install bruno # Windows 上使用 winget winget install Bruno.Bruno # Linux 上使用 Snap snap install bruno # Linux 上使用 Flatpak flatpak install com.usebruno.Bruno # Arch Linux 上使用 AUR yay -S bruno # Linux 上使用 Apt通过官方 Debian 仓库 sudo mkdir -p /etc/apt/keyrings sudo apt update sudo apt install gpg curl curl -fsSL https://keyserver.ubuntu.com/pks/lookup?opgetsearch0x9FA6017ECABE0266 \ | gpg --dearmor \ | sudo tee /etc/apt/keyrings/bruno.gpg /dev/null sudo chmod 644 /etc/apt/keyrings/bruno.gpg echo deb [archamd64 signed-by/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable \ | sudo tee /etc/apt/sources.list.d/bruno.list sudo apt update sudo apt install bruno上述命令中的包源地址来自上游发布渠道如需完整、最新的发行渠道请查阅官方下载页。6.2 Bruno CLI命令行运行集合CLI 让你摆脱 GUI 也能运行集合尤其适合自动化测试与 CI/CD。通过 npm 全局安装后进入集合目录即可运行npm install -g usebruno/cli # 运行集合中的全部请求 bru run # 运行单个请求 bru run request.bru # 针对指定环境运行某个文件夹 bru run folder --env LocalCLI 的代码结构位于 packages/bruno-cli/src/commands命令解析与执行入口与 packages/bruno-cli/src/runner集合运行器运行结果的报告能力由 packages/bruno-cli/src/reporters 提供。bru run的所有细节环境变量、超时、报告格式等可参考其官方 CLI 文档也可以直接阅读 CLI 包内自带的使用说明 packages/bruno-cli/readme.md 与变更日志 packages/bruno-cli/changelog.md。6.3 用 Docker 运行 CLI免装 Node若不想在宿主机安装 Node.js/npm可使用官方 CLI 容器镜像在 CI/CD 或本地直接跑集合docker pull usebruno/cli:latest # 将当前目录挂载进容器并运行集合 docker run -v $(pwd):/bruno usebruno/cli run主 README 中说明镜像在每次 CLI 发布时同步推送到 Docker Hub 与 GitHub Container Registry并提供alpine、debian变体、覆盖linux/amd64与linux/arm64架构。仓库内可查看镜像相关构建材料 packages/bruno-cli/docker 及冒烟测试脚本smoke-test.sh实际可用的镜像 tag 组合请以发布页为准。七、从仓库再往前走一步如何亲自动手直接体验桌面端下载对应平台的 Bruno 安装包选择一个本地目录作为集合根目录新建请求、保存后立刻在该目录中查看生成的.bru文本文件。零 GUI 验证 Bru 格式对照 packages/bruno-lang/example/request.bru 手工编写一个http-request再用bru run运行验证能直观理解文本即集合。阅读解析器加深理解bru 文本 ⇄ JSON 双向转换实现集中在 packages/bruno-lang/v2/src其对应测试如 packages/bruno-lang/v2/tests/bruToJson.spec.js以大量.bru与.jsonfixture 验证转换正确性是学习 Bru 语法边界注解、嵌套、多行值、collection/folder 级块的最佳教材。探索脚本能力请求脚本、断言与内置库的运行语义在 packages/bruno-js尤其sandbox、runtime子目录中实现测试集合 packages/bruno-tests/collection 展示了从简单断言到认证、Cookie、请求链等复杂场景的用法。八、关于本地化文档与后续入口俄语 README 是官方多语言 README 家族的一员仓库 docs/readme 目录收录了简体中文、正体中文、日文、韩文、德文、法文、阿拉伯文等 20 余种语言的版本其本身内容与英文主 README readme.md 保持一致。若想继续深入仓库内还有参与贡献指南俄语版docs/contributing/contributing_ru.md发布流程说明publishing.md多语言版本见 docs/publishing代码与工程规范CODING_STANDARDS.md、governance.md许可证license.mdMIT说明本文除基于俄语 README 与仓库源码外还参考了仓库根目录英文 readme.md 的安装/CLI/Docker 操作细节以保证命令的完整与准确其中链接指向的在线 Discussion、官方文档站点等属于仓库外资源本文不再输出相关外部 URL具体请以官方渠道为准。【免费下载链接】brunoOpensource IDE For Exploring and Testing APIs (lightweight alternative to Postman/Insomnia)项目地址: https://gitcode.com/GitHub_Trending/br/bruno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/5 11:01:46

Windows批量给文件名加后缀:cmd、PowerShell与批处理脚本实战

Windows 批量给文件名加后缀,是日常办公和开发运维里出现频率很高的操作:导出的日志要追加日期,配置文件要追加环境标识,备份文件要追加 .bak,图片素材要追加批次号。手动按 F2 一个个改,少说几十个文件&am…

2026/11/4 9:27:44

扩增子分析全流程解析:从16S/ITS到二三代测序与可视化

引言这年头做微生物组研究,离了扩增子测序几乎是寸步难行。16S和ITS这两个经典的标记基因,在过去十几年里撑起了肠道、土壤、水体、植物根际等无数微生态研究方向的基本盘。但恰恰是这个“基本盘”,这几年正在经历一轮非常明显的技术换挡&…

2026/10/23 22:30:11

PyTorch Hook机制实战:可视化神经网络中间层特征图

1. 为什么要可视化神经网络的中间层输出很多初学者在跑 PyTorch 模型时,往往只关注最后的 loss 和 accuracy,对网络内部发生了什么基本“两眼一抹黑”。模型训练好了、测试准确率也挺高,但一旦效果不好,就不知道问题出在哪里&…

2026/11/5 10:43:56

工业测温方案解析:ADS122U04与STM32F042K6的UART高精度RTD采集设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 10:43:56

STM32L031+ADS122U04:UART接口24位ADC实现PT100高精度温度采集

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 10:43:55

基于ADS122U04与MK24的HVAC高精度温度采集系统设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 10:38:55

Univer开源Web Office引擎:Canvas渲染与协同编辑实战解析

第一次看到Univer这个项目名字的时候,我下意识以为是哪个海外团队用“University”做的教育类产品。直到我翻完它的仓库和在线Demo,才发现自己差点错过一个好东西——这是一个把“在线电子表格、文档、幻灯片”全部做成开源引擎的Web Office项目&#xf…

2026/11/5 10:38:55

Foxmail数字签名与加密配置全指南:S/MIME证书实战落地

1. 邮件签名与加密不是“加个水印”或“点个锁图标”那么简单很多人第一次在Foxmail里找“签名”功能,点开设置就以为万事大吉——填上姓名、电话、公司logo,保存退出,邮件发出去带个固定落款,就觉得“搞定”。等真遇到客户问“你…

2026/11/5 10:38:55

LVS负载均衡优化:FWM标记与持久化服务实践

1. 为什么需要优化LVS调度?在企业级负载均衡场景中,Linux Virtual Server(LVS)作为四层负载均衡的经典解决方案,其性能表现直接影响着整个业务系统的稳定性。但在实际生产环境中,我们常常会遇到两个典型问题…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑