Skip to content

Получение только изменившихся данных

Вебхуки не заменяют полную сверку: доставка не гарантируется, а часть списков вебхуками не покрыта. Листание через page тоже теряет записи. Пока обрабатывается первая страница, объект с неё могут удалить или обновить, и он уедет на уже прочитанную страницу. Следующая страница этого объекта уже не содержит.

Для сверки есть updated_since и from_id. В справочнике оба параметра указаны у списков:

  • GET /admin/products.json
  • GET /admin/orders.json
  • GET /admin/clients.json
  • GET /admin/collections.json
  • GET /admin/discount_codes.json
  • GET /admin/bonus_system_transactions.json

updated_since — время в UTC или со смещением. Отдаются объекты с updated_at больше либо равным этому времени. Пробелы и + в смещении нужно кодировать. Для полуночи 4 сентября 2017 по Москве строка такая:

2017-09-04 00:00:00 +03:00

в запросе:

updated_since=2017-09-04+00%3A00%3A00+%2B03%3A00

При заданном updated_since выдача идёт по возрастанию updated_at, затем по id. Каждый следующий запрос — снова первая страница, меняется только фильтр.

Товары

Для товаров правило проверено на списке.

from_id без updated_since не фильтрует: в ответе остаётся весь список, включая объект с этим id.

Вместе с updated_since из выдачи уходит сам опорный объект и всё, что раньше него. Берутся записи, у которых updated_at больше опоры, и записи с тем же updated_at и большим id. Так обходятся массовые обновления, где у тысяч товаров одно и то же время.

Алгоритм:

  1. Запросить пачку с сохранённым updated_since и from_id. Размер пачки — per_page.
  2. Пустая пачка — запомнить updated_since и остановиться до следующего запуска.
  3. У последнего объекта пачки взять updated_at в updated_since и id в from_id.
  4. Запросить следующую пачку.

Значение per_page меньше 10 для товаров поднимается до 10.

Удалённые товары помечаются archived: true.

  • deleted=true — только такие товары.
  • with_deleted=true — и текущие, и удалённые. В этом режиме deleted не действует.

Коллекции

У GET /admin/collections.json параметр updated_since ограничивает список по времени изменения. from_id на том же списке запись с переданным id не отсекает: при одинаковом updated_at она остаётся в ответе. Для коллекций страницу двигайте только временем updated_since и учитывайте, что пачка с одним и тем же временем может прийти снова.