これが私が単に欠けているという非常に明白なものである場合は、私の謝罪を受け入れてください. Asana restful API を 1 分間に 100 回を少し超えるバースト レートでヒットする perl スクリプトがあります。ストレス テストを行うと、レート制限に達してエラー 429 が表示されることがあります。このヘッダーを取得/オープン/読み取ります。アドバイスをいただければ幸いです。
編集:私のコードは以下に添付されています。もちろん、API キーやプロジェクト番号などの機密情報は消去しましたが、コア コードはここにあります。これを 1 回だけ実行すると、エラーをトリガーするのに十分な 1 分あたりの呼び出しが生成されません。エラーを生成するには、同時に約3〜4回実行する必要があります。「そんなことしないで」と言う人もいるかもしれません。正しいですが、この演習のポイントはエラーを生成することなので、同時に 4 回実行することをお勧めします。
有効な API キーとプロジェクト番号を使用してこれを行うと、次のエラーが発生することがあります。
{"errors":[{"message":"You have made too many requests recently. Please, be chill."}]}
私の質問は、明らかに再試行フィールドと秒数を含むヘッダーを取得する方法です。エラーが返されるたびに 20 秒の遅延を構築することに頼るかもしれませんが、エラーをよりエレガントに処理したいと考えています。
#!/usr/local/bin/perl
my $counter = 0;
my $AsanaAPIcode = "...";
my $AsanaProjectID = "...";
my $AsanaFullString = 'curl -u ' . $AsanaAPIcode . ': https://app.asana.com/api/1.0/projects/' . $AsanaProjectID . '?opt_fields=archived';
my $APIoutput = `$AsanaFullString`;
print $APIoutput;
my $startTime = time;
my $totalCount = 200;
while ($counter<=$totalCount) {
print $counter . "\n";
$APIoutput = `$AsanaFullString`;
print $APIoutput . "\n";
$counter++;
}
my $endTime = time;
my $totalTime = $endTime - $startTime;
print "Total time = " . $totalTime . " seconds.\n";
print $totalCount / ($totalTime / 60) . " API calls per minute.\n";
print "end";