对Ruby中的Shopify API调用进行速率限制

时间:2019-07-08 10:24:07

标签: ruby shopify

我在Ruby中使用Shopify的shopify_api宝石。

我正在从外部来源更新每种产品的成本和价格,但是我达到了API限制并收到了429 Too Many Requestshttps://help.shopify.com/en/api/reference/rest-admin-api-rate-limits)。

如何修改以下内容以遵守API限制?

我宁愿使用X-Shopify-Shop-Api-Call-LimitRetry-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 :(得分:0)

最简单的方法是Monkeypatch ActiveResource。这是一个仓库,可以为您完成所有工作。

https://0k213z6zp2.execute-api.us-east-1.amazonaws.com/latest

答案 1 :(得分:0)

Shopify本身有一个宝石可以帮助您进行速率限制:https://github.com/Shopify/limiter

答案 2 :(得分:0)

  

我宁愿使用X-Shopify-Shop-Api-Call-Limit中提供的数据   和Retry-After,而不是添加固定的睡眠。

engine执行此操作。它看起来像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

在任何地方都必须打电话给editor并不是很好。您可以将一些地方合并为一个电话。