Shopify API:在一次调用中通过 id 检索多条记录
Shopify API: Retrieve multiple records via id in a single call
我注意到在 Shopify API 文档中,他们提到了使用 "A comma-separated list of order ids" 作为参数在一次调用中 检索多个订单的可能性"ids".
Link 到我所指的文档部分:https://docs.shopify.com/api/order#index
多年来我一直在使用 shopify_api gem,它基于 Rails ActiveResource。我目前将它与 Rails 3.2.13 一起使用,效果很好。
我知道如何检索单条记录:
# params[:id] = "123456789"
order = ShopifyAPI::Order.find(params[:id])
或同时记录多条记录:
orders = ShopifyAPI::Order.find(:all, :params => {:limit => 250, :page => 2})
但是,我似乎无法使用多个 ID 让它工作。知道我在这里做错了什么吗?
# params[:ids] = "123456789,987654321,675849301"
orders = ShopifyAPI::Order.find(:all, :params => {:ids => params[:ids]})
发出此 GET 请求的:https://xxxxxx.myshopify.com:443/admin/orders.json?ids=123456789,987654321,675849301
却一无所获,orders = []
更新:
我也试过以下建议:
# params[:ids] = "123456789,987654321,675849301"
orders = ShopifyAPI::Order.find(params[:ids])
发出此 GET 请求的:https://xxxxxx.myshopify.com:443/admin/orders/123456789,987654321,675849301.json
不过这只是returns第一个订单123456789
并且:
# params[:ids] = "123456789,987654321,675849301"
ids_as_array = params[:ordersSel].split(",")
orders = ShopifyAPI::Order.find(:all, :params => {ids: ids_as_array})
发出此 GET 请求的:
https://xxxxxx.myshopify.com:443/admin/orders.json?ids[]=123456789&ids[]=987654321&ids[]=675849301
结果是 Bad Request
您可以将 ids
作为 find
的第一个参数传递:
orders = ShopifyAPI::Order.find(params[:ids])
或者如果您需要寻呼:
orders = ShopifyAPI::Order.find(params[:ids], :params => {:limit => 250, :page => 1})
这对我有用,刚刚在控制台中测试过
myids = "2354899011,1234263747"
ShopifyAPI::Order.where(ids: myids)
这会产生以下请求
https://myfancyshop.myshopify.com/admin/orders.json?ids=2354899011,1234263747
此 ShopifyAPI::Order.find(:all, :params => { :ids => myids })
也为我提供了相同的结果。
好的,所以我一直在尝试的实际上是正确的。问题原来是我在测试商店的订单是 Archived/Closed 所以请求需要是这样的:
# params[:ids] = "123456789,987654321,675849301"
orders = ShopifyAPI::Order.find(:all, :params => {
:ids => params[:ids],
:status => 'any'
})
关键是要在调用中包含 :status => 'any'
,否则只有 API 状态为 'Open'.
的 returns 订单
注意:以上适用于 Rails 3.2 和 Shopify API gem 3.2.6(因此无需使用最新版本)。
感谢其他两个确认这是可能的答案。
我注意到在 Shopify API 文档中,他们提到了使用 "A comma-separated list of order ids" 作为参数在一次调用中 检索多个订单的可能性"ids".
Link 到我所指的文档部分:https://docs.shopify.com/api/order#index
多年来我一直在使用 shopify_api gem,它基于 Rails ActiveResource。我目前将它与 Rails 3.2.13 一起使用,效果很好。
我知道如何检索单条记录:
# params[:id] = "123456789"
order = ShopifyAPI::Order.find(params[:id])
或同时记录多条记录:
orders = ShopifyAPI::Order.find(:all, :params => {:limit => 250, :page => 2})
但是,我似乎无法使用多个 ID 让它工作。知道我在这里做错了什么吗?
# params[:ids] = "123456789,987654321,675849301"
orders = ShopifyAPI::Order.find(:all, :params => {:ids => params[:ids]})
发出此 GET 请求的:https://xxxxxx.myshopify.com:443/admin/orders.json?ids=123456789,987654321,675849301
却一无所获,orders = []
更新:
我也试过以下建议:
# params[:ids] = "123456789,987654321,675849301"
orders = ShopifyAPI::Order.find(params[:ids])
发出此 GET 请求的:https://xxxxxx.myshopify.com:443/admin/orders/123456789,987654321,675849301.json
不过这只是returns第一个订单123456789
并且:
# params[:ids] = "123456789,987654321,675849301"
ids_as_array = params[:ordersSel].split(",")
orders = ShopifyAPI::Order.find(:all, :params => {ids: ids_as_array})
发出此 GET 请求的:
https://xxxxxx.myshopify.com:443/admin/orders.json?ids[]=123456789&ids[]=987654321&ids[]=675849301
结果是 Bad Request
您可以将 ids
作为 find
的第一个参数传递:
orders = ShopifyAPI::Order.find(params[:ids])
或者如果您需要寻呼:
orders = ShopifyAPI::Order.find(params[:ids], :params => {:limit => 250, :page => 1})
这对我有用,刚刚在控制台中测试过
myids = "2354899011,1234263747"
ShopifyAPI::Order.where(ids: myids)
这会产生以下请求
https://myfancyshop.myshopify.com/admin/orders.json?ids=2354899011,1234263747
此 ShopifyAPI::Order.find(:all, :params => { :ids => myids })
也为我提供了相同的结果。
好的,所以我一直在尝试的实际上是正确的。问题原来是我在测试商店的订单是 Archived/Closed 所以请求需要是这样的:
# params[:ids] = "123456789,987654321,675849301"
orders = ShopifyAPI::Order.find(:all, :params => {
:ids => params[:ids],
:status => 'any'
})
关键是要在调用中包含 :status => 'any'
,否则只有 API 状态为 'Open'.
注意:以上适用于 Rails 3.2 和 Shopify API gem 3.2.6(因此无需使用最新版本)。
感谢其他两个确认这是可能的答案。