FutureVuls API のレートリミット#
【予告】レートリミットを導入する予定です#
2026 年前半 (2月下旬ごろを予定) のリリースにて、レートリミットを導入いたします。
導入の背景#
現在、多くのお客様に FutureVuls API をご利用いただいておりますが、一部の集中したアクセスによりシステム全体の応答速度に影響が出るケースがございます。
今後もサービスの安定稼働とパフォーマンスを維持し、すべてのお客様に快適にご利用いただくため、API のレートリミット導入を決定いたしました。
レートリミットの仕様について#
適用予定のレートリミット制限#
- API トークンごとに、 20 リクエスト/分 の制限を適用します。
- IP アドレスごとに、 200 リクエスト/分 の制限を適用します。
レートリミット制限は厳密な制限ではありません
トークン・ IP アドレスのいずれの制限も、厳密なものではありません。「20 リクエスト/分 をある程度継続して超過している」と判断された場合に制限がかかる仕様となっています。
例えばトークンの制限であれば、レートリミット制限がかかるまでに 30~40 回ほどリクエストを投げることができる場合がございます。
レートリミット例#
「厳密なリクエスト制限」と仮定した場合のレートリミット例を記載します。 ( ※ 実際は制限がかかるまでのリクエスト回数に揺れがあることをあらかじめご了承ください。)
- 環境:
- IP アドレス: 192.0.2.1 (グローバル IP)
- 使用トークン: Token_A
- API 使用状況:
- 1分間に 30回 リクエストを送信
- 結果:
- 最初の 20回 は成功します
- 21回目以降の 10回 はエラーになります
- 理由:
- IP アドレス全体の送信数(30回)は、IP 制限(200回)以内です
- しかし、Token_A の送信数が制限(20回)を超えたため、ブロックされます
レートリミット制限時のレスポンス#
トークンベースのレートリミット制限を超過した場合のエラーレスポンスの仕様は以下のとおりです。
- ステータスコード:
429 Too Many Requests
- レスポンスヘッダ:
x-ratelimit-limit: 20
-
レスポンスボディ:
{ "error" : "You have exceeded the token-based rate limit of 20 requests per minute." }
レートリミットが解除されるまでの時間#
レートリミット制限が開始されてから解除されるまでの時間は、約 1 分です。 (これは厳密な時間ではありません。)
レートリミットの回避方法#
レートリミットを回避するための方法をいくつか紹介します。
レートリミットの回避方法 ① : 複数対象を一度に取得するための API を活用する#
以下のように、特定の対象をまとめて取得する API を用意しております。これらの API を利用することで、脆弱性詳細やタスク詳細を取得する API を大量に実行する必要がなくなります。
- タスクコメント : タスクコメントバッチ取得 API (
GET /v1/taskComments)- 複数のタスク ID を指定して、それぞれのコメントを一度に取得できます
- 使用例: APIサンプル - タスクコメントバッチ取得
- 脆弱性情報 : グループセット脆弱性情報取得 API (
GET /v1/groupSet/cveVulnInfos)- 複数の CVE ID を指定して、それぞれの脆弱性情報を一度に取得できます
- 使用例: APIサンプル - グループセット脆弱性情報取得
レートリミットの回避方法 ② : sleep を導入する#
API を連続して実行する場合は、リクエスト間に適切な待機時間(sleep)を設けることで、レートリミットに達するリスクを減らせます。
実装例#
- API トークンごとの 20 リクエスト/分 及び IP アドレスごとの 200 リクエスト/分 を超えないように、1 リクエストごとに sleep を入れる
- API リクエストのレスポンスを取得する度に ステータスコードのチェック処理 を追加する。レスポンスのステータスコードが 429 の場合は、 20リクエスト/分 を下回るように sleep を入れる (リクエスト毎に 5 秒程度)