
Trong các ứng dụng web hiện đại, đặc biệt là những API public, việc kiểm soát lượng request từ người dùng là vô cùng quan trọng. Laravel cung cấp một cách dễ dàng để giới hạn số lượng request thông qua Rate Limiting. Hãy cùng CodeTutHub tìm hiểu cách thiết lập giới hạn request trong Laravel một cách hiệu quả!
1. Tại sao cần giới hạn API Request?
Giới hạn API request giúp:
- Ngăn chặn spam và các cuộc tấn công DDoS.
- Bảo vệ tài nguyên server khỏi việc lạm dụng.
- Cải thiện hiệu suất và đảm bảo công bằng cho tất cả người dùng.
- Hạn chế việc sử dụng API quá mức từ các client không đáng tin cậy.
2. Sử dụng Middleware Rate Limiting trong Laravel
Laravel cung cấp middleware throttle để giới hạn số lượng request mà một người dùng có thể thực hiện trong một khoảng thời gian nhất định.
Cấu hình mặc định trong api.php
Mặc định, file routes/api.php sử dụng middleware throttle với giới hạn mặc định là 60 request mỗi phút.
Route::middleware('throttle:60,1')->group(function () {
Route::get('/user', [UserController::class, 'index']);
});Ở đây:
60,1có nghĩa là 60 request mỗi 1 phút cho mỗi IP.
Bạn có thể thay đổi số lượng request tùy thuộc vào nhu cầu của ứng dụng.
3. Cấu hình Rate Limiting tuỳ chỉnh trong Laravel 12
Laravel 12 cung cấp cách dễ dàng hơn để định nghĩa giới hạn API request thông qua RateLimiter. Bạn có thể cấu hình trong app/Providers/RouteServiceProvider.php như sau:
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Http\Request;
public function boot()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(100)->by($request->user()?->id ?: $request->ip());
});
}Ở đây:
perMinute(100): Cho phép 100 request mỗi phút.by($request->user()?->id ?: $request->ip()): Giới hạn theo ID người dùng hoặc địa chỉ IP nếu chưa đăng nhập.
Sau đó, áp dụng vào các route API:
Route::middleware('throttle:api')->group(function () {
Route::get('/products', [ProductController::class, 'index']);
});4. Tùy chỉnh Response khi quá giới hạn Request
Mặc định, Laravel sẽ trả về lỗi 429 Too Many Requests khi người dùng vượt quá giới hạn request.
Bạn có thể tùy chỉnh response bằng cách override trong App/Exceptions/Handler.php:
use Illuminate\Http\Exceptions\ThrottleRequestsException;
public function render($request, Throwable $exception)
{
if ($exception instanceof ThrottleRequestsException) {
return response()->json([
'message' => 'Bạn đã gửi quá nhiều request. Vui lòng thử lại sau!',
'retry_after' => $exception->getHeaders()['Retry-After'] ?? 60,
], 429);
}
return parent::render($request, $exception);
}5. Sử dụng Token-Based Throttling
Nếu bạn muốn giới hạn request dựa trên API Key hoặc JWT Token, bạn có thể điều chỉnh RateLimiter để sử dụng API token thay vì địa chỉ IP:
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(50)->by(optional($request->user())->api_token ?: $request->ip());
});Điều này giúp phân biệt người dùng thực với người dùng ẩn danh.
6. Thử nghiệm giới hạn Request trong Laravel
Bạn có thể kiểm tra tính năng giới hạn request bằng công cụ như Postman hoặc lệnh cURL:
curl --request GET \
--url http://your-api.com/api/products \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN'Nếu vượt quá giới hạn, bạn sẽ nhận được response 429 Too Many Requests.
7. Kết luận
Tính năng giới hạn request trong Laravel giúp bảo vệ API của bạn khỏi bị lạm dụng và tối ưu hiệu suất server. Việc sử dụng RateLimiter, throttle middleware và cấu hình tùy chỉnh sẽ giúp bạn kiểm soát lượng request một cách linh hoạt và hiệu quả.
Bạn đã áp dụng cách nào để giới hạn API request trong Laravel? Hãy chia sẻ ý kiến của bạn với CodeTutHub nhé! 🚀









