Top.Mail.Ru

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

Часто возникает задача синхронизации списков товаров, категорий на сайте, заказов и покупателей. Для заказов есть Webhooks, но они не гарантируют доставку.

Обычно мы начинаем листать страницы при помощи per_page и page. Но иногда мы не узнаем об изменениях. Так получается из-за того, что пока обрабатывается первая страница (и в это время готовимся забрать вторую), объект с первой страницы удалили. Или обновили объект, и он поменял свое положение в списке. Список обновился, и первый объект второй страницы оказался на первой, которую мы уже получили. То есть о его изменениях мы не узнаем.

Для того чтобы гарантировано забрать изменения в InSales используются для параметра:

  • updated_since - время в UTC, будут отдаваться объекты у которых updated_at больше либо равен updated_since. Важно правильно ескейпить значение, допустим нужно получить все объекты, измененные после 00:00 часов по Москве, время должно быть "22017-09-04 00:00:00 +03:00" ,в URL надо передавать "updated_since=2017-09-04+00%3A00%3A00+%2B03%3A00"
  • from_id - id последнего принятого объекта. Объекты, у которых updated_at равен updated_since,и id меньше либо равен from_id не передаются. Это сделано для листания в случае, если у большого количества товаров одинаковый updated_at (такое бывает из-за обновления товаров массовыми операциями). from_id работает только вместе с updated_since. Если updated_since не задан, то from_id игнорируется.
  • with_deleted - если этот параметр передан, то на равне с существующими товарами передаются товары из корзины. Их можно отличить по наличию флага archived.
  • deleted - если этот флаг передан, то передаются только товары из корзины. Этот флаг игнорируется, если передать флаг with_deleted.

В случае если передать параметр updated_since, объекты упорядочиваются по возрастанию updated_since и возрастанию ID. И мы всегда забираем первую страницу, у нас просто меняется фильтр. Это гарантирует, что мы не потеряем данные. Количество запрашиваемых объектов передается в per_page.

Алгоритм работы такой:

  • получили пачку товаров,
  • если пачка пуста, сохранили updated_since в базу до следующего раза и завершились,
  • взяли последний товар из пачки и подставили его updated_at в updated_since, а id во from_id,
  • запросили следующую пачку,
  • ...и т.д.

Оставить оценку

Оценка успешно отправлена.
Она будет проверена администратором перед публикацией.
Перед публикацией все оценки проходят модерацию

Оценки: 0

Остались вопросы?
Отправь тикет в техподдержку!
Еще нет своего магазина?
Создайте интернет-магазин на платформе InSales
Всё для продаж уже внутри!
Недавно просмотренные статьи