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

Материал из Insales Wiki
Перейти к: навигация, поиск
Строка 15: Строка 15:
 
Алгоритм работы такой:  
 
Алгоритм работы такой:  
 
* получили пачку товаров,  
 
* получили пачку товаров,  
* если пачка пуста, сохранили '''updated_sine''' в базу до следующего раза и завершились,
+
* если пачка пуста, сохранили '''updated_since''' в базу до следующего раза и завершились,
* взяли последний товар из пачки и подставили его '''updated_at''' в '''updated_sine''', а '''id''' во '''from_id''',
+
* взяли последний товар из пачки и подставили его '''updated_at''' в '''updated_since''', а '''id''' во '''from_id''',
 
* запросили следующую пачку,
 
* запросили следующую пачку,
 
* ....
 
* ....

Версия 11:02, 12 мая 2017

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

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

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

  • updated_since - время в UTC, будут отдаваться объекты у которых updated_at больше либо равен updated_since
  • from_id - id последнего принятого вами объекта. Объекты у которых updated_at равен updated_since и id меньше либо равен from_id не передаются. Это сделано для листания в случае если у большого количества товаров одинаковый updated_at (такое бывает из-за обновления товаров массовыми операциями). from_id работает только вместе с updated_since. Если updated_since не задан, то from_id игнорируется.

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


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

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