Node.js の API レート制限

王林
リリース: 2024-09-12 10:33:55
オリジナル
758 人が閲覧しました

API Rate Limiting in Node.js

API は現代の Web コミュニケーションのバックボーンを形成しており、クライアントが API にアクセスする頻度を管理することが重要です。レート制限を実装すると、API へのリクエストのフローを制御することにより、サーバーの応答性と安全性が確保されます。

このガイドは、スケーラブルな Web サービスを構築するために広く使用されているプラ​​ットフォームである Node.js で API レート制限を実装するための主要な戦略に焦点を当てています。

API レート制限とは何ですか?

API レート制限は、ユーザーまたはクライアントが特定の時間枠内に API に対して実行できるリクエストの数を制限します。これは、リソースへの公平なアクセスを確保し、サーバーの健全性を維持するように設計された、過剰使用や悪用に対する保護手段です。

API レート制限はなぜ重要ですか?

  • DDoS 保護: 単一ソースからのリクエストの数を減らすことで、分散型サービス拒否 (DDoS) 攻撃の影響を制限します。
  • サーバーのパフォーマンスの向上: ユーザー間でリソースを公平に分散することで、サーバーの過負荷を防ぎます。
  • ユーザー エクスペリエンスの向上: API の誤用を防止することで、すべてのユーザーがタイムリーな応答を得ることができます。

Node.js での API レート制限のベスト プラクティス

1. ミドルウェアの実装

ミドルウェアを使用してレート制限を管理することは効率的かつ効果的です。 Express-rate-limit パッケージは、特に Express フレームワークを使用する場合に、Node.js でこれを行うための一般的なツールの 1 つです。コンソールに「npm iexpress-rate-limit」と入力してパッケージをインストールできます。

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

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100, // Limit each IP to 100 requests per windowMs
  message: 'Too many requests from this IP, please try again after 15 minutes',
});

app.use('/api/', limiter);
ログイン後にコピー

この例では:

  • windowMs は 15 分のウィンドウを設定します。
  • 最大値は、そのウィンドウ内の各 IP リクエストを 100 件に制限します。
  • 制限を超えた場合、メッセージはフィードバックを提供します。

このようなミドルウェアを使用すると、プロセスの早い段階でリクエストが確実にフィルタリングされ、サーバー リソースが節約されます。

2. 分散システムに Redis を使用する

複数のサーバーで API を実行する場合、レート制限はシステム全体で一貫している必要があります。このような場合、Redis が共有ストレージの頼りになるソリューションとなることがよくあります。スムーズな実装のために、express-rate-limit と rate-limit-redis を組み合わせます。

次のパッケージをインストールする必要があります:

  • Express: API を作成する Web フレームワーク。
  • redis: Redis と通信してリクエスト数を追跡​​および保存します。
  • Express-rate-limit: レート制限を処理するミドルウェア。
  • rate-limit-redis: Redis にレート制限データを保存するプラグイン。
const RedisStore = require('rate-limit-redis');
const redis = require('redis');
const client = redis.createClient();

const limiter = rateLimit({
  store: new RedisStore({
    client: client,
  }),
  windowMs: 15 * 60 * 1000,
  max: 100,
});
ログイン後にコピー

この設定では、Redis が中央ストアとして機能するため、どのサーバーがリクエストを処理するかに関係なく、リクエストの制限が確実に維持されます。詳しい説明については、Redis と Node.js を使用して API レート制限を実装する方法 に関する記事をご覧ください。

3. さまざまなユーザータイプに制限を追加する

ユーザーが異なれば、ニーズも異なります。一般的なアプローチは、プレミアム ユーザーにはより多くのリクエストを許可し、無料プランのユーザーにはリクエストを制限することです。

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

const freeLimiter = rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 50, // Free-tier users get 50 requests per window
});

const premiumLimiter = rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 1000, // Premium users get 1000 requests per window
});

app.use('/api/free/', freeLimiter);
app.use('/api/premium/', premiumLimiter);
ログイン後にコピー

この方法は、サービス レベルに基づいてユーザー エクスペリエンスのバランスをとるのに役立ちます。

4. 動的レート制限

静的なレート制限は、必ずしもユーザーのニーズを反映しているとは限りません。一部のユーザーは特定のタイミングでより高い制限を必要とする場合がありますが、これは使用パターンに基づいて制限を動的に調整することで処理できます。

let userRequestCount = 0;

app.use((req, res, next) => {
  if (userRequestCount < 100) {
    next();
  } else {
    res.status(429).send('Rate limit exceeded, please try again later.');
  }
});
ログイン後にコピー

この柔軟性により、API はさまざまな使用シナリオにインテリジェントに対応できます。

5. リトライヘッダーを使用して通信する

ユーザーは、いつ再試行できるかを知っていることに感謝します。レート制限された応答に Retry-After ヘッダーを追加すると、次のリクエストを行うまでの待機時間をユーザーに案内できます。

res.set('Retry-After', 60); // 60 seconds
res.status(429).send('Too many requests, please try again later.');
ログイン後にコピー

この小さなステップにより、全体的なユーザー エクスペリエンスが向上し、API を操作するクライアントのフラストレーションが軽減されます。

モニタリングと微調整

レート制限は継続的に監視し、実際の使用パターンに基づいて調整する必要があります。レート制限違反の数、API 応答時間、ユーザー フィードバックなどの主要な指標を追跡すると、情報に基づいた調整を行うのに役立ちます。

追跡すべき主要な指標

  • レート制限違反: 数値が高い場合は、制限が厳しすぎるか、ユーザーがさらなる柔軟性を必要としていることを示している可能性があります。
  • サーバーのパフォーマンス: 応答時間を監視すると、レート制限が望ましい効果をもたらしているかどうかがわかります。
  • ユーザー フィードバック: API ユーザーからのフィードバックにより、レート制限が厳しすぎるかどうか、または変更が必要かどうかについての洞察が得られます。

Prometheus や Grafana などのモニタリング ツールを使用すると、レート制限がどのように実行されているか、どこで調整が必要かについてリアルタイムの洞察を得ることができます。

最終的な考え

API レート制限は、トラフィックの管理、リソースの保護、公平な使用の確保に必要です。 Node.js でこれらの実践に従うことで、セキュリティとユーザー エクスペリエンスのバランスをとった回復力のあるシステムを構築できます。

基本的な制限を実装している場合でも、リアルタイムで調整する動的システムを構築している場合でも、効果的なレート制限は API 管理の重要な部分です。

さらに詳しい情報とチュートリアルについては、CodeNoun にアクセスして、スケーラブルな Node.js アプリケーションを効率的に構築する方法を学習してください。

以上がNode.js の API レート制限の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!