質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

970閲覧

APIのスロットリング制限を適切に対処する方法を教えて下さい。

yuki_90453

総合スコア326

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2020/05/22 07:07

編集2020/05/22 07:36

#概要
200件の商品データがあり、それをAPIへPOSTします。APIの仕様上、商品は1件ずつしか登録できないため、200回ポストを行います。
しかし、APIに下記のようなスロットリング制限を設けており、POSTを連打することはできません。

  • 最大リクエストクォータ:40リクエスト
  • 回復レート:2商品/1秒

詳細

#現状
現状下記のように、POSTしたあと、待機処理して確実にポスト出来るようにしています。

for(let product of products_data){ await post_product(product); await sleep(1000) // ms }

#質問
APIのスロットリング制限化で最大限ポストを行いたいです。
一般的に、このようなスロットリング制限があるAPIにはどのように対処すべきでしょうか、上記のような待機処理あまり良い方法には思えません。。。
何かもっと良い方法で、APIのスロットリング制限化でを対処する方法はないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問に記載されている URL に

Rate limits header

You can check how many requests you’ve already made using the Shopify X-Shopify-Shop-Api-Call-Limit header that was sent in response to your API request.

X-Shopify-Shop-Api-Call-Limit: 32/40

In this example, 32 is the current request count and 40 is the bucket size. The request count decreases according to the leak rate over time. For example, if the header displays 39/40 requests, then after a wait period of ten seconds, the header displays 19/40 requests.

と書かれているので...

API のレスポンスで X-Shopify-Shop-Api-Call-Limit: 32/40 のような利用回数がレスポンスヘッダで返ってくるようなので、このレスポンスヘッダの値が、40 を超えないように回数を管理して、40 未満なら 40 になるまでアクセスして、40 になったら、wait をいれて待機とすれば、上限ギリギリでアクセスを繰り返せるのではないでしょうか。

投稿2020/05/24 13:54

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki_90453

2020/05/25 04:10

ご回答ありがとうございます。 参考になります。 結局、商品総数 / Limit(40件)で割り、 40件をPromise.allで並列実行し、その後待機処置で20秒待ってという、またpromise.allという形が1番早そうなのでこの方法にしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問