ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Bruno:以纯文本 `.bru` 文件驱动的离线优先开源 API IDE —— 设计理念、跨平台安装与 Git 协作实战

Bruno:以纯文本 `.bru` 文件驱动的离线优先开源 API IDE —— 设计理念、跨平台安装与 Git 协作实战 Bruno以纯文本.bru文件驱动的离线优先开源 API IDE —— 设计理念、跨平台安装与 Git 协作实战【免费下载链接】brunoOpensource IDE For Exploring and Testing APIs (lightweight alternative to Postman/Insomnia)项目地址: https://gitcode.com/GitHub_Trending/br/brunoBruno 是当前仓库所承载的开源 API 客户端项目它的核心理念是“集合即文件夹、请求即纯文本”集合文件直接存放在本地文件系统中每一条 API 请求都以一种名为 Bru 的简单纯文本标记语言保存为.bru文件因此可以无缝交给 Git 等任意版本控制系统做团队协作与变更审阅。本文将以仓库中的巴西葡萄牙语版项目说明readme_pt_br.md为主线完整讲解 Bruno 的设计哲学、.bru文本格式、跨平台安装方式、多平台运行与 Git 协作工作流并结合仓库源码剖析其底层实现帮助你快速理解并上手这套“文件优先、完全离线”的 API 开发工具。Bruno 是什么对抗“云同步”惯性的 API 客户端Bruno 是一个致力于改变现状的创新型 API 客户端——现状即由 Postman 等同类工具长期塑造的“账号体系 云端同步”模式。与这些工具不同Bruno 从设计上就选择了另一条路线集合直接保存在本地文件夹不使用中心化的在线存储请求信息用Bru 这种纯文本标记语言描述通过Git 或任意版本控制系统进行集合的协作与共享完全离线运行项目明确表示“永远不会never加入云同步能力”因为数据隐私应当掌握在用户自己手中、留在用户自己的设备上。这一“离线优先”的定位并非功能缺陷而是被刻意坚守的产品边界。仓库中的主项目说明 readme.md 与各语言版本如 简体中文版、English 版都反复强调同一理念。上图取自仓库资源 landing-2.png展示了 Bruno 的核心工作界面左侧是存于本地的集合Collection树中间是请求编辑区方法、URL、请求体右侧是带状态码与响应体的 Response 面板。集合、请求与响应都在本地完成闭环不依赖任何远程服务。核心技术集合即文件夹请求即.bru纯文本Bruno 最独特的工程设计在于它的存储模型一个 API 集合对应文件系统中的一个目录目录内的每个请求都是一个.bru文本文件。因为内容是可读的纯文本所以 diff、review、merge 等 Git 操作对 API 集合而言就和操作普通代码一样自然。Bru 标记语言的字段结构仓库中提供了完整的 Bru 格式示例见 packages/bruno-lang/example/request.bru。一个典型的 HTTP 请求文件长这样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, numbers: 91998877665, ... } /body body(typegraphql) { launchesPast { launch_site { site_name } launch_success } } /body script let user John Doe; function onRequest(request) { request.body.user user; } function onResponse(request, response) { expect(response.status).to.equal(200); } /script从中可以提炼出 Bru 格式的几个关键约定顶部键值对声明请求元信息type请求类型、name名称、methodHTTP 方法、url、body-mode、seq集合内排序序号等区块Block用成对标记包裹如params ... /params、headers ... /headers、body ... /body、script ... /script区块内每一行行首的1/0是启用开关1表示该项启用0表示禁用示例中transaction-id {{transactionId}}即为禁用态仍可随{{transactionId}}这类占位符参与变量插值body区块通过type参数区分载荷类型同一文件可书写typejson、typegraphql等多种形式script区块使用 JavaScript 编写请求前置onRequest与响应断言onResponse脚本其中{{...}}是环境变量引用语法。从源码看.bru的解析与类型映射Bru 并不是“注释式约定”的伪格式而是有完整语言工具链支撑的正式格式。仓库中以独立包形态维护了解析器与转换器packages/bruno-langBru 语言工具包其 v2 实现bruToJson.js 等负责.bru文本 ↔ JSON 的双向转换bruno-filestore 的 bru 格式解析桌面应用读写集合时调用的高层封装。以解析入口parseBruRequest为例可以看到文件读取后被转换成的内部 JSON 形态以及meta.type与请求类型的映射规则http→http-requestgraphql→graphql-requestgrpc→grpc-requestws→ws-request缺省情况下统一回落为http-request同时该方法还会从 JSON 中提取meta.seq排序号非数字时默认1、meta.tags、settings并对http.method做大写归一化——源码注释特别说明自定义方法采用直接取值而非upperCase是为了保留特殊字符不被破坏。也就是说你在界面中编辑请求底层本质上是在编辑并序列化这一份结构化的文本模型。结合 formats 目录 可以看到仓库同时支持bru与yml两种存储方言Bruno 也因此在“保留文件即保留数据”的前提下提供了面向团队习惯的灵活性。基于 Git 的团队协作API 集合进入版本控制工作流因为集合就是文件夹、请求就是文本文件Bruno 团队协作的方式和代码协作完全同构用 Git 或任意你喜欢的版本控制工具来协作维护 API 集合。你可以把某个集合目录作为 Git 仓库或仓库子目录提交成员之间通过 Pull Request / Merge Request 来审阅 API 变更。上图来自仓库资源 version-control.png展示的是一个典型的 PR 审阅场景变更文件是Get Users.bru与嵌套目录User/Get Users.brudiff 面板中以绿色高亮新增的请求定义meta信息 HTTP 方法与 URL。对团队而言这意味着集合变更可以走代码评审流程做到“改 API 与改代码同权同责”每个历史版本、每次合并都有完整留痕可随时回溯与回滚请求、环境、脚本等全部落到可审查的文本不再依赖工具的导出/导入或中心化历史记录。这种“API 定义即代码”的模式正是 Bruno 与“云同步账号体系”工具在协作形态上的本质差异。离线优先与数据隐私为什么“永不云同步”反而是特性项目说明明确表达了对数据隐私的立场Bruno 完全离线且未来也没有加入云同步的计划数据应始终保留在使用者的设备上。这也解释了它在工程上的一切选择没有“登录账号才能使用”的强制前提打开即用本地集合同步与共享的职责被让渡给 Git 等用户自选工具数据流向由团队自行掌控而非第三方服务隐私边界清晰本地明文、可控备份、可离线审计。从仓库结构看这一立场同样体现在发布物上桌面端实现集中在 packages/bruno-electron而面向自动化场景的 packages/bruno-cli 让同一批本地集合可被命令行直接驱动——所有能力都建立在“本地文件即真源”这一前提之上不依赖任何在线状态。安装 Bruno二进制下载与跨平台包管理器项目说明提供了两种安装途径一是官网二进制下载Mac / Windows / Linux 桌面安装包二是通过各大平台的包管理器安装。以下命令完整来自 readme_pt_br.md# 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 # Linux 上通过 AptDebian/Ubuntu 系 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对 Linux 的 Apt 安装稍作拆解便于理解每一步作用创建keyrings目录并安装gpg、curl从 Ubuntu keyserver 拉取 Bruno 的 GPG 签名公钥gpg --dearmor将其转换为二进制格式写入/etc/apt/keyrings/bruno.gpg设置文件权限为644使所有用户可读新增 apt 源文件/etc/apt/sources.list.d/bruno.list声明signed-by指向刚导入的密钥apt update后安装bruno。仓库根目录的主说明 readme.md 中还额外给出了 Arch Linux 通过 AUR 安装的示例yay -S bruno使用 AUR 的用户可参考。安装完成后即可打开 Bruno 创建或克隆集合目录开始本地请求调试。同一份集合多平台运行Bruno 提供跨 macOS、Windows、Linux 的桌面客户端同一份本地集合可以在任意平台打开与执行无需转换格式。上图为仓库中的多平台运行示意 run-anywhere.png。从工程实现看“同一套集合、多端运行”依赖分层清晰的代码组织桌面应用packages/bruno-app承载界面与交互Electron 主进程与 IPC 层位于 packages/bruno-electron而请求解析、Bru 语言与通用逻辑分别沉淀在 bruno-filestore、bruno-lang 与 bruno-common 等独立包中。由于存储格式统一、解析逻辑收敛于共享包不同平台上的行为才能保持一致这也是“跨平台运行 纯文本存储”能够成立的基础。仓库内配套资源导读围绕主说明仓库还提供了若干可直接查阅的配套文档与代码按需深入即可主项目说明readme.md英文版以及 docs/readme 目录下的 20 余种语言翻译版含 中文简体、中文繁体贡献指南contributing_pt_br.md葡萄牙语版贡献指南其余语言版本位于 docs/contributing发布到新包管理器当社区希望把 Bruno 上架到更多包管理器时需遵循 publishing_pt_br.md 中的流程Bru 格式示例与语言实现示例请求文件、语言工具包、filestore 解析实现许可证license.mdMIT。商标与许可证名称商标Bruno是 Anoop M D 的注册商标Logo 来源Logo 图样源自 OpenMoji采用 CC BY-SA 4.0 许可项目许可证整体代码以 MIT 许可证 开源。如何参与贡献如果你希望以代码方式改进 Bruno可以参考 葡萄牙语版贡献指南以及 docs/contributing 下对应语言版本。即使不以代码参与也可以在日常使用中反馈 Bug、提出符合自身场景的功能诉求——这些同样是对项目的重要贡献。若你在使用中希望验证或自动化执行本地集合仓库中还提供了 bruno-cli 与npm install -g usebruno/cli的命令行运行途径可与桌面端共用同一份.bru集合进一步打通“本地编辑 CI/CD 执行”的离线优先工作流。【免费下载链接】brunoOpensource IDE For Exploring and Testing APIs (lightweight alternative to Postman/Insomnia)项目地址: https://gitcode.com/GitHub_Trending/br/bruno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表