Insomnia, Postman, HTTPie e Thunderclient podem ser substituídos por esta ferramenta!
Nós precisamos falar sobre Bruno. Uma alternativa para documentação e testes de APIs WEB.
Se você é um desenvolvedor de software, principalmente um programador web, está acostumado a usar clientes de API para testar suas aplicações.
Esses clientes são ferramentas que podem ser utilizadas para fazer requisições HTTP (ou demais protocolos) para API’s web.
O mais simples e mais conhecido cliente que faz o papel de um navegador é o cURL, que existe desde 1998, mas existem muitos outros com mais complexidade e maior apelo visual, já que o cURL é uma ferramenta de linha de comando.
Entre os mais conhecidos estão:
Mas hoje eu quero apresentar uma ferramenta não tão conhecida mas que me deixou muito interessado dado sua proposta ante as demais listadas acima, mas primeiro, vamos entender o problema delas.
Problema
As ferramentas listadas acima são boas no que fazem, porém tenho algumas ressalvas quanto às funcionalidades e liberdades que cada uma delas apresenta.
Postman se transformou em algo mais que apenas um cliente, é uma plataforma de testes de software, Insomnia idem com muitos anos de melhoria contínua na experiência de desenvolvimento, HTTPie se mostra promissor e com um visual muito agradável e o ThunderClient é muito simples de instalar e usar sendo uma extensão VSCode.
Isso é tudo muito bom, mas todas elas deixam a desejar em um ponto: trabalho colaborativo.
Além das limitações de cada ferramenta, existem limitações virtuais que dependem da assinatura ou compra dos serviços.
Digamos que você crie agora mesmo uma requisição ou conjunto de requisições para testar sua nova API, todas elas funcionarão para este objetivo.
Porém ao convidar um colega para desenvolver junto a você, é necessário exportar essas requisições de alguma forma e enviar o resultado para esta pessoa, certo?
Em algumas dessas ferramentas, isso é possível via algo chamado collection que nada mais é do que um conjunto ou coleção de requisições. Porém algumas não permitem que isso seja feito, e você vai ter que exportar cada uma delas manualmente, ou via cURL ou copiando e colando as informações uma a uma.
Isso se torna insustentável em times de desenvolvimento, até porque uma vez exportada e importada, qualquer mudança feita em uma collection e que deva ser aplicada para toda a equipe, depende de uma nova exportação e envio para cada um dos integrantes, e estes por sua vez devem importar novamente toda a base de requisições ou uma lista de requisições que sofreram mudanças.
E não só isso, como em alguns destes clientes isso não é possível sem o pagamento de uma assinatura ou compra do produto “premium”.
Não me entenda mal, eu acho justo cobrarem por serviços adicionais, porém algumas delas começaram a cobrar por features que eu considero algo básico para o contexto, ou pelo menos deixaram todas as features que trazem diferenciais e melhoria de experiência de uso como parte do produto pago, como a capacidade de trabalhar colaborativamente apenas com o serviço de gerenciamento de versao próprio do Postman, por exemplo.
O principal ponto segue sendo a colaboração, por conta da exportação de collections ficarem em apenas um arquivo, existe certa dificuldade de fazer o gerenciamento de versão.
Ou seja, por manter todas as collections em apenas um arquivo e a necessidade de importar e exportar para gerar as collections e adicioná-las ao git, ainda assim o fluxo de gerenciamento das mudanças nas requisições é trôpego e ineficiente.
Solução
Se a situação acima é um problema pra você e seu time, então assim como eu vai encontrar no Bruno a sua solução.
Bruno é um serviço que “busca revolucionar o status quo representado por ferramentas como Postman e Insomnia” (tradução livre do site oficial).
Seu objetivo primordial é a colaboração. E como ele faz isso? Criando um arquivo de texto simples, utilizando a linguagem de marcação Bru, que serve como qualquer outro arquivo de texto dentro do seu projeto, ou seja: suas modificações podem ser gerenciadas através do git ou qualquer outro sistema de versionamento.
Vamos lá, para instalar basta ir até a página de download e escolher o seu sistema operacional.
Pelo linux é super tranquilo, basta:
snap install bruno
Assim que instalado, temos a tela inicial:
Aqui, vemos que ele sempre vai criar os arquivos de texto em um determinado diretório, logo ao clicar em criar, abrir ou importar as collections.
Selecionamos um diretório onde vamos criar uma nova pasta com um arquivo bruno.json, buscar um diretório que possua um arquivo bruno.json e arquivos .bru ou traduzir um arquivo criado por uma exportação via Insomnia ou Postman, respectivamente.
Para criar a collection de teste, vou utilizar um projeto pessoal que possui poucos endpoints (e muito conhecimento adquirido): node-people.
Clicando em criar collection, temos a seguinte tela, e após isso já podemos criar todas as requisições necessárias, que no caso são 4.
Apenas criação, detalhe, busca e contagem de pessoas adicionadas ao banco de dados.
Olha, realmente a interface é muito similar a todas as outras ferramentas, então imagino que não tenha uma curva de aprendizado tão grande para o seu time na migração de API Client.
Abaixo podemos ver as quatro requisições criadas e funcionando.
No repositório, temos a pasta criada pelo Bruno com um arquivo para cada requisição.
O arquivo bruno.json nada mais é que um manifesto, contendo versão, nome, tipo e pastas a se ignorar:
Os demais arquivos seguem a linguagem de marcação “bru”, como o exemplo abaixo:
Após alguns testes iniciais, criei algumas variáveis, que no Bruno temos 2 tipos:
- Variáveis existentes em tempo de execução, que são criadas e/ou modificadas a partir de uma requisição.
- Variáveis de ambiente, que são criadas uma vez e podem ser utilizadas a partir da escolha de ambiente.
Nos meus testes, criei o ambiente “base” que continha a variável “url” para substituir “http://localhost:9999” de todas as requisições, deixando a escrita de endpoints menos verbosa:
Para usar, apenas indicar o nome da variável entre chaves duplas:
E para criar variáveis em tempo de execução, basta ir na aba “Vars” dentro de uma requisição e usar um código JavaScript para indicar o valor, neste caso apliquei um header da resposta da requisição para uma variável chamada new_people_location.
Essa configuração me permite usar um dado criado pela requisição de criação de pessoa para detalhar a pessoa, usando apenas:
No fim, podemos ver ambas as variáveis através do “ícone de olho” no header:
Agora, só fazer “commit e push” dessas alterações, pois elas nada mais são do que arquivos dentro do seu projeto, assim como você pode ver neste commit:
Agora, qualquer pessoa pode acessar o projeto e abrir as collections com dificuldade similar a zero.
E claro, isso tudo gratuitamente.
Existe uma versão paga, porém realmente agrega coisas que você não esperaria de um API Client, como uma interface visual para o git e a exportação de collections no formato OpenAPI.
Lembrando que a exportação para formatos Insomnia e Postman são gratuitas.
Use Bruno
Se você se identificou com o problema levantado acima e busca documentar e testar API’s de forma colaborativa e salvando tudo em um respositório GIT, Bruno é pra você.
Use esta IDE Open-Source, participe da comunidade no GitHub e comente os resultados abaixo!
Nos vemos em breve.
Estamos juntos nessa.