5 formas de fazer requisições HTTP em Node.js usando Async/Await
Tempo de leitura: 3 minutos
Realizar chamadas HTTP é uma funcionalidade básica nas linguagens modernas, e uma das primeiras coisas que muitos desenvolvedores aprendem quando estão iniciando em novos ambientes de desenvolvimento. Quando pensamos em Node.js, existem uma quantidade considerável de soluções para este problema construídas dentro da própria linguagem e pela comunidade. Vamos ver algumas das soluções mais populares.
Alguns anos atrás, escrevi um post similar sobre este tópico, mas agora que a funcionalidade de async/await é mais difundida e popular em códigos JavaScript, fazer chamadas de rede é mais simples que nunca. Além disso, Request, a biblioteca HTTP mais popular para Node foi descontinuada. Então é hora de um guia mais atualizado!
Nós usaremos a API de Foto Astronômica do Dia (APOD) da NASA como uma API JSON que utilizaremos em todos os exemplos, porque o espaço é a coisa mais legal de todos os tempos.
Antes de continuar, você precisa se certificar que possui a versão atualizada do Node.js e npm instaladas na sua máquina.
HTTP – a Biblioteca Padrão
Com o propósito de comparar, vamos começar vendo como funciona o módulo HTTP padrão sem Promises e async/await. Com este módulo, você tem a vantagem de não se basear em nenhuma dependência, mas ele não é muito amigável para o desenvolvedor, se comparado com outras soluções.
O código a seguir vai enviar uma requisição GET
para a API da NASA e mostrar a URL da foto astronômica do dia, assim como sua explicação:
Boa parte da funcionalidade do módulo HTTP
e HTTPS
é muito baixo-nível. Você é obrigado a receber os dados de resposta em blocos e vai ter que explicitamente aguardar que todos os dados sejam recebidos. Você também precisará tratar os dados recebidos manualmente. Este módulo também não suporta HTTPS por padrão, então precisamos requerer o módulo https no luar, se a API que estiver usando comunicar através de HTTPS. Embora você não possa utilizar a feature de async/await em chamadas HTTP feitas com essa biblioteca, você poderia potencialmente usar streams assíncronos para fragmentar os dados recebidos.
Pode dar um pouco mais de trabalho para receber os dados que você quer, mas pode ser útil se você não quer adicionar muitas dependências na sua base de código ou quer acesso às funcionalidades de baixo nível.
Got
Got é outra opção se você precisa de uma biblioteca mais leve. Ela foi desenvolvida para ser amigável e também também está disponível para usar na Twilio Functions.
Instale o Got com npm:
Porque o Got usa promises, você verá que precisa de muito menos código para fazer a mesma tarefa que fizemos acima. E você também pode tirar vantagem das chamadas com async e await:
Esta biblioteca não trata JSON por padrão, então precisamos adicionar { json: true }
como um argumento ao criar a chamada. Got é uma opção fantástica se você precisa de uma biblioteca fácil e que lide com chamadas HTTP de um jeito sensato.
Axios
Axios é outro cliente HTTP baseado em Promises que funciona no navegador e também no Node.js.
Para instalar o Axios pelo npm, digite o seguinte comando no seu terminal:
O código a seguir vai realizar a mesma tarefa de exibir a URL e a explicação da foto astronômica do dia:
Axios também trata respostas JSON por padrão. Muito conveniente! Você também pode fazer múltiplas requisições simultâneas com axios.all
, se você quiser fazer algo como carregar a foto astronômica de dois dias diferentes ao mesmo tempo:
SuperAgent
Similar ao Axios, SuperAgent é outra biblioteca popular utilizada principamente para fazer requisições assíncronas no navegador, mas que também funciona no Node.js. Instale o SuperAgent com o seguinte comando:
O que é legal sobre o SuperAgent é que você tem outras funções muito úteis que você pode encadear na requisição, como a query()
para adicionar parâmetros na chamada. Nos exemplos anteriores, estávamos adicionando esses parâmetros manualmente na URL, mas veja que agora o SuperAgent oferece uma função para fazer isso:
Assim como no Axios, você não precisa tratar a reposta JSON você mesmo, o que é bem legal.
node-fetch
node-fetch é um módulo leve que traz a biblioteca window.fetch do Node.js usando o mínimo de código.
Assim como nos exemplos anteriores, instale o node-fetch com o seguinte comando:
As versões mais recentes dessa biblioteca utiliza promises, então também podemos usar a sintaxe async/await com ela:
Esta biblioteca possui uma função integrada para converter a resposta para JSON, mas não faz isso de forma automática da mesma forma que o Axios e o SuperAgent fazem. Esta é uma ótima biblioteca para pessoas que estão acostumadas a usar a API Fetch no navegador.
Considerações Finais
Este artigo não cobre todas as soluções, mas agora você pode ver como a funcionalidade básica funciona em algumas das bibliotecas HTTP mais populares no Node.
Outras linguagens possuem uma variedade de bibliotecas similares para lidar com este problema. Confira este outros tutoriais para Swift, Python e Ruby. Verifique também nossos Guias rápido de Node.js para testar seus novos conhecimentos.
Quais são suas formas favoritas de fazer chamadas HTTP? Fique a vontade para falar comigo e tirar dúvidas:
- Email: Sagnew@twilio.com
- Twitter: @Sagnewshreds
- Github: Sagnew
- Twitch (streaming live code): Sagnewshreds
Publicações relacionadas
Recursos relacionados
Twilio Docs
De APIs a SDKs e aplicativos de amostra
Documentação de referência de API, SDKs, bibliotecas auxiliares, guias de início rápido e tutoriais para sua linguagem e plataforma.
Centro de Recursos
Os mais recentes e-books, relatórios do setor e webinars
Aprenda com especialistas em engajamento do cliente para melhorar sua própria comunicação.
Ahoy
Centro da comunidade de desenvolvedores da Twilio
Melhores práticas, exemplos de código e inspiração para criar comunicações e experiências de engajamento digital.