image

Access unlimited bootcamps and 650+ courses

50
%OFF
Guilherme d'Almeida
Guilherme d'Almeida09/12/2025 23:32
Share
Luizalabs - Back-end com Python - 2ยบ EdiรงรฃoRecommended for youLuizalabs - Back-end com Python - 2ยบ Ediรงรฃo

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! ๐Ÿš€

    Share
    Recommended for you
    Almaviva - Back-end com Java & QA
    Luizalabs - Back-end com Python - 2ยบ Ediรงรฃo
    TOTVS - Fundamentos de Engenharia de Dados e Machine Learning
    Comments (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?

    Recommended for youLuizalabs - Back-end com Python - 2ยบ Ediรงรฃo