Guilherme d'Almeida
Guilherme d'Almeida09/12/2025 23:32
Compartilhe

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! 🚀

    Compartilhe
    Comentários (2)
    Guilherme d'Almeida
    Guilherme d'Almeida - 10/12/2025 11:10

    Interessante ter perguntado isso. Cheguei a estudar este assunto no início do ano!

    A Resolução 4.658 do CMN é o "marco regulatório" da segurança cibernética aqui no Brasil. É ela que regula a contratação de serviços de nuvem pelas instituições financeiras (IFs).

    O artigo 12, inciso II diz que as IFs devem verificar se a empresa candidata a prestar esse tipo de serviço cumpre alguns requisitos. Acredito que o maior desafio técnico se concentra na alínea g (segregação lógica de dados em ambientes compartilhados) e na alínea h (controles de acesso):

    g) a identificação e a segregação dos dados dos clientes da instituição por meio de controles físicos ou lógicos; e
    h) a qualidade dos controles de acesso voltados à proteção dos dados e das informações dos clientes da instituição

    Basicamente, o desafio para nós desenvolvedores é garantir que a segregação lógica na nuvem seja tão robusta quanto a física no on-premise. Na migração para Cloud, a preocupação passa a ser validar as credenciais a cada requisição, autenticando não só o usuário, mas a identidade do serviço que está solicitando (o container, por exemplo).

    É deixar de confiar na rede e passar a confiar na identidade. Implementar isso em centenas (eu imagino) de microsserviços parece bem complexo! Ao mesmo tempo, animador haha.

    DIO Community
    DIO Community - 10/12/2025 10:32

    Excelente, Guilherme! Que artigo cirúrgico, inspirador e essencial! Você tocou no ponto crucial do Desenvolvimento Backend: a otimização de workflow através do Terminal é o que separa o Dev comum do Dev de alta performance.

    É fascinante ver como você aborda o tema, mostrando que a combinação curl + jq + jo é o kit "raiz" que acelera o teste de APIs e expande o conhecimento sobre o Sistema Operacional.

    Qual você diria que é o maior desafio para um desenvolvedor ao migrar um sistema de core banking para uma arquitetura cloud-native, em termos de segurança e de conformidade com as regulamentações, em vez de apenas focar em custos?