Опубликовать 800 файлов json в Shopify API (ограничение 40 в секунду)

У нас есть около 800 файлов json, которые нужно опубликовать в Shopify API. Его нельзя объединить в один вызов API (нет BULK post API). Shopify ограничивает 40 запросов в секунду. Это API, по которому мы отправляем данные:

POST /admin/api/2019-07/inventory_levels/set.json.

В источнике данных у нас меньше контроля над тем, как/когда данные генерируются и публикуются. Но мы можем накапливать файлы json в папке.

Мы ищем инструмент (или набор тестов), который может позволить что-то вроде публикации API частями или способ планирования/ограничения запросов API публикации в очереди/группе. Мы обнаружили функции "Планировщик" в таких инструментах, как JMeter, но надеемся найти решение от кто-то, кто уже разработал подобные решения.

заранее спасибо


person Hemant Tank    schedule 27.08.2019    source источник
comment
На этот вопрос почти невозможно ответить. Выполнение вызовов HTTP POST настолько распространено и просто, почти во всех известных широко используемых языках сценариев. Если вы не можете организовать свой источник для выполнения POST, вы должны сообщить, почему для получения помощи.   -  person David Lazar    schedule 28.08.2019
comment
@DavidLazar, мы пытаемся справиться с этим в исходном коде, но пока не смогли этого добиться. Наличие сценария, подобного node.js, который отслеживает папку для файла .json и делает то, что нам нужно, — это последний вариант. Если инструмент доступен, мы хотели бы использовать его напрямую.   -  person Hemant Tank    schedule 28.08.2019
comment
@HemantTank, вы не можете настроить веб-хук, который будет получать ваши необработанные данные JSON и вместо того, чтобы хранить их в файле, отправлять их в Shopify через API?   -  person HymnZzy    schedule 29.08.2019
comment
@HemantTank, а во-вторых, если загрузка 800 файлов является разовой операцией, вы делаете это программно. Это могут быть последовательные или параллельные вызовы, как вы считаете нужным.   -  person HymnZzy    schedule 29.08.2019
comment
@HymnZ - как я уже упоминал, мы пробуем другой подход из нашего интерфейса. Файлы будут созданы. Однако нам нужно знать, есть ли инструмент, который может его автоматизировать — основная функция, которая нам нужна, — это планирование для преодоления ограничения количества запросов в секунду. Спасибо.   -  person Hemant Tank    schedule 14.09.2019


Ответы (1)


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

Настройки по умолчанию следующие:

  • Размер ковша: 40
  • Скорость утечки: 2 в секунду

Если размер корзины превышен, возвращается ошибка HTTP 429 Too Many Requests.

Рекомендации

  1. Разработайте свое приложение с учетом ограничений скорости API, чтобы лучше справляться с ограничениями запросов и избегать ошибок 429.
  2. Распределяйте запросы API в очереди и выполняйте другие задачи обработки, ожидая выполнения следующего задания в очереди.

Используйте заголовок ограничения скорости, чтобы сбалансировать объем запросов. Мы обработали этот вариант использования с помощью celery. По сути, вам нужно совершать вызовы API, и всякий раз, когда вызов завершается неудачей, вы получаете код исключения. Если код 429, вы повторяете ту же задачу через интервал (ниже проверьте, как получить интервал), пока она не будет выполнена успешно.

Как получить интервал, после которого вы можете отправлять запросы после дросселирования вашего приложения?
Если ваше приложение ограничено, оно не сможет делать больше запросов, пока не истечет достаточное количество времени. прошло, и ваше ведро снова имеет вместимость. Вы можете рассчитать это время ожидания вручную, используя свойства размера корзины и скорости утечки или используя заголовок ответа Retry-After.

Источник: Документация по ограничению ставок в Shopify

person Subhrajyoti Das    schedule 28.08.2019
comment
Спасибо, это было информативно, и я считаю, что это подтверждает, что Shopify не имеет массового набора API, и мы должны соблюдать ограничения дроссельной заслонки. Посмотрю на Сельдерей. - person Hemant Tank; 28.08.2019