Skip to main content
Glama
brianirish

Laravel MCP Companion

by brianirish
rate-limiting.md4.09 kB
# Rate Limiting - [Introduction](#introduction) - [Cache Configuration](#cache-configuration) - [Basic Usage](#basic-usage) - [Manually Incrementing Attempts](#manually-incrementing-attempts) - [Clearing Attempts](#clearing-attempts) <a name="introduction"></a> ## Introduction Laravel includes a simple to use rate limiting abstraction which, in conjunction with your application's [cache](cache), provides an easy way to limit any action during a specified window of time. > **Note** > If you are interested in rate limiting incoming HTTP requests, please consult the [rate limiter middleware documentation](routing#rate-limiting). <a name="cache-configuration"></a> ### Cache Configuration Typically, the rate limiter utilizes your default application cache as defined by the `default` key within your application's `cache` configuration file. However, you may specify which cache driver the rate limiter should use by defining a `limiter` key within your application's `cache` configuration file: 'default' => 'memcached', 'limiter' => 'redis', <a name="basic-usage"></a> ## Basic Usage The `Illuminate\Support\Facades\RateLimiter` facade may be used to interact with the rate limiter. The simplest method offered by the rate limiter is the `attempt` method, which rate limits a given callback for a given number of seconds. The `attempt` method returns `false` when the callback has no remaining attempts available; otherwise, the `attempt` method will return the callback's result or `true`. The first argument accepted by the `attempt` method is a rate limiter "key", which may be any string of your choosing that represents the action being rate limited: use Illuminate\Support\Facades\RateLimiter; $executed = RateLimiter::attempt( 'send-message:'.$user->id, $perMinute = 5, function() { // Send message... } ); if (! $executed) { return 'Too many messages sent!'; } <a name="manually-incrementing-attempts"></a> ### Manually Incrementing Attempts If you would like to manually interact with the rate limiter, a variety of other methods are available. For example, you may invoke the `tooManyAttempts` method to determine if a given rate limiter key has exceeded its maximum number of allowed attempts per minute: use Illuminate\Support\Facades\RateLimiter; if (RateLimiter::tooManyAttempts('send-message:'.$user->id, $perMinute = 5)) { return 'Too many attempts!'; } Alternatively, you may use the `remaining` method to retrieve the number of attempts remaining for a given key. If a given key has retries remaining, you may invoke the `hit` method to increment the number of total attempts: use Illuminate\Support\Facades\RateLimiter; if (RateLimiter::remaining('send-message:'.$user->id, $perMinute = 5)) { RateLimiter::hit('send-message:'.$user->id); // Send message... } <a name="determining-limiter-availability"></a> #### Determining Limiter Availability When a key has no more attempts left, the `availableIn` method returns the number of seconds remaining until more attempts will be available: use Illuminate\Support\Facades\RateLimiter; if (RateLimiter::tooManyAttempts('send-message:'.$user->id, $perMinute = 5)) { $seconds = RateLimiter::availableIn('send-message:'.$user->id); return 'You may try again in '.$seconds.' seconds.'; } <a name="clearing-attempts"></a> ### Clearing Attempts You may reset the number of attempts for a given rate limiter key using the `clear` method. For example, you may reset the number of attempts when a given message is read by the receiver: use App\Models\Message; use Illuminate\Support\Facades\RateLimiter; /** * Mark the message as read. * * @param \App\Models\Message $message * @return \App\Models\Message */ public function read(Message $message) { $message->markAsRead(); RateLimiter::clear('send-message:'.$message->user_id); return $message; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/brianirish/laravel-mcp-companion'

If you have feedback or need assistance with the MCP directory API, please join our Discord server