我在Ruby中使用Shopify的shopify_api
宝石。
我正在从外部来源更新每种产品的成本和价格,但是我达到了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
答案 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
并不是很好。您可以将一些地方合并为一个电话。