5 formas de fazer chamadas HTTP no Node.js
Tempo de leitura: 4 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.
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
O primeiro sucesso da nossa lista é o módulo HTTP
na biblioteca padrão. Com esse módulo, você pode simplismente fazer chamadas sem precisar instalar dependências externas. Em contrapartida, esta não é a solução mais amigável se comparada com as outras.
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ê vai precisar receber os dados de resposta em blocos, no lugar de simplemente incluir uma função de callback para ser executada quando todos os dados forem recebidos. Você também vai precisar tratar os dados de resposta manualmente. Isso é relativamente trivial se está formatado como JSON, mas ainda assim é um passo extra.
Um outro problema é que o módulo não suporta HTTPS
por padrão, então nós precisaremos requerer o módulo https caso a API utilizada se comunique usando HTTPS
. 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.
Request
Request é um cliente HTTP simplificado se comparado a biblioteca requests do Python. Ela é muito mais amigável que o módulo padrão http
e foi considerada um ponto de partida para a comunidade por vários anos.
Esta tem sido minha escolha pessoal desde que comecei a usar Node.js e é muito boa para tarefas rápidas. Ao contrário do módulo http, você vai ter que instalar esta biblioteca como uma dependência do npm.
Rode o comando a seguir no seu terminal no diretório que seu código será executado:
Você vai ver que precisa de muito menos código para fazer a mesma tarefa que fizemos acima:
Request é uma opção fantástica se você precisa de uma biblioteca fácil de usar e que lide com requisições HTTP de um jeito sensato. Se você quer usar Promises, você pode conferir a biblioteca request-promise.
Axios
Axios é um cliente HTTP baseado em Promises, tanto para o navegador quanto para o Node.js. Utilizar Promises traz uma grande vantagem para lidar com código que precisa de uma cadeia de eventos mais complexa. Escrever código assíncrono pode ser confuso e Promises são uma das várias soluções para esse problema. Elas são úteis inclusive em outras linguagem como a Swift.
Para instalar o Axios do npm, digite o comando a seguir 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:
O Axios inclusive trata as respostas JSON por padrão. Muito conveniente! Você também pode ver que o tratamento de erros é feito com .catch()
, já que estamos usando promises agora.
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:
Código assíncrono pode facilmente se tornar super complicado e desagradável de lidar, e a maneira como o Axios lida com esse problema, pode tornar sua vida mais fácil no longo prazo.
SuperAgent
Similar ao Axios, SuperAgent é outra biblioteca popular utilizada principamente para fazer requisições AJAX no navegador, mas 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.
Got
Got é outra opção se você precisa de uma biblioteca mais leve. Ela também está disponível para usar na Twilio Functions.
Da mesma forma, instale o Got com npm:
Parecido com Axios, Got também funciona com Promises. O código a seguir vai funcionar da mesma forma que os outros exemplos:
Got é ótimo se você deseja uma biblioteca menor que pareça menos “inchada” como a Request.
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. Existem algumas bibliotecas como a node-fetch, que fornece a funcionalidade de fecth
do navegador para o backend.
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.