批量获取交易 ShopifyAPI

Get transactions in batches ShopifyAPI

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

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

其中 order_ids 最多包含 50 个 order_ids。但是,如果我尝试将交易附加到另一笔交易,它会为每笔交易发出一个获取请求,查看底层的 ShopifyAPI 代码,它正在这样做:

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

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

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

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

对于上下文,我正在尝试在我们自己这边围绕交易编写一些 reporting/analytics,因此在每个订单的基础上查找交易会导致发出太多请求并获得错误代码429. 我可以创建一个缓慢执行此操作的 rake 任务并通过 cron 安排它,但我想我会问是否可以分批获取它们,因为工作不太理想。

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

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

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

不是按照你这里提出的Batch思路去解决问题,而是调整自己的代码来适应系统的规则。关于为什么批处理不适用于这样的资源,有很多解释。

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

Here's an example implementation.