security
Junior
What is rate limiting?
Short Answer
Rate limiting restricts the number of requests a client can make in a given time period, protecting against abuse and DDoS attacks.
Detailed Answer
Rate limiting controls request frequency:
Laravel provides:
1. RateLimiter facade for defining limits
2. throttle middleware for applying limits
3. Per-user and per-IP limiting
4. Custom rate limiters
5. Response headers (X-RateLimit-Remaining, Retry-After)
Types:
- Per-minute: 60 requests per minute per user
- Per-second: Burst limiting for APIs
- Per-endpoint: Different limits for different routes
- Sliding window: More accurate than fixed windows
Benefits: Prevents abuse, ensures fair usage, protects server resources, enables tiered API access.
Code Example
Example
<?php
// In AppServiceProvider boot()
use Illuminate\Routing\RateLimiter;
use Illuminate\Http\Requests\Request;
use Illuminate\Support\Facades\Cache;
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by(
$request->user()?->id ?: $request->ip()
);
});
RateLimiter::for('login', function (Request $request) {
return Limit::perMinute(5)->by($request->input('email'));
});
// Apply to routes
Route::middleware('throttle:api')->group(function () {
Route::apiResource('posts', PostController::class);
});
Route::post('/login', [AuthController::class, 'login'])
->middleware('throttle:login');
// Response headers automatically included:
// X-RateLimit-Remaining: 59
// X-RateLimit-Limit: 60
// Retry-After: 60
Interview Tip
Explain that rate limits should be per-user for authenticated routes and per-IP for public routes. Mention the Retry-After header.