2016-10-08 3 views
0

トランザクションをバッチで取り出すことは可能ですか?現在、以下を使用して注文を取得しています:バッチでトランザクションを取得するShopifyAPI

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

order_idsには50個までのorder_idsが含まれています。私は他に添付のトランザクションを取得しようとする場合は、それは1つが、それはこれをやっているフードの下ShopifyAPIコードに見て、トランザクションあたりの要求を取得します:

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

私が使用してバッチでそれをロードしようとした:

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

ただし、APIからorder_idが定義されていないというエラーが表示されます。 Order_idは1つの注文のトランザクションのみを取得しますが、これを一括して調べる方法はありますか?

私は文脈上、取引に関して私たち自身の側でいくつかの報告/分析を書こうとしているので、注文ごとにトランザクションを調べると、リクエストが多すぎてエラーコード429が返されます。これをゆっくりと実行し、cronを通してスケジューリングするレーキタスクを作成することができますが、ジョブを理想よりも少なくしているので、バッチでそれらを取得することが可能かどうかを尋ねると思いました。

答えて

1

レート制限を恐れるべきではありません。 1つのコールにつき1つの注文をトランザクションエンドポイントに提供する必要があります。分析はリアルタイムではないので、制限内でダウンロードするタスクを自分で設定してください。

これを行う方法の簡単な例として、テーマツールのShopifyオープンソースRuby gemを調べてください。それは明らかにこの制限にも実行されるテーマ資産のダウンローダを持っています。彼らはその周りに素敵な道を作りました。

最も簡単な形式では、リクエストに429の応答があります。だからそこで終わらないでください。利用可能な通話が増えるまでお待ちください。あなたはそれのための多くのオプションを夢見ることができます。最終的には、必要なすべてのデータが得られます。

ここで述べたバッチアイデアの問題は解決されません。代わりに、システムのルールに合わせてコードが調整されます。このようなリソースでバッチ処理が行われない理由については、多くの説明があります。

+0

私は今何かを持っているが、いくつかの呼び出しを二を平均化するための呼び出しが遅くなりますが、私はあなたのポイントを参照してください。私は429の応答を得る場合にのみ、それを眠るように更新することができます。 – user6689604

+0

確かに。それは動作します。 429を得る...睡眠(0.5)秒。 –

+0

私は平均して2秒間だけ平均して速くて、429を待ってから0.5秒間寝るのが早かった。それにかかわらず、私はレーキの仕事としてそれを設定し、それは今働く。ありがとう! – user6689604

0

429エラーを処理する最も簡単な方法は、429エラーが発生したときにバックオフ戦略を実装することです。これを行うには、最下位レベルの要求呼び出しにパッチを当てて、rescueブロックにラップして、レート制限エラーが発生したときに自動的に再試行する必要があります。

Here's an example implementation.

関連する問題