Cliente HTTP para JavaScript (Node.js): principais bibliotecas para trabalhar com rede
O desenvolvimento moderno em Node.js raramente acontece sem interação com serviços externos. Seja uma REST API, endpoints GraphQL ou streaming de dados — você precisará de um cliente HTTP confiável. Neste artigo, vamos analisar as melhores bibliotecas para realizar requisições HTTP no ambiente Node.js, suas características e exemplos de uso.
1. Axios — a escolha universal
Axios é o cliente HTTP mais popular para Node.js e navegadores. Ele é baseado em promises, suporta interceptadores (interceptors), transformação automática de JSON e cancelamento de requisições.
Instalação
npm install axios
Exemplo de requisição GET
const axios = require('axios');
async function getUsers() {
try {
const response = await axios.get('https://jsonplaceholder.typicode.com/users');
console.log(response.data);
} catch (error) {
console.error('Erro:', error.message);
}
}
getUsers();
Características:
- Suporte a
CancelTokenpara cancelar requisições - Tratamento automático de erros HTTP (status 4xx e 5xx)
- Funciona tanto no servidor quanto no navegador
- Suporte a progresso de upload/download
2. Got — desempenho e flexibilidade
Got é uma biblioteca leve e rápida, criada especificamente para Node.js. Ela oferece uma API rica e excelente desempenho por utilizar os módulos http e https diretamente.
Instalação
npm install got
Exemplo de requisição POST
const got = require('got');
async function createPost() {
try {
const response = await got.post('https://jsonplaceholder.typicode.com/posts', {
json: {
title: 'Novo post',
body: 'Conteúdo do post',
userId: 1
},
responseType: 'json'
});
console.log(response.body);
} catch (error) {
console.error('Erro:', error.message);
}
}
createPost();
Características:
- Suporte a streams e paginação
- Suporte embutido para novas tentativas (retry)
- Trabalho com cookies e cache
- Suporte a HTTP/2 (através de
http2-wrapper)
3. Node.js Fetch API — padrão nativo
A partir do Node.js 18, a Fetch API tornou-se um módulo nativo (disponível globalmente). É a implementação da mesma API dos navegadores, o que simplifica o código universal.
Exemplo de uso
async function fetchData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
if (!response.ok) throw new Error('Erro HTTP: ' + response.status);
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Erro:', error.message);
}
}
fetchData();
Características:
- Não requer instalação — nativo no Node.js 18+
- API padrão, familiar para desenvolvedores frontend
- Suporte a
AbortControllerpara cancelar requisições - Recursos limitados em comparação com Axios/Got (por exemplo, sem interceptadores)
4. undici — cliente HTTP/1.1 de alto desempenho
undici é um cliente HTTP rápido e moderno que está na base do Fetch nativo do Node.js. Ele é otimizado para máxima taxa de transferência.
Instalação
npm install undici
Exemplo de requisição
const { request } = require('undici');
async function fetchWithUndici() {
try {
const { statusCode, body } = await request('https://jsonplaceholder.typicode.com/users');
const data = await body.json();
console.log('Status:', statusCode);
console.log('Da
```