Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Node.js: rate limiting, throttling, API, external API, request queue

Какие есть способы ограничения количества запросов к внешнему API (rate limiting)?

Вопрос проверяет знание методов контроля частоты запросов к внешним API для предотвращения перегрузки сервисов и соблюдения лимитов.

Короткий ответ

Rate limiting — это контроль количества запросов за определённый промежуток времени. Основные способы: установка задержек между запросами (throttling), использование очередей запросов, применение готовых библиотек (например, bottleneck для Node.js) и кэширование повторяющихся данных. Также важно обрабатывать ошибки от API (код 429) с экспоненциальной отсрочкой повтора. Это защищает приложение от блокировки и обеспечивает стабильность.

Длинный ответ

Rate limiting (ограничение частоты запросов) — это механизм, который контролирует, как часто клиентское приложение может отправлять запросы к внешнему API. Он необходим, чтобы не превысить квоты, установленные провайдером API, избежать блокировки IP или токена, а также снизить нагрузку на собственное приложение при обработке ошибок.

Основные подходы к реализации

  • Throttling (регулирование): принудительная задержка между запросами. Например, если API допускает 100 запросов в минуту, можно отправлять не более 2 запросов в секунду.
  • Очередь запросов: запросы помещаются в очередь и обрабатываются с нужной скоростью. Это особенно полезно для фоновых задач.
  • Использование специализированных библиотек: многие языки имеют готовые решения, которые упрощают реализацию.
  • Кэширование: для данных, которые редко меняются, можно кэшировать ответы API, чтобы сократить число реальных запросов.

Пример кода на Node.js с библиотекой bottleneck

const Bottleneck = require('bottleneck');
const axios = require('axios');

// Создаём ограничитель: максимум 10 запросов в секунду
const limiter = new Bottleneck({
  minTime: 100 // 100 мс между запросами (10 в секунду)
});

// Обёртка для запроса через ограничитель
const limitedGet = limiter.wrap(async (url) => {
  try {
    const response = await axios.get(url);
    return response.data;
  } catch (error) {
    // Обработка ошибки 429 (Too Many Requests)
    if (error.response && error.response.status === 429) {
      console.log('Превышен лимит, повтор через 2 секунды...');
      await new Promise(resolve => setTimeout(resolve, 2000));
      return limitedGet(url); // Рекурсивный повтор
    }
    throw error;
  }
});

// Использование
(async () => {
  const data = await limitedGet('https://api.example.com/data');
  console.log(data);
})();

В этом примере библиотека Bottleneck гарантирует, что запросы будут отправляться с интервалом не менее 100 мс. Также добавлена базовая обработка ошибки 429 с повторной попыткой после задержки.

Где и как применять

Rate limiting следует применять всегда, когда ваше приложение зависит от внешнего API с чёткими лимитами. Это критически важно для скриптов массовой обработки данных, фоновых джобов и микросервисов, которые агрегируют информацию из нескольких источников. Подход с очередью хорошо работает в асинхронных сценариях, например, при использовании брокеров сообщений (RabbitMQ, Kafka).

Вывод: Rate limiting — обязательная практика для надёжной интеграции с внешними API. Используйте готовые библиотеки для вашего стека технологий, чтобы избежать "велосипедов" и обеспечить стабильную работу приложения под нагрузкой.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Node.js

    Node.js

  • Networks

Ключевые слова

#rate limiting

#throttling

#API

#external API

#request queue

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.