Основы
Лимиты запросов
Число запросов в минуту ограничено. Лимит считается для каждого ключа API отдельно, и для каждой группы ресурсов - свой. Текущее значение приходит в заголовке RateLimit-Limit.
Заголовки
В ответах на запросы с рабочим ключом есть три заголовка:
| Заголовок | Что в нём |
|---|---|
RateLimit-Limit |
Сколько запросов разрешено за минуту |
RateLimit-Remaining |
Сколько запросов осталось в текущей минуте |
RateLimit-Reset |
Через сколько секунд счётчик обнулится |
Минута отсчитывается от первого запроса после обнуления счётчика.
Если лимит превышен
API отвечает 429 rate-limited и в заголовке Retry-After пишет, через сколько секунд можно повторить:
HTTP/1.1 429 Too Many Requests
Retry-After: 17
RateLimit-Remaining: 0
RateLimit-Reset: 17
У некоторых операций есть своё ограничение поверх общего лимита. Оно тоже отвечает 429 с Retry-After, даже если RateLimit-Remaining больше нуля. Поэтому после 429 ориентируйтесь на Retry-After.
Как повторять запросы
- После
429подождите столько секунд, сколько указано вRetry-After, и повторите запрос. - После
503и обрыва связи повторяйте с нарастающей паузой: 1 секунда, 2, 4, 8 и так далее. Добавляйте к паузе немного случайного времени, чтобы повторы с нескольких ваших серверов не приходили одновременно. - Ограничьте число повторов и записывайте в лог
Request-Idпоследнего ответа. - Запрос на создание повторяйте с тем же
Idempotency-Key- тогда повтор не создаст дубль. См. Идемпотентность. - При массовой загрузке следите за
RateLimit-Remaining. Когда он дошёл до нуля, сделайте паузу наRateLimit-Resetсекунд.