api-rate-limiting について
APIの保護とトラフィック管理に使うレート制限スキルです。ユーザー、IP、エンドポイント単位の制限に加え、アルゴリズムや実装のリファレンスを扱います。
主な機能
- 01ユーザー、IP、エンドポイント別の制限
- 02トークンバケットとスライディングウィンドウのガイド
- 03Redisベースのレート制限
- 04段階別の制限とクォータ
- 05レート制限レスポンスヘッダー
活用シーン
- 01ブルートフォース攻撃からのAPI保護
- 02トラフィック急増とDoSリスクの管理
- 03サービスプランへの使用量クォータ適用
- 04APIリソースの公平な配分
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ aj-geddes/ useful-ai-prompts --skill api-rate-limitingインストール後、Claude Code で/api-rate-limitingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/python-rate-limiting-flask.mdredis-based-rate-limiting.mdresponse-headers.mdsliding-window-algorithm.mdtiered-rate-limiting.mdtoken-bucket-algorithm.mdscripts/validate-api.shtemplates/api-scaffold.yaml詳細
API レート制限
目次
概要
ユーザーごと、IP ごと、エンドポイントごとの戦略を使い、さまざまなレート制限アルゴリズムで API を不正利用から保護し、トラフィックを管理します。
使用する場面
- ブルートフォース攻撃から API を保護する
- トラフィックの急増を管理する
- 段階的なサービスプランを導入する
- DoS 攻撃を防ぐ
- リソース割り当ての公平性を確保する
- クォータと使用量の上限を適用する
クイックスタート
最小限の実行可能な例:
// Token Bucket Rate Limiter
class TokenBucket {
constructor(capacity, refillRate) {
this.capacity = capacity;
this.tokens = capacity;
this.refillRate = refillRate; // tokens per second
this.lastRefillTime = Date.now();
}
refill() {
const now = Date.now();
const timePassed = (now - this.lastRefillTime) / 1000;
const tokensToAdd = timePassed * this.refillRate;
this.tokens = Math.min(this.capacity, this.tokens + tokensToAdd);
this.lastRefillTime = now;
}
consume(tokens = 1) {
this.refill();
if (this.tokens >= tokens) {
this.tokens -= tokens;
return true;
}
// ... (see reference guides for full implementation)
リファレンスガイド
詳細な実装は references/ ディレクトリにあります:
| ガイド | 内容 |
|---|---|
| トークンバケットアルゴリズム | トークンバケットアルゴリズム |
| スライディングウィンドウアルゴリズム | スライディングウィンドウアルゴリズム |
| Redis ベースのレート制限 | Redis ベースのレート制限 |
| 段階的なレート制限 | 段階的なレート制限 |
| Python のレート制限(Flask) | Python のレート制限(Flask) |
| レスポンスヘッダー | レスポンスヘッダー |
ベストプラクティス
✅ 実施すること
- レスポンスにレート制限ヘッダーを含める
- 分散レート制限には Redis を使用する
- ユーザープランごとに段階的な制限を実装する
- 適切なウィンドウサイズと制限値を設定する
- レート制限のメトリクスを監視する
- 再試行方法を明確に案内する
- API ドキュメントにレート制限を記載する
- 高負荷時にテストする
❌ 避けること
- 本番環境でインメモリストレージを使用する
- 制限を厳しくしすぎる
- Retry-After ヘッダーを含め忘れる
- 分散環境でのシナリオを無視する
- レート制限を公開する(セキュリティ上の理由)
- 分散システムで単純なカウンターを使用する
- 古いデータのクリーンアップを忘れる
コメント
Markdown 対応