Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
<?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(); }
Result
Open