লারাভেল (Laravel) একটি শক্তিশালী PHP ফ্রেমওয়ার্ক যা ডেভেলপারদের ওয়েব অ্যাপ্লিকেশন তৈরি করতে নানা ধরনের সুবিধা দেয়। এর মধ্যে একটি গুরুত্বপূর্ণ ফিচার হল রেট লিমিটিং (Rate Limiting), যা বিশেষভাবে ওয়েব অ্যাপ্লিকেশন বা API এর মধ্যে নির্দিষ্ট সময়ের মধ্যে কতবার কোনো নির্দিষ্ট কাজ করা যাবে তা নিয়ন্ত্রণ করতে সাহায্য করে।
রেট লিমিটিং হল একটি পদ্ধতি যার মাধ্যমে আপনি নির্দিষ্ট সময়ের মধ্যে কতবার একটি একশন (যেমন API কল বা HTTP রিকোয়েস্ট) গ্রহণ করা যাবে তা সীমাবদ্ধ করেন। এটি স্প্যামিং, অতিরিক্ত লোড এবং সিস্টেমের অপব্যবহার রোধ করতে সহায়তা করে। লারাভেল এই ফিচারটি অন্তর্ভুক্ত করেছে যাতে ডেভেলপাররা সহজেই রেট লিমিটিং পরিচালনা করতে পারেন।
লারাভেলে রেট লিমিটিং ব্যবহারের জন্য কিছু স্টেপ অনুসরণ করতে হয়:
লারাভেলের রেট লিমিটিং কনফিগারেশন app/Http/Kernel.php
ফাইলে করা হয়। এখানে আপনি যে রুটগুলোতে রেট লিমিটিং প্রয়োগ করতে চান, সেগুলোর জন্য লিমিট ও সময়সীমা নির্ধারণ করতে পারেন।
উদাহরণস্বরূপ, যদি আপনি চান যে একটি API রুটে প্রতি মিনিটে ৬০টি রিকোয়েস্ট গ্রহণ করা যাবে, তবে সেটি নিম্নরূপ কনফিগার করা যেতে পারে:
use Illuminate\Cache\RateLimiter;
class Kernel extends HttpKernel
{
protected $routeMiddleware = [
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
protected function schedule(Schedule $schedule)
{
$this->rateLimiter()->for('api', function (RateLimiter $rateLimiter) {
return $rateLimiter->hit('api:limit', 60, 1);
});
}
}
লারাভেলে রেট লিমিটিং প্রয়োগ করার জন্য ThrottleRequests
মিডলওয়্যার ব্যবহৃত হয়। এই মিডলওয়্যারটি API বা ওয়েব রুটে প্রয়োগ করা হয়, যা কনফিগারেশন অনুযায়ী রিকোয়েস্ট লিমিট করে দেয়।
যেমন, api
গ্রুপ রুটের জন্য নিম্নলিখিতভাবে রেট লিমিটিং প্রয়োগ করা যায়:
Route::middleware('throttle:60,1')->group(function () {
Route::get('/user', function () {
return 'User data';
});
});
এখানে, 60
হলো এক মিনিটে অনুমোদিত রিকোয়েস্টের সংখ্যা এবং 1
হলো সময়সীমা (মিনিটে)।
লারাভেল আপনাকে কাস্টম রেট লিমিটিং নিয়ন্ত্রণ করতে দেয়। উদাহরণস্বরূপ, আপনি চান যে শুধুমাত্র কিছু নির্দিষ্ট আইপি এড্রেসে রেট লিমিটিং প্রয়োগ হোক, আপনি সেই কনফিগারেশনটি RouteServiceProvider
অথবা রুট ম্যানেজমেন্টের মধ্যে সেট করতে পারেন।
Route::middleware('throttle:120,1')->get('/user', function () {
return 'User data';
});
এখানে ১ মিনিটে ১২০টি রিকোয়েস্ট অনুমোদিত এবং ১ মিনিট পর নতুন রিকোয়েস্ট গ্রহণ করা যাবে।
আপনি চাইলে নিজের রেট লিমিট কিপিং পদ্ধতি তৈরি করতে পারেন। এটি RateLimiter
ফ্যাসেড ব্যবহার করে করা যায়। নিচে একটি উদাহরণ দেওয়া হলো যেখানে কাস্টম রেট লিমিট কিপিং তৈরি করা হয়েছে:
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('login', function (RateLimiter $rateLimiter) {
return $rateLimiter->allow(5)->every(1);
});
এটি login
নামে একটি কাস্টম রেট লিমিট তৈরি করবে যেখানে প্রতি মিনিটে ৫টি রিকোয়েস্ট অনুমোদিত হবে।
যখন কোনো রিকোয়েস্ট রেট লিমিট পেরিয়ে যায়, তখন লারাভেল একটি 429 Too Many Requests
HTTP স্ট্যাটাস কোড সহ একটি রেসপন্স পাঠায়। এটি ব্যবহারকারীদের জানিয়ে দেয় যে তারা নির্দিষ্ট সময়ের মধ্যে অতিরিক্ত রিকোয়েস্ট করেছেন এবং তাদের আবার চেষ্টা করতে হবে।
লারাভেল রেট লিমিটিং একটি গুরুত্বপূর্ণ ফিচার যা API এবং ওয়েব অ্যাপ্লিকেশন এর নিরাপত্তা এবং কার্যক্ষমতা বৃদ্ধি করতে সাহায্য করে। এটি বিশেষত ব্যবহারকারী বা ক্লায়েন্ট থেকে অতিরিক্ত রিকোয়েস্ট এড়াতে এবং সিস্টেমকে নিরবচ্ছিন্নভাবে কার্যকর রাখতে সহায়তা করে।