Ограничения частоты запросов (Rate Limits)
Документация описывает механизм ограничения частоты запросов (rate limiting) в Публичном API GitVerse. Этот механизм защищает инфраструктуру от перегрузки и обеспечивает стабильную работу API для всех пользователей.
Общее описание
В целях обеспечения стабильности, производительности и безопасности Публичного API GitVerse реализованы ограничения на количество запросов, которые могут быть выполнены за определенный период времени.
При превышении лимитов API возвращает статус-код 429 Too Many Requests
.
Реализованы два типа лимитов:
- лимит на авторизованного пользователя (по IP-адресу);
- глобальный лимит на все запросы к API.
Лимиты
1. Лимит по авторизованному пользователю (по IP)
Применяется к авторизованным запросам, содержащим токен в заголовке Authorization
.
Параметр | Значение |
---|---|
Применяется к | Авторизованные запросы |
Идентификатор | IP-адрес клиента (извлекается из заголовка Gitverse-Client-IP ) |
Лимит | 500 запросов в час |
Интервал | 1 час (3600 секунд) |
Сброс | Автоматически каждый час (по часовому окну) |
⚠️ При превышении лимита все последующие запросы от этого IP будут отклоняться до сброса счетчика.
2. Глобальный лимит на все запросы
Применяется ко всем запросам к Публичному API, включая анонимные и авторизованные.
Параметр | Значение |
---|---|
Применяется к | Все запросы к Публичному API |
Идентификатор | Глобальный счётчик |
Лимит | 1 000 000 запросов в час |
Интервал | 1 час (3600 секунд) |
Сброс | Автоматически каждый час |
⚠️ При достижении глобального лимита все запросы к API блокируются до начала следующего часового окна.
Порядок проверки лимитов
API проверяет лимиты в следующем порядке:
- IP-лимит (для авторизованных пользователей) — 500 запросов/час
- Глобальный лимит — 1 000 000 запросов/час
Если любой из лимитов превышен, API возвращает ответ с кодом состояния 429 Too Many Requests
.
Заголовки в ответе
Каждый ответ API (успешный или с ошибкой) содержит заголовки, позволяющие отслеживать использование лимитов:
Заголовок | Описание |
---|---|
GitVerse-RateLimit-Limit | Максимальное количество запросов, разрешенных за час (например, 500 или 1000000 ) |
GitVerse-RateLimit-Remaining | Оставшееся количество запросов до достижения лимита |
GitVerse-RateLimit-Retry-After | Количество секунд, через которое можно повторить запрос после превышения лимита |
Gitverse-Ratelimit-Reset | Временная метка Unix (в секундах), когда лимит будет сброшен |
Retry-After | Стандартный HTTP-заголовок, дублирующий GitVerse-RateLimit-Retry-After |
Эти заголовки помогают клиентам корректно управлять частотой запросов и избегать блокировок.
Примеры ответов
Успешный запрос
HTTP/1.1 200 OK
Date: Tue, 12 Aug 2025 17:00:00 GMT
Content-Type: application/json; charset=utf-8
GitVerse-RateLimit-Limit: 500
GitVerse-RateLimit-Remaining: 499
GitVerse-RateLimit-Retry-After: 3540
Gitverse-Ratelimit-Reset: 1754917200
Retry-After: 3540
Vary: Origin
Cache-Control: max-age=0, private, must-revalidate, no-transform
Превышение IP-лимита
HTTP/1.1 429 Too Many Requests
Date: Tue, 12 Aug 2025 17:00:00 GMT
Content-Type: application/json; charset=utf-8
GitVerse-RateLimit-Limit: 500
GitVerse-RateLimit-Remaining: 0
GitVerse-RateLimit-Retry-After: 2253
Gitverse-Ratelimit-Reset: 1754917200
Retry-After: 2253
Vary: Origin
Cache-Control: max-age=0, private, must-revalidate, no-transform
Это означает, что пользователь исчерпал лимит в 500 запросов. Повторить запрос можно через 2253 секунды (~37.5 минут).
Превышение глобального лимита
HTTP/1.1 429 Too Many Requests
Date: Tue, 12 Aug 2025 17:00:00 GMT
Content-Type: application/json; charset=utf-8
GitVerse-RateLimit-Limit: 1000000
GitVerse-RateLimit-Remaining: 0
GitVerse-RateLimit-Retry-After: 3600
Gitverse-Ratelimit-Reset: 1754920800
Retry-After: 3600
Vary: Origin
Cache-Control: max-age=0, private, must-revalidate, no-transform
Все запросы временно заблокированы. Сброс произойдеДля отладки состояния лимитов:т через 3600 секунд (1 час).
Рекомендации для пользователей
- Проверяйте заголовки
GitVerse-RateLimit-Remaining
иGitVerse-RateLimit-Retry-After
в каждом ответе. - При получении
429
, приостановите отправку запросов на указанное вRetry-After
время. - Используйте кэширование данных, чтобы снизить количество повторных запросов.
Отладка и мониторинг
Для отладки состояния лимитов:
- следите за значением
GitVerse-RateLimit-Remaining
— оно уменьшается с каждым запросом; - используйте
Gitverse-Ratelimit-Reset
для точного определения времени сброса (в формате Unix timestamp); - при массовых ошибках
429
проверьте, не исчерпан ли глобальный лимит — в этом случае проблема не в вашем IP, а в общей нагрузке на API.