mcpField
A
api-rate-limiting

api-rate-limiting

github.com/secondskyセキュリティ240497 回インストール5 週間前に更新
リポジトリ

api-rate-limiting について

API開発者向けのレート制限ガイドです。ユーザー別・エンドポイント別の戦略を扱い、複数のアルゴリズム、Expressミドルウェア、レスポンスヘッダーの例を示します。

主な機能

  1. 01トークンバケット・スライディングウィンドウ・固定ウィンドウ
  2. 02Expressレート制限ミドルウェアの例
  3. 03レート制限レスポンスヘッダーの説明
  4. 04段階別リクエスト制限の戦略
  5. 05分散レート制限の実践方法

活用シーン

  1. 01ユーザーごとのAPIリクエスト頻度制限
  2. 02APIエンドポイントごとの上限設定
  3. 03制限レスポンスへの標準ヘッダー追加
  4. 04契約プランごとのリクエスト上限設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/secondsky/claude-skills --skill api-rate-limiting

インストール後、Claude Code で/api-rate-limitingを入力して読み込まれたか確認します。

詳細

API レート制限

ユーザーごとおよびエンドポイントごとの戦略を使ったレート制限アルゴリズムで、API を不正利用から保護します。

アルゴリズム

アルゴリズムメリットデメリット
トークンバケットバーストに対応し、処理を平滑化ユーザーごとにメモリが必要
スライディングウィンドウ正確メモリ使用量が多い
固定ウィンドウシンプル境界でスパイクが発生

トークンバケット(Node.js)

class TokenBucket {
  constructor(capacity, refillRate) {
    this.capacity = capacity;
    this.tokens = capacity;
    this.refillRate = refillRate; // tokens per second
    this.lastRefill = Date.now();
  }

  consume() {
    this.refill();
    if (this.tokens >= 1) {
      this.tokens--;
      return true;
    }
    return false;
  }

  refill() {
    const now = Date.now();
    const elapsed = (now - this.lastRefill) / 1000;
    this.tokens = Math.min(this.capacity, this.tokens + elapsed * this.refillRate);
    this.lastRefill = now;
  }
}

Express ミドルウェア

const rateLimit = require('express-rate-limit');

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100,
  standardHeaders: true,
  message: { error: 'Too many requests, try again later' }
});

app.use('/api/', limiter);

レスポンスヘッダー

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1705320000
Retry-After: 60

段階別の制限

プランリクエスト数/時間
無料100
Pro1,000
エンタープライズ10,000

ベストプラクティス

  • 分散レート制限には Redis を使用します
  • レスポンスに適切なヘッダーを含めます
  • Retry-After を指定して 429 ステータスを返します
  • プランごとに段階別の制限を設定します
  • レート制限のメトリクスを監視します
  • 負荷をかけてテストします

コメント