HTTP-клиент для JavaScript (Node.js): топ библиотек для работы с сетью
Современная разработка на Node.js редко обходится без взаимодействия с внешними сервисами. Будь то REST API, GraphQL-эндпоинты или стриминг данных — вам понадобится надёжный HTTP-клиент. В этой статье мы разберём лучшие библиотеки для выполнения HTTP-запросов в среде Node.js, их особенности и примеры использования.
1. Axios — универсальный выбор
Axios — самый популярный HTTP-клиент для Node.js и браузеров. Он основан на промисах, поддерживает перехватчики (interceptors), автоматическую трансформацию JSON и отмену запросов.
Установка
npm install axios
Пример 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('Ошибка:', error.message);
}
}
getUsers();
Особенности:
- Поддержка
CancelTokenдля отмены запросов - Автоматическая обработка ошибок HTTP (статусы 4xx и 5xx)
- Работает как на сервере, так и в браузере
- Поддержка прогресса загрузки/выгрузки
2. Got — производительность и гибкость
Got — лёгкая и быстрая библиотека, созданная специально для Node.js. Она предлагает богатый API и отличную производительность за счёт использования http и https модулей напрямую.
Установка
npm install got
Пример POST-запроса
const got = require('got');
async function createPost() {
try {
const response = await got.post('https://jsonplaceholder.typicode.com/posts', {
json: {
title: 'Новый пост',
body: 'Содержимое поста',
userId: 1
},
responseType: 'json'
});
console.log(response.body);
} catch (error) {
console.error('Ошибка:', error.message);
}
}
createPost();
Особенности:
- Поддержка стримов и пагинации
- Встроенная поддержка повторных попыток (retry)
- Работа с куками и кешированием
- Поддержка HTTP/2 (через
http2-wrapper)
3. Node.js Fetch API — нативный стандарт
Начиная с Node.js 18, Fetch API стал встроенным модулем (доступен глобально). Это реализация того же API, что и в браузерах, что упрощает универсальный код.
Пример использования
async function fetchData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
if (!response.ok) throw new Error('Ошибка HTTP: ' + response.status);
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Ошибка:', error.message);
}
}
fetchData();
Особенности:
- Не требует установки — встроен в Node.js 18+
- Стандартный API, знакомый фронтенд-разработчикам
- Поддержка
AbortControllerдля отмены запросов - Ограниченные возможности по сравнению с Axios/Got (например, нет перехватчиков)
4. undici — высокопроизводительный HTTP/1.1 клиент
undici — это быстрый, современный HTTP-клиент, который лежит в основе встроенного Fetch в Node.js. Он оптимизирован для максимальной пропускной способности.
Установка
npm install undici
Пример запроса
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('Статус:', statusCode);
console.log('Данные:', data);
} catch (error) {
console.error('Ошибка:', error.message);
}
}
fetchWithUndici();
Особенности:
- Максимальная производительность (до 2x быстрее Axios)
- Поддержка пула соединений (connection pooling)
- Низкое потребление памяти
- Поддержка стримов и pipelining