Como testar APIs com cURL e Postman: guia prático para iniciantes

Como testar APIs com cURL e Postman: guia prático para iniciantes

Saber testar API com cURL e com o Postman é uma habilidade básica para qualquer desenvolvedor, seja quem constrói APIs ou quem integra serviços de terceiros. É assim que você descobre se o problema está no seu código ou no servidor, confere o formato exato de uma resposta antes de programar e reproduz um erro para o suporte.

Neste guia você vai aprender os dois caminhos: o cURL, que roda no terminal e está disponível em praticamente qualquer sistema, e o Postman, uma interface gráfica para montar, salvar e compartilhar requisições. Os exemplos usam a API de tarefas que criamos em Minha primeira API em Node.js com Express, e todos os prints mostram respostas reais.

Antes de começar: o que compõe uma requisição HTTP

Toda chamada a uma API REST tem as mesmas peças. Entender cada uma torna qualquer ferramenta de teste óbvia:

Parte Exemplo Para que serve
Método GET, POST, PUT, PATCH, DELETE A intenção: ler, criar, atualizar, remover
URL http://localhost:3000/tarefas/1 O endereço do recurso
Cabeçalhos (headers) Content-Type, Authorization Metadados: formato do corpo, credenciais
Corpo (body) {"titulo": "Estudar"} Os dados enviados (em POST, PUT e PATCH)
Status 200, 201, 400, 401, 404, 500 O resultado da operação, na resposta

Se algum desses conceitos for novo, o artigo Como funciona uma API? Entenda na prática explica o básico.

Parte 1: testando APIs com cURL

O cURL é uma ferramenta de linha de comando para transferir dados via URL. Ele já vem instalado no Linux, no macOS e no Windows 10/11. No Windows, use curl.exe no PowerShell, porque curl sozinho pode ser um apelido para outro comando.

GET simples e cabeçalhos da resposta

O teste mais simples é um GET. Adicionando -i, o cURL mostra também o status e os cabeçalhos da resposta:

curl -i http://localhost:3000/tarefas/1
Terminal mostrando como testar API com cURL usando GET e a opção -i
Com -i você vê o status 200 e os cabeçalhos antes do corpo JSON

Repare no Content-Type: application/json: é o servidor avisando que o corpo é JSON. Cabeçalhos como Cache-Control, Retry-After e os de limite de requisições também aparecem aqui e costumam explicar comportamentos estranhos.

Modo verboso: vendo a conversa completa

Quando algo não funciona e você não sabe por quê, use -v. Ele mostra a requisição que saiu (linhas com >) e a resposta que chegou (linhas com <):

Saída do curl -v mostrando requisição e resposta HTTP completas
Linhas com > são o que você enviou; linhas com < são o que o servidor respondeu

É com o -v que você descobre, por exemplo, que o cabeçalho de autenticação não está sendo enviado, que houve um redirecionamento inesperado ou que o certificado HTTPS tem problema.

POST com JSON, arquivos e códigos de status

Para enviar dados, informe o método com -X, o tipo do conteúdo com -H e o corpo com -d:

curl -X POST http://localhost:3000/tarefas \
  -H "Content-Type: application/json" \
  -d '{"titulo":"Testar com cURL"}'

Em corpos maiores, escrever o JSON dentro das aspas fica confuso. Salve em um arquivo e use -d @arquivo.json. E, para ver o status HTTP separado do corpo, use a opção -w (write-out):

Terminal com POST enviando JSON por arquivo e -w exibindo status e tempo de resposta
O -w mostra o status e o tempo total; o -o /dev/null descarta o corpo quando só o status interessa

Essas opções são perfeitas para scripts de verificação: o %{http_code} permite testar em um if se a API respondeu 200, e o %{time_total} mede quanto tempo a chamada levou.

Formatando e filtrando JSON com jq

Respostas JSON longas vêm em uma linha só. O jq formata, colore e filtra o conteúdo:

curl -s http://localhost:3000/tarefas | jq
curl -s http://localhost:3000/tarefas | jq '.[] | select(.concluida == false) | .titulo'
Saída do jq formatando JSON e filtrando tarefas pendentes
O jq deixa o JSON legível e permite extrair só o que interessa

O -s (silent) esconde a barra de progresso do cURL, que atrapalharia o jq. Instale com sudo apt install jq, brew install jq ou winget install jqlang.jq.

PUT, PATCH e DELETE

Os demais métodos seguem a mesma lógica:

# Atualizar
curl -X PUT http://localhost:3000/tarefas/1 \
  -H "Content-Type: application/json" \
  -d '{"concluida": true}'

# Remover (e mostrar o status)
curl -i -X DELETE http://localhost:3000/tarefas/2

Autenticação: Bearer token e API keys

APIs reais exigem credenciais, normalmente em cabeçalhos. O padrão mais comum é o Bearer token:

curl https://api.exemplo.com/recurso \
  -H "Authorization: Bearer SEU_TOKEN"

Na APIBrasil, por exemplo, os serviços por crédito usam só o Bearer, e os serviços device-based (como CEP, SMS e WhatsApp) usam o Bearer mais o cabeçalho DeviceToken. Um script de teste organizado fica assim:

Script bash com cURL testando credencial e consulta de CEP na APIBrasil
Testando a credencial e uma consulta de CEP na APIBrasil com cURL

A primeira chamada, ao endpoint /balance, é um ótimo teste de credencial: se ela responde, o token é válido; se volta 401, nada mais vai funcionar. Repare também que os tokens vêm de variáveis de ambiente, e não escritos no script — assim ele pode ir para o Git sem expor segredos.

Tabela de opções do cURL mais usadas

Opção O que faz
-X MÉTODO Define o método HTTP (GET é o padrão)
-H "Nome: valor" Adiciona um cabeçalho
-d 'dados' / -d @arquivo Envia um corpo (e muda o método padrão para POST)
-i Mostra status e cabeçalhos da resposta
-v Modo verboso, com requisição e resposta completas
-s / -sS Silencioso (o -S ainda mostra erros)
-o arquivo Salva o corpo em um arquivo
-w '%{http_code}' Imprime informações como status e tempo
-L Segue redirecionamentos
--fail-with-body Retorna erro no shell para status 4xx/5xx, mantendo o corpo

Parte 2: testando APIs com Postman

O Postman é uma aplicação gráfica para testar APIs. Ele brilha quando você precisa salvar, organizar e compartilhar requisições com a equipe. Os conceitos são exatamente os mesmos do cURL, só que em campos de formulário.

Fazendo sua primeira requisição no Postman

  1. Instale o Postman (ou use a versão web) e crie uma conta gratuita.
  2. Clique em New → HTTP (ou no botão + das abas).
  3. Escolha o método no seletor à esquerda (GET) e cole a URL: http://localhost:3000/tarefas.
  4. Clique em Send. A resposta aparece embaixo, com o corpo formatado, o status, o tempo e o tamanho.

Enviando JSON em um POST

  1. Troque o método para POST.
  2. Na aba Body, selecione raw e, no seletor à direita, JSON.
  3. Digite o corpo: {"titulo": "Testar com Postman"}.
  4. Clique em Send e confira o status 201 Created.

Ao escolher JSON no Body, o Postman já adiciona o cabeçalho Content-Type: application/json automaticamente — um erro clássico no cURL que o Postman evita.

Autenticação no Postman

Na aba Authorization, escolha Bearer Token e cole o token. Para cabeçalhos personalizados, como o DeviceToken da APIBrasil, use a aba Headers e adicione a chave e o valor.

Coleções e variáveis de ambiente

O grande ganho do Postman está aqui:

  • Collections agrupam as requisições de uma API. Você pode exportar e enviar para a equipe ou versionar no Git.
  • Environments guardam variáveis como {{base_url}} e {{token}}. Assim você troca de desenvolvimento para produção com um clique, sem editar cada requisição.
  • Tests (na aba Scripts) permitem escrever verificações em JavaScript, como pm.response.to.have.status(201), e rodar a coleção inteira como uma suíte de testes.

A própria APIBrasil publica a documentação do Gateway V2 no Postman, que você pode importar para o seu workspace e testar os endpoints sem escrever código.

Dica: no Postman, o botão Code (ícone </>) converte qualquer requisição em cURL, PHP, Node.js, Python e outras linguagens. É uma ótima ponte entre testar e implementar.

cURL ou Postman: qual usar?

Situação Melhor escolha
Teste rápido de um endpoint cURL
Servidor sem interface gráfica (SSH) cURL
Scripts, CI/CD e automações cURL
Compartilhar requisições com a equipe Postman
Explorar uma API nova com muitos endpoints Postman
Alternar entre ambientes (dev, homologação, produção) Postman
Reproduzir um erro para o suporte cURL (cole o comando no chamado)

Na prática, os dois se complementam. Muitas equipes usam o Postman no dia a dia e o cURL para documentação e automação.

Status HTTP que você vai encontrar ao testar APIs

  • 200 OK — sucesso.
  • 201 Created — recurso criado.
  • 204 No Content — sucesso sem corpo (comum em DELETE).
  • 400 Bad Request / 422 Unprocessable Entity — dados inválidos. Leia a mensagem de erro no corpo.
  • 401 Unauthorized — credencial ausente ou inválida.
  • 402 Payment Required — sem saldo ou créditos (comum em APIs pagas por consulta).
  • 403 Forbidden — autenticado, mas sem permissão para aquele recurso.
  • 404 Not Found — recurso ou rota inexistente.
  • 429 Too Many Requests — limite de requisições atingido. Respeite o cabeçalho Retry-After.
  • 500/502/503 — erro no servidor. Tente de novo mais tarde e, se persistir, avise o provedor.

Erros comuns ao testar APIs

JSON inválido no corpo — aspas simples, vírgula sobrando no final ou aspas não escapadas. Valide o JSON antes de enviar.

Esquecer o Content-Type: application/json — muitos servidores ignoram o corpo sem esse cabeçalho.

Aspas no Windows — o PowerShell trata aspas de forma diferente. Use curl.exe, arquivos com -d @arquivo.json ou o Git Bash.

Testar só o caminho feliz — sempre teste também dados inválidos, IDs inexistentes e credenciais erradas.

Colar tokens em lugares públicos — prints, issues do GitHub e grupos de mensagens. Mascare o token antes de compartilhar.

Perguntas frequentes

O cURL funciona no Windows?

Sim. Windows 10 e 11 já trazem o curl.exe. No PowerShell, digite curl.exe para garantir que o cURL real está sendo usado.

O Postman é gratuito?

Sim, o plano gratuito atende muito bem uso individual e equipes pequenas. Planos pagos adicionam recursos de colaboração e limites maiores.

Existem alternativas ao Postman?

Sim: Insomnia, Bruno, Hoppscotch e a extensão Thunder Client do VS Code são opções populares. O Bruno, por exemplo, salva as coleções como arquivos de texto no próprio repositório.

Como converter um comando cURL para código?

No Postman, use Import → Raw text e cole o cURL; depois clique em Code para gerar o código na linguagem desejada. As SDKs oficiais, como a da APIBrasil, também simplificam essa passagem.

Conclusão

Agora você sabe testar API com cURL e com o Postman: montar requisições com qualquer método, enviar JSON, autenticar com Bearer token, ler cabeçalhos e status, medir tempo de resposta e organizar testes em coleções. São ferramentas que você vai usar em todos os projetos, do primeiro endpoint à investigação de um problema em produção.

Próximos passos: aprenda a guardar tokens com segurança em Variáveis de ambiente e arquivo .env e coloque o que aprendeu em prática consumindo uma API real no tutorial Consultar CEP com JavaScript, usando a APIBrasil.

Loading

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *