Testando APIs com Curl, Jq e Jo no Linux ๐ง๐
Pessoal, quero compartilhar algo que tem me ajudado a testar minhas APIs de modo mais natural e rรกpido. Como estudantes e desenvolvedores backend, passamos grande parte do nosso tempo de trabalho testando endpoints. Muitas vezes, recorremos a ferramentas grรกficas lentas para tarefas que poderiam ser resolvidas em segundos no terminal. Eu acredito que hรก uma questรฃo de preferรชncia para cada um. Eu acredito que ganho mais tempo, e ganho tambรฉm conhecimento sobre o sistema operacional.
Entรฃo, o objetivo deste artigo รฉ mostrar como usar o terminal para testar suas apis de forma mais rรกpida e "raiz" usando trรชs ferramentas essenciais: curl, jq e jo.
1. Preparando o Terreno: Variรกveis de Ambiente
Para nรฃo ficarmos repetindo a mesma URL o tempo todo, vamos armazenar o endereรงo base da nossa API em uma variรกvel.
Para este exemplo, usaremos a API pรบblica JSONPlaceholder.
export API_URL="https://jsonplaceholder.typicode.com/posts"
Dica: Se vocรช fechar o terminal, essa variรกvel some. Para tornรก-la permanente, adicione essa linha ao seu .bashrc (se estiver usando o bash como eu).
2. Introduzindo o cURL
O cURL (Client URL) รฉ a ferramenta padrรฃo para transferir dados via linha de comando. Ele suporta quase todos os protocolos imaginรกveis (HTTP, HTTPS, FTP, etc.). ร a base de tudo o que faremos aqui.
3. Buscando Dados (GET) e Visualizando com JQ
O comando mais bรกsico รฉ o GET. Se rodarmos apenas o curl, receberemos um JSON difรญcil de ler.
curl $API_URL
O Poder do JQ ๐
Para melhorar a visualizaรงรฃo do GET (e de qualquer resposta JSON), usamos o jq. Ele รฉ um processador JSON leve e flexรญvel. Quando passamos o output do curl para ele (|), ele formata (identa) e colore o cรณdigo.
curl $API_URL | jq
4. Introduzindo o JO
Escrever JSON manualmente no terminal รฉ propenso a erros (escapar aspas รฉ um pesadelo: {\"key\": \"value\"}). ร aqui que entra o jo.
O jo cria strings JSON a partir de atribuiรงรตes simples chave=valor.
Exemplo simples:
jo nome="Felipao" cargo="Dev Senior"
# Saรญda: {"nome":"Felipao","cargo":"Dev Senior"}
Isso muda o jogo na hora de criar payloads para enviar para a API.
5. Enviando Dados (POST)
Vamos criar um novo post na API.
Passo A: Criar o Payload com JO
Vamos criar o objeto JSON e guardรก-lo numa variรกvel auxiliar. Note como o jo detecta automaticamente que userId=1 รฉ um nรบmero, nรฃo uma string.
PAYLOAD=$(jo title="Testando APIs" body="Artigo na DIO" userId=1)
# Verificando como ficou (opcional)
echo $PAYLOAD | jq
Passo B: Enviar com Curl
Agora usamos a flag--json,que define adapta o curl para enviar json.
curl --json "$PAYLOAD" $API_URL
*Obs: O JSONPlaceholder รฉ uma "Fake API". Ela foi feita para simular o comportamento de uma API real sem que vocรช precise configurar um banco de dados. Entรฃo ela aceita a requisiรงรฃo POST e PUT, mas sem realizar uma alteraรงรฃo de fato nos dados. Teste isso com uma api prรณpria para ver o funcionamento em toda a sua extensรฃo.
6. Atualizando Dados (PUT)
Para atualizar um recurso (PUT), precisamos especificar explicitamente o mรฉtodo com -X e passar o ID na URL.
Podemos reutilizar nossa variรกvel $PAYLOAD ou criar uma nova antes:
# Altera apenas o campo 'title' do JSON guardado em PAYLOAD
PAYLOAD=$(echo $PAYLOAD | jq '.title = "Tรญtulo Atualizado v2"')
# (Opcional) Veja como ficou
echo $PAYLOAD | jq
E depois enviar:
# Atualizando o post de ID 1
curl -X PUT --json "$PAYLOAD" $API_URL/1
7. Removendo Dados (DELETE)
Para deletar, mudamos o verbo para DELETE. Aqui, รฉ รบtil adicionar a flag -v (verbose) para garantir que recebemos o status code correto, jรก que muitas APIs nรฃo retornam corpo no delete.
curl -vX DELETE $API_URL/1
8. Aliases para Produtividade
Se vocรช chegou atรฉ aqui pensando que seria melhor ter uma ferramenta grรกfica para nรฃo ficar digitando tanto, calma! Digitar curl --json ou curl -X PUT toda hora realmente pode ficar cansativo, mas รฉ possรญvel criar atalhos (aliases) no nosso arquivo de configuraรงรฃo do shell (.bashrc) para tornar esses comandos mais rรกpidos e menores.
Adicione estas linhas ao final do seu arquivo de configuraรงรฃo:
# Atalhos para API REST
alias post='curl --json'
alias put='curl -X PUT --json'
alias del="curl -vX DELETE"
Esse arquivo fica no seu diretรณrio home. Entรฃo para acessรก-lo com o vim, por exemplo, vocรช pode simplesmente digitar:
vim ~/.bashrc
Mas vocรช pode usar qualquer editor. O ponto รฉ fazer com que estes comandos sejam carregados toda vez que o seu terminal for aberto.
Para que vocรช tenha acesso a esses comandos de imediato, รฉ sรณ carregar o arquivo novamente:
source ~/.bashrc
E entรฃo, รฉ sรณ usar os comandos com as devidas adiรงรตes ($API_URL e $PAYLOAD) segundo foi ensinado acima.
Conclusรฃo
Essa foi uma das descobertas mais รบteis que fiz recentemente durante meus estudos no bootcamp. Sair da zona de conforto das interfaces grรกficas assusta um pouco no inรญcio, mas percebi que dominar o terminal nos dรก muito mais agilidade no dia a dia.
Se vocรช tiver outras dicas ou sugestรตes para melhorar esse fluxo, deixe nos comentรกrios. Vamos evoluir juntos! ๐



