Laravel でミドルウェアを使用してリクエスト フローを制限する方法
はじめに:
Web アプリケーションを開発するとき、ユーザーのリクエストを制限する必要があることがよくあります。たとえば、1 分あたりに送信される特定のリクエスト数を制限したり、特定のインターフェイスに対する同時リクエストの数を制限したりするなど、リクエストが制限される場合。 Laravel フレームワークでは、ミドルウェアを通じてリクエスト フロー制限を実装できます。この記事では、ミドルウェアを使用してリクエスト フローを制限する方法と、対応するコード例を紹介します。
1. ミドルウェアとリクエスト フロー制限について理解する
ミドルウェア (Middleware) は、Laravel が提供するメカニズムであり、リクエスト処理のさまざまな段階に介入して、リクエストを処理、フィルタリング、強化することができます。リクエスト スロットルは、ユーザー リクエストの頻度または数を制限するメカニズムで、通常、リソースのアクセス速度を制御し、サーバーの安定性を保護するために使用されます。
2. スロットリングミドルウェアの作成
Laravel では、Artisan コマンドを使用してミドルウェアを作成できます: php Artisan make:middleware ThrottleRequests
生成されたミドルウェア ファイルは、app/Http/Middleware
ディレクトリにあります (例: ThrottleRequests.php
)。
次に、次のコードのようなリクエスト フロー制限ロジックをミドルウェアの handle
メソッドに実装する必要があります。
<?php namespace AppHttpMiddleware; use Closure; use IlluminateCacheRateLimiter; use SymfonyComponentHttpFoundationResponse; class ThrottleRequests { protected $limiter; public function __construct(RateLimiter $limiter) { $this->limiter = $limiter; } public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1) { $key = $request->ip(); // 使用 IP 地址作为限流的关键字 if ($this->limiter->tooManyAttempts($key, $maxAttempts)) { return new Response('Too Many Attempts.', 429); } $this->limiter->hit($key, $decayMinutes * 60); return $next($request); } }
上記のコードでは、Laravel を使用します。フレームワークに組み込まれている RateLimiter
クラスはリクエストフロー制限機能を実装します。 TooManyAttempts
メソッドは、リクエストが最大許容数を超えているかどうかを判断するために使用され、超えている場合は 429 ステータス コードが返されます。hit
メソッドは、リクエストの数を記録するために使用されます。時間枠の長さを設定します。
3. ミドルウェアの登録
作成したミドルウェアを有効にするには、app/Http/Kernel.php
ファイルに $middleware
配列が必要です。のミドルウェア。ファイルを見つけて次のコードを追加します:
protected $routeMiddleware = [ // ... 'throttle' => AppHttpMiddlewareThrottleRequests::class, ];
4. リクエスト電流制限にミドルウェアを使用する
上記の手順により、リクエスト電流制限ミドルウェアが正常に作成され、ミドルウェアの登録が完了しました。次に、ルート定義またはコントローラーでミドルウェアを使用できます。
ルート定義でミドルウェアを使用する:
Route::middleware('throttle:10,1')->get('/test', function () { return 'Hello, Laravel!'; });
上記のコードでは、throttle
ミドルウェアを /test
ルーティングに適用します。 1 分あたり最大 10 件のリクエストが許可され、リクエストの最大数に達すると、ユーザーは 429 ステータス コードを受け取ります。
コントローラーでのミドルウェアの使用:
class TestController extends Controller { public function __construct() { $this->middleware('throttle:10,1'); } public function index() { return 'Hello, Laravel!'; } }
上記のコードでは、throttle
ミドルウェアを ## に適用します。 #TestController コントローラーの
index メソッド。
この記事では、Laravel でミドルウェアを使用してリクエスト フローを制限する方法を紹介し、対応するコード例を示します。電流制限ミドルウェアを使用することで、ユーザーのリクエストの頻度と数を柔軟に制御でき、サーバーの安定性とセキュリティを保護します。実際のWeb開発においてリクエストスロットルは非常に重要な技術ですので、この記事が皆様のお役に立てれば幸いです。仕上げる###
以上がLaravelでミドルウェアを使用してリクエストフローを制限する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。