【问题标题】:Get transactions in batches ShopifyAPI批量获取交易 ShopifyAPI
【发布时间】:2016-10-08 18:31:30
【问题描述】:

是否可以批量检索交易?我目前使用以下方式检索订单:

ShopifyAPI::Order.find(:all, params: {ids: order_ids.join(',')})

其中 order_ids 最多包含 50 个 order_id。但是,如果我尝试将交易附加到另一笔交易,它会为每笔交易发出一个获取请求,并查看它正在执行此操作的 ShopifyAPI 代码:

Transaction.find(:all, :params => { :order_id => id })

我尝试使用以下方法批量加载它:

Transaction.find(:all, :params => { :order_ids => order_ids.join(',') })

但是,我从 API 中收到一条错误消息,指出未定义 order_id。 order_id 只获取一个订单的交易,有什么方法可以批量查找?

就上下文而言,我正在尝试围绕交易编写一些我们自己的报告/分析,因此按订单查找交易会导致发出过多请求并收到错误代码 429。我可以创建一个缓慢执行此操作的 rake 任务并通过 cron 安排它,但我想我会问是否可以分批抓取它们,因为有一份工作不太理想。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord shopify


    【解决方案1】:

    您不应该害怕速率限制。您必须为每次调用交易端点提供一份订单。由于您的分析不是实时的,因此只需为自己设置一个在限制范围内下载的任务。

    有关如何执行此操作的简单示例,请查看 Shopify 开源 Ruby gem 的主题工具。它有一个主题资产的下载器,显然也遇到了这个限制。他们为此建立了一个很好的方法。

    在最简单的形式中,您会收到对您的请求的 429 响应。所以不要在那里退出。等到你有更多的电话可用。你可以为此设想很多选择。最后,您只需几行代码即可获得所需的所有数据。

    一个人并没有解决你在这里提出的批处理想法的问题,而是调整他们的代码以适应系统的规则。关于为什么没有像这样的资源进行批处理的原因有很多解释。

    【讨论】:

    • 我现在有一些东西可以将通话速度减慢到平均每秒几个通话,但我明白你的意思。只有当我收到 429 响应时,我才能将其更新为睡眠状态。
    • 我发现平均每秒 2 次调用比等待 429 然后休眠 0.5 秒更快。无论如何,我将它设置为一个 rake 任务,它现在可以工作了。谢谢!
    【解决方案2】:

    处理 429 错误的最简单方法是在遇到 429 错误时实施退避策略。为此,您需要修补最低级别的请求调用并将其包装在 rescue 块中,以便在遇到速率限制错误时自动重试。

    Here's an example implementation.

    【讨论】:

      猜你喜欢
      • 2023-02-21
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 2014-05-12
      • 2018-12-20
      • 2013-02-13
      • 2019-08-02
      相关资源
      最近更新 更多