Bruno:开源 API 客户端新势力
Nina Santos | 2026-09-01T08:58:44 | JavaScript, DevOps
介绍 Bruno 的离线优先理念、Git 友好的文件存储、脚本能力、环境管理以及从 Postman 迁移的完整方案。
# Bruno:开源 API 客户端新势力 ## 为什么关注 Bruno Bruno 是一个开源的 API 客户端,与 Postman 最大的区别在于:集合文件直接存储在本地文件系统中,可以用 Git 进行版本控制,不依赖云端同步。 ## Bru 文件格式 ```bru meta { name: Get User By ID type: http seq: 1 } get { url: {{baseUrl}}/api/users/:id body: none auth: bearer } params:path { id: 1 } auth:bearer { token: {{authToken}} } headers { Accept: application/json X-Request-ID: {{$guid}} } assert { res.status: eq 200 res.body.data.id: isNumber res.body.data.name: isString res.body.data.email: contains @ } script:pre-request { const token = bru.getEnvVar("authToken"); if (!token) { const resp = await bru.runRequest("Auth/Login"); bru.setEnvVar("authToken", resp.body.token); } } tests { test("user has correct structure", function() { const data = res.getBody().data; expect(data).to.have.property("id"); expect(data).to.have.property("name"); expect(data).to.have.property("email"); expect(data).to.have.property("createdAt"); }); } ``` ## 目录结构 ``` api-collection/ bruno.json # 集合配置 environments/ development.bru staging.bru production.bru Auth/ Login.bru Register.bru Refresh Token.bru Users/ List Users.bru Get User.bru Create User.bru Update User.bru Delete User.bru .gitignore ``` ## 环境配置 ```bru # environments/development.bru vars { baseUrl: http://localhost:8080 testUser: admin testPassword: admin123 } vars:secret [ authToken ] ``` ## CLI 运行 ```bash # 安装 CLI npm install -g @usebruno/cli # 运行整个集合 bru run --env development # 运行单个请求 bru run Users/Get\ User.bru --env development # 输出 JUnit 格式(CI/CD) bru run --env staging --format junit --output results.xml ``` ## 从 Postman 迁移 ```bash # 导出 Postman Collection (v2.1) # 在 Bruno 中: File -> Import Collection -> Postman Collection # 也支持命令行转换 npx postman-to-bruno collection.json ./output-dir ``` Bruno 的 Git 友好特性让 API 定义成为代码仓库的一部分,团队协作不再依赖付费的云同步服务。