HTTP-клиент для JavaScript (Node.js): топ библиотек для работы с API

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

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

5. node-fetch — л

Рекомендаций