Метод availableIn
Метод availableIn класса RateLimiter позволяет получить время в секундах, оставшееся до сброса текущего лимита попыток. Этот метод полезен при необходимости уведомить пользователя о том, через сколько времени он сможет повторить запрос. Метод принимает ключ ограничителя в качестве единственного параметра и возвращает целочисленное значение количества секунд.
Синтаксис
<?php
use Illuminate\Support\Facades\RateLimiter;
$seconds = RateLimiter::availableIn($key);
?>
Пример
Давайте создадим ограничитель для API-эндпоинта и проверим, сколько секунд осталось до сброса лимита после нескольких попыток:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\RateLimiter;
class ApiController extends Controller
{
public function test()
{
$key = 'api-test';
$maxAttempts = 3;
// Выполняем попытки
for ($i = 0; $i < 4; $i++) {
if (RateLimiter::tooManyAttempts($key, $maxAttempts)) {
$seconds = RateLimiter::availableIn($key);
echo "Лимит превышен. Осталось ждать {$seconds} секунд.";
break;
}
RateLimiter::hit($key, 60);
echo "Попытка " . ($i + 1) . " засчитана.";
}
}
}
?>
Результат выполнения кода:
"Попытка 1 засчитана.Попытка 2 засчитана.Попытка 3 засчитана.Лимит превышен. Осталось ждать 57 секунд."
Пример
Давайте используем метод availableIn для отображения времени ожидания в ответе API при превышении лимита:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
$key = $request->ip();
$maxAttempts = 5;
if (RateLimiter::tooManyAttempts($key, $maxAttempts)) {
$seconds = RateLimiter::availableIn($key);
return response()->json([
'error' => 'Too many requests',
'retry_after' => $seconds,
'message' => "Please wait {$seconds} seconds"
], 429);
}
RateLimiter::hit($key, 60);
return response()->json(['data' => 'Success']);
}
}
?>
Смотрите также
-
метод
attempt,
который выполняет действие с ограничением количества попыток -
метод
tooManyAttempts,
который проверяет превышение лимита попыток -
метод
hit,
который регистрирует новую попытку в ограничителе -
метод
remaining,
который возвращает оставшееся количество попыток