Laravel
Beginner
1 min read
API Authentication and Rate Limiting
Example
<?php
// app/Providers/RouteServiceProvider.php (or AppServiceProvider)
// Registering custom rate limiters
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('api', function (Request $request) {
return $request->user()
? Limit::perMinute(120)->by($request->user()->id)
: Limit::perMinute(20)->by($request->ip());
});
RateLimiter::for('uploads', function (Request $request) {
return [
Limit::perMinute(5)->by($request->user()?->id ?: $request->ip()),
Limit::perDay(50)->by($request->user()?->id ?: $request->ip()),
];
});
// routes/api.php
Route::middleware(['auth:sanctum', 'throttle:api'])->group(function () {
Route::apiResource('posts', \App\Http\Controllers\Api\V1\PostController::class);
});
Route::middleware('throttle:uploads')->post('/media', [
\App\Http\Controllers\Api\MediaController::class, 'store',
]);
// Caching a response in a controller
public function index(): \Illuminate\Http\JsonResponse
{
$posts = cache()->remember('api.posts', 60, fn() =>
\App\Models\Post::published()->with('user')->paginate(20)
);
return PostResource::collection($posts)->response();
}
Related Resources
Laravel Reference
Complete tag & property list
Laravel How-To Guides
Step-by-step practical guides
Laravel Exercises
Practice what you've learned
More in Laravel