Cliente HTTP para JavaScript (Node.js): mejores bibliotecas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente HTTP para JavaScript (Node.js): mejores bibliotecas para trabajar con la red



En el desarrollo web moderno con Node.js, el envío de solicitudes HTTP es una de las operaciones más comunes. Ya sea para acceder a una API REST, descargar archivos o interactuar con microservicios, no se puede prescindir de un cliente HTTP confiable. En este artículo, analizaremos en detalle las cuatro mejores bibliotecas para JavaScript (Node.js): Axios, Got, node-fetch y undici. Conocerás sus características, rendimiento y obtendrás ejemplos de código listos para usar.



1. Axios — el estándar universal

Axios es el cliente HTTP más popular para Node.js y navegadores. Está basado en Promises y admite interceptores, análisis automático de JSON, protección contra CSRF y cancelación de solicitudes.



Instalación:

npm install axios


Ejemplo de solicitud GET:

const axios = require('axios');

async function getUser(id) { try { const response = await axios.get(`https://api.example.com/users/${id}`); console.log(response.data); } catch (error) { console.error('Error:', error.message); }}

getUser(1);


Ejemplo de POST con cabeceras:

const axios = require('axios');

const data = { name: 'Alice', role: 'developer' };

axios.post('https://api.example.com/users', data, { headers: { 'Content-Type': 'application/json' }}).then(res => console.log(res.status));


Ventajas: simplicidad, ecosistema extenso, soporte para progreso de carga.

Desventajas: tamaño del paquete (~100 KB), redundante para tareas simples.



2. Got — rápido y funcional

Got es un cliente HTTP ligero con una API rica. Admite transmisión por flujos, almacenamiento en caché, reintentos y es más rápido que Axios.



Instalación:

npm install got


Ejemplo con flujo y manejo de errores:

const got = require('got');const fs = require('fs');

async function downloadFile(url, outputPath) { try { const stream = got.stream(url); const fileStream = fs.createWriteStream(outputPath); stream.pipe(fileStream);

await new Promise((resolve, reject) => { stream.on('end', resolve); stream.on('error', reject); }); console.log('Archivo descargado'); } catch (error) { console.error('Error de descarga:', error.message); }}

downloadFile('https://example.com/file.zip', './file.zip');


Ejemplo con reintentos:

const got = require('got');

got('https://api.example.com/data', { retry: { limit: 3, methods: ['GET'] }}).then(response => console.log(response.body));


Ventajas: tamaño pequeño, velocidad, reintentos integrados.

Desventajas: API menos intuitiva para principiantes.



3. node-fetch — sintaxis familiar del navegador

node-fetch es un puerto de la API Fetch del navegador para Node.js. Es ideal si estás acostumbrado a fetch en el navegador y deseas un código uniforme.



Instalación:

npm install node-fetch


Ejemplo con async/await:

const fetch = require('node-fetch');

async function getPosts() { const response = await fetch('https://jsonplaceholder.typicode.com/posts/1'); if (!response.ok) throw new Error('Error HTTP ' + response.status); const data = await response.json(); console.log(data.title);}

getPosts();


Ejemplo de envío de FormData:

const fetch = require('node-fetch');const FormData = require('form-data');

const form = new FormData();form.append('file', fs.createReadStream('./photo.jpg'));\

Recommendations