Руководства

Как правильно повторять неудавшийся запрос

Автоматический повтор верен для одних ошибок и является пустой тратой запроса для других. Ошибка здесь либо заваливает запросами и без того перегруженный эндпоинт, либо заставляет отказаться от запроса, который сработал бы секундой позже.

Ошибки, которые стоит повторять

Ответ 503 означает, что сервис временно недоступен, а это именно то временное состояние, для которого и предназначен короткий отложенный повтор. Тайм-аут сети на вашей стороне, когда вы вообще не получили ответа, относится к той же категории, поскольку запрос мог быть обработан, а мог и не быть.

HTTP/1.1 503 Service Unavailable

{
  "status": "error",
  "error": {"code": "service_unavailable", "message": "Temporarily unavailable, try again shortly"}
}

Ошибки, которые не стоит повторять

400 означает, что сам запрос составлен неправильно, например отсутствует обязательный параметр или координаты вне допустимого диапазона. 401 означает, что аутентификация не прошла. Повтор любого из них без исправления исходной проблемы лишь снова приведёт к той же ошибке, а каждая попытка в большинстве случаев всё равно учитывается как запрос, так что цикл повторов неверного запроса может впустую израсходовать вашу квоту.

Увеличение паузы между попытками

Фиксированная короткая задержка подходит для одиночного интерактивного запроса, но пакетная задача, повторяющая много неудачных элементов, должна увеличивать паузу постепенно, удваивая ожидание между попытками до разумного предела, чтобы кратковременный сбой не превратился в лавину повторов в момент восстановления сервиса.

429: отдельный случай

429 это не столько сбой, который нужно повторить, сколько сигнал сделать паузу. Прочитайте заголовок X-Quota-Reset и подождите до указанного времени, а не повторяйте запрос с короткой фиксированной задержкой, поскольку повтор до сброса будет снова и снова возвращать тот же 429.

Помните о стоимости запросов

Каждая попытка повтора, дошедшая до сервера, успешная или нет, является запросом. Стратегия повторов, учитывающая разницу между временными и постоянными ошибками, позволяет тратить дневную квоту и предоплаченный баланс на реальную работу, а не на повторяющиеся сбои.

Хорошая стратегия повторов в основном сводится к тому, чтобы отличать «попробуйте снова» от «сначала исправьте». На странице ошибок перечислены все коды ошибок, которые возвращает API, и причины каждой из них.