Polling, тайм-аут, повтор результата и идемпотентность
Опрашивайте pull-методы по расписанию; пустой ответ не означает конец очереди. Если ответ на result потерялся, повторите тот же запрос с тем же delivery_id — повтор безопасен и не меняет статью.
Содержание
Опрос
- Опрашивайте
/articles/new/pullи/articles/improvements/pullпо расписанию, например раз в несколько минут. Чаще, чем раз в несколько секунд, опрашивать не нужно. count: 0или пустойitemsне доказывает, что очередь пуста: за один запрос сервис просматривает ограниченную часть большой очереди. Продолжайте опрос.- Держитесь в пределах 60 запросов в секунду на ключ.
Порядок обработки
- Получите статью.
- Сохраните её в CMS по
article_identityи дождитесь, пока запись сохранится. - Только после этого отправьте result.
Если CMS не смогла сохранить статью — не отправляйте accepted. Статья придёт снова при следующем опросе.
Повтор result
Если CMS сохранила результат, но не получила HTTP-ответ (тайм-аут, обрыв), повторите тот же запрос с тем же delivery_id:
- повтор с тем же решением возвращает
200; - для
acceptedадрес должен совпадать с первым подтверждением, или поле можно опустить; - повтор не меняет текст, статус статьи, даты и аналитику;
article_statusиexternal_urlв ответе показывают текущее состояние статьи — после первого подтверждения могли появиться новые версии.
Изменить решение или адрес уже закрытой доставки нельзя: 409 delivery_already_resolved. Для смены адреса есть отдельный PATCH — Справочник публичных методов, параметров, схем и примеров.
Тайм-ауты
- Ставьте разумный тайм-аут на запросы (например, 30 секунд) и повторяйте с паузой при сетевых ошибках и
429. - Повторять pull безопасно: до result снимок остаётся в очереди.
Не нашли ответ? Напишите в поддержку из панели — укажите проект и что вы видите на экране.