【问题标题】:Rate limit Shopify API calls in RubyRuby 中的速率限制 Shopify API 调用
【发布时间】:2019-07-08 10:24:07
【问题描述】:

我在 Ruby 中使用 Shopify 的 shopify_api gem。

我正在从外部来源更新每种产品的成本和价格,但是我达到了 API 限制并收到了429 Too Many Requests (https://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

【问题讨论】:

    标签: ruby shopify


    【解决方案1】:

    Shopify 本身提供了一个宝石来帮助限制速率:https://github.com/Shopify/limiter

    【讨论】:

    • 你用过那个宝石吗?它运作良好吗?您有任何可以作为要点或其他内容发布的示例用法吗?看起来很有趣,但它与 Active Resource 的交互方式也有点模糊。
    【解决方案2】:

    最简单的方法是 Monkeypatch ActiveResource。这是一个为您完成所有工作的存储库。

    https://github.com/mikeyhew/shopify_api_mixins

    【讨论】:

      【解决方案3】:

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

      Shopify API Retry gem 就是这样做的。它看起来像 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 不是很好。您可以将一些地方合并到一个电话中。

      【讨论】:

      • 有趣的方法... :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      相关资源
      最近更新 更多