Goodbye Postman: Why Bruno is the Perfect Match for API Management and Testing?

Development tutorial - IT technology blog
Development tutorial - IT technology blog

The Frustration of Sharing APIs in Real-World Projects

I once worked on a microservices project for a bank with a team of five. At that time, we used Postman to test APIs and encountered a very exhausting scenario. Every time I added a new endpoint or modified a JSON structure, I had to export the Collection into a JSON file several megabytes in size. Then, I would send this file via Slack or attach it to Jira so my teammates could re-import it.

The real nightmare began when two people edited the same Collection simultaneously. When uploading the file, data would get overwritten, causing critical test scripts to be lost. Version control back then was a disaster. Furthermore, many financial companies prohibit pushing API data to third-party clouds. Meanwhile, Postman constantly forces users to log in and sync data to their servers.

Why are Postman and Insomnia Becoming Bloated?

The problem isn’t the feature set, as Postman is inherently powerful. The frustration lies in the design philosophy. Postman is transforming into a complex SaaS platform rather than a pure development tool.

  • Git Conflicts: Postman’s export file is a massive JSON blob on a single line. When committed to Git, merge conflicts are unavoidable. You almost cannot resolve these conflicts manually.
  • Forced Cloud Usage: Requiring a login to use advanced features raises security concerns. For sensitive projects, this is a major drawback.
  • Resource Intensive: Postman often consumes anywhere from 500MB to over 1GB of RAM. Startup speeds are sluggish because it carries too many redundant features.

Common Alternatives

To escape this situation, the developer community usually considers three options:

  1. Swagger/OpenAPI: This tool is excellent for documentation. However, writing automated test scripts within this interface is quite cumbersome.
  2. VS Code REST Client: This extension is great, storing APIs in .http files. However, the pure text interface makes it difficult to manage hundreds of complex APIs.
  3. Accepting Reality: Continue using Postman and live with the chaos. You have to be extremely careful every time you export or import data.

Bruno – A Different Approach to API Management

After many headaches resolving JSON file conflicts, I discovered Bruno. It is an open-source API client built with a Git-friendly mindset. Instead of bundling everything into a single file, Bruno saves each request as a separate .bru file. These files are stored directly in your project directory in a format similar to YAML.

Installing Bruno Quickly

The installation is very lightweight. You can download installers for Windows, macOS, or Linux from the official website. If you’re on a Mac and use Homebrew, you just need to run a single command:

brew install bruno

Creating Collections and Integrating Directly into Git

The biggest difference is that Bruno requires you to choose a folder on your computer when creating a Collection. I usually select an /api-tests folder located right inside the project’s source code. When you create a GET request, Bruno generates a file with content like this:

get {
  url: https://api.itfromzero.com/v1/posts
  body: none
  auth: none
}

query {
  page: 1
  limit: 10
}

This structure is extremely readable. Since it’s plain text, your colleagues only need to git pull to have the full API suite ready for testing. You don’t need to manually import anything. If a conflict occurs, you can easily use VS Code to compare and fix it just like you would with regular code.

Environment Management

Bruno fully supports environments like Local, Staging, or Production. You can create environment files to store URLs or Tokens. Notably, the “Secret” feature helps hide sensitive variables, preventing them from being accidentally committed to GitHub. Variable syntax remains familiar: {{base_url}}/users.

Writing Test Scripts with Standard JavaScript

I once refactored a system with over 50,000 lines of code. A hard-learned lesson was that you must have good test coverage before starting. Bruno allows you to write JavaScript scripts directly in the “Tests” tab to validate responses. For example, to check if an API returns a 200 status and contains an id field:

test("Status code is 200", function() {
  expect(res.getStatus()).to.equal(200);
});

test("Response has user id", function() {
  const data = res.getBody();
  expect(data.id).to.be.a('number');
});

Why I Choose Bruno for Long-term Projects?

In teamwork, the best tool is the one that facilitates the smoothest collaboration. Since switching to Bruno, my team’s workflow has completely changed.

  • Review APIs directly on Pull Requests: When the Backend adds a new API, they simply push the .bru file. I can review the API structure and headers directly on GitHub.
  • 100% Offline: Bruno doesn’t require a login. Even when I’m on a plane without internet, I can open the app and write test scripts as usual.
  • Superior Speed: The application is extremely lightweight and opens instantly. You will never have to stare at a frustrating “Syncing…” loading screen again.

If you’re tired of managing JSON files or worried about security, try installing Bruno today. It might feel a bit strange at first because Bruno auto-saves (there is no Save button). However, the convenience of managing APIs via Git will make you never want to go back to your old tools.

Share: