برای من جای سوال بود که آیا می توان میزان ترافیک یک route یا گروهی از route های معین را در لاراول با استفاده از یک محدود کننده(Rate Limiting)محدود کنید؟ یعنی یک فرم رو فقط یکبار سابمیت کنید و چندین بار درخواست ثبت فرم ارسال نشود. البته راههای زیادی برای فرانت وجود دارد اما بک اند چگونه میتواند هندل کند؟
مفهوم Rate Limiting
فهوم Rate Limiting یعنی اینکه ما میتوانیم میزان ترافیک ورودی برای یک روت یا گروهی از روتها را محدود کنیم، برای اضافه کردن یک ریتلیمیتر (Rate Limiter) ابتدا باید آن را در متد configureRateLimiting
در کلاس App\Providers\RouteServiceProvider
اضافه نماییم.
لاراول شامل سرویسهای rate-limiting قدرتمند و قابل تنظیم است و با استفاده از آن سرویس میتوانیم تعداد درخواستهایی را برای یک مسیر یا گروهی از مسیرها محدود کنیم.
بنابراین در این آموزش به شما نشان خواهم داد که چگونه می توانیم با استفاده از میدلور throttle، محدودیت نرخ ( rate-limiting)را در لاراول پیاده سازی کنیم. بنابراین در این آموزش خواهید آموخت که چگونه میتوانیم سیستم dynamic rate limiting لاراول را ایجاد کنیم تا درخواستهای بیش از حد کاربران را مسدود کنیم.
ما برای ساخت rate limiting در سیستم اپلیکیشنی لاراول خود از فساد RateLimiter
استفاده میکنیم.در نمونه کد زیر throttle لاراول با کلاس rate limiter class پیاده سازی شده است.
app\Providers\RouteServiceProvider.php
namespace App\Providers; use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Illuminate\Http\Request; use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\Route; class RouteServiceProvider extends ServiceProvider { public const HOME = '/home'; public function boot() { $this->configureRateLimiting(); } protected function configureRateLimiting(): void { RateLimiter::for('test', function (Request $request) { return Limit::perMinute(1); }); } }
همانطور که میبینید در روش configureRateLimiting بالا، ما فقط یک درخواست در دقیقه ارسال کردهایم. حال چگونه می توانیم از این در مسیر خود استفاده کنیم:
routes/web.php
use Illuminate\Support\Facades\Route; Route::middleware(['throttle:test'])->group(function () { Route::get('/', function () { return view('welcome'); }); });
همانطور که میبینید ما باید از میدلور throttle استفاده کنیم و بعد از clone، باید نام rate limitter خود را پاس دهیم. این نام بطور دلخواه نامگذاری میشود.
امیدوارم این مطلب برای شما یاری دهنده باشد.