Ограничение тарифа Звонки через API Shopify в Ruby - PullRequest
1 голос
/ 08 июля 2019

Я использую самоцвет Shopify shopify_api в Ruby.

Я обновляю стоимость и цену каждого продукта из внешнего источника, однако я бью ограничения API и получаю 429 Too Many Requests (https://help.shopify.com/en/api/reference/rest-admin-api-rate-limits).

Как я могу отредактировать нижеследующее, чтобы соблюдать ограничения API?

Я бы лучше использовал данные, предоставленные в X-Shopify-Shop-Api-Call-Limit и Retry-After, а не добавил фиксированные sleep.

products = ShopifyAPI::Product.find(:all, :params => {:limit => limit})

products.each do |product|
                variant = ShopifyAPI::Variant.find(product.variants.first.id)

                variant.price = price
                variant.save

                inventoryitem = ShopifyAPI::InventoryItem.find(product.variants.first.inventory_item_id)

                inventoryitem.cost = cost
                inventoryitem.save
        end
end

Ответы [ 3 ]

0 голосов
/ 09 июля 2019

В Shopify есть самоцвет, помогающий с ограничением скорости: https://github.com/Shopify/limiter.

0 голосов
/ 09 июля 2019

Я бы лучше использовал данные, предоставленные в X-Shopify-Shop-Api-Call-Limit и Retry-After вместо добавления фиксированного сна.

Gem Shopify API Retry *1006* делает это. Он смотрит на заголовок Retry-After, но использует фиксированный сон. Спать нельзя. Как еще ждать?

Это не делает никаких "исправлений обезьян". Это хорошо. Исправление обезьяны, вероятно, вызовет проблему в некоторый момент.

Для использования с вашим кодом

products = ShopifyAPIRetry.retry { ShopifyAPI::Product.find(:all, :params => {:limit => limit}) }
products.each do |product|
  variant = ShopifyAPIRetry.retry { ShopifyAPI::Variant.find(product.variants.first.id) }

  variant.price = price
  ShopifyAPIRetry.retry { variant.save }

  inventoryitem = ShopifyAPIRetry.retry { ShopifyAPI::InventoryItem.find(product.variants.first.inventory_item_id) }

  inventoryitem.cost = cost
  ShopifyAPIRetry.retry { inventoryitem.save }
end

Необходимость звонить retry везде не так уж и приятно. Вы могли бы объединить некоторые места в один звонок.

0 голосов
/ 08 июля 2019

Самый простой подход - это Monkeypatch ActiveResource.Вот репо, который делает всю работу за вас.

https://github.com/mikeyhew/shopify_api_mixins

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...