Ограничение частоты запросов и версионирование API
Ограничивайте частоту запросов с помощью RateLimiter и грамотно версионируйте API
«Ограничение частоты запросов и версионирование API» — бесплатный урок PHP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.
Зачем ограничивать частоту запросов?
Ограничение частоты запросов защищает API от злоупотреблений, атак DoS и клиентов, отправляющих чрезмерное количество запросов. Оно обеспечивает справедливое распределение ресурсов между всеми пользователями.
Встроенное ограничение Laravel
Применяйте промежуточное ПО throttle, чтобы ограничить количество запросов за определенный период.
<?php
Route::middleware("throttle:60,1")->group(function () {
// 60 requests per 1 minute per user/IP
Route::apiResource("posts", PostController::class);
});Пользовательские ограничители частоты запросов
Определяйте именованные ограничители частоты запросов с собственной логикой в поставщике служб.
<?php
// In AppServiceProvider::boot():
RateLimiter::for("api", function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
// Apply:
Route::middleware("throttle:api")->group(fn() => ...);Многоуровневое ограничение частоты запросов
Возвращайте разные лимиты в зависимости от плана аутентифицированного пользователя.
<?php
RateLimiter::for("api", function (Request $request) {
return match($request->user()?->plan) {
"pro" => Limit::perMinute(300)->by($request->user()->id),
"free" => Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()),
default => Limit::perMinute(30)->by($request->ip()),
};
});Заголовки ответа при ограничении частоты запросов
При превышении лимита Laravel возвращает HTTP 429 со следующими заголовками: X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After.
Стратегии версионирования API
Три распространённых подхода:
- Префикс URL:
/api/v1/users - Параметр запроса:
/api/users?version=1 - Заголовок Accept:
Accept: application/vnd.myapp.v1+json
Префикс URL — самый распространённый вариант в API на Laravel.
Версионирование с помощью префикса URL
Объединяйте маршруты под префиксом версии.
<?php
Route::prefix("v1")->group(function () {
Route::apiResource("users", \App\Http\Controllers\Api\V1\UserController::class);
});
Route::prefix("v2")->group(function () {
Route::apiResource("users", \App\Http\Controllers\Api\V2\UserController::class);
});Контроллеры для отдельных версий
Организуйте контроллеры по версиям во вложенных каталогах: App\Http\Controllers\Api\V1\ и App\Http\Controllers\Api\V2\.
Вывод старых версий из эксплуатации
Добавляйте к ответам старых версий заголовок Deprecation или Sunset, чтобы уведомить клиентов о предстоящем удалении.
<?php
// Middleware for v1 routes:
$response->headers->set("Deprecation", "version="v1"");
$response->headers->set("Sunset", "2026-01-01");Ресурсы API и версионирование
Используйте ресурсы API для отдельных версий: V1\UserResource и V2\UserResource, чтобы формировать разные структуры ответов для каждой версии.
Тестирование ограничений частоты запросов
В тестах подменяйте ограничитель частоты запросов, чтобы избежать взаимного влияния тестов.
<?php
RateLimiter::shouldReceive("tooManyAttempts")->andReturn(false);Итоги
Применяйте throttle:60,1 для базового ограничения частоты запросов. Используйте RateLimiter::for() для пользовательских многоуровневых ограничений. Версионируйте API с помощью префиксов URL, контроллеров и ресурсов для отдельных версий.
Быстрая проверка
Какой код состояния HTTP возвращает Laravel при превышении лимита частоты запросов?
Изучай PHP с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 49
- Уроки
- 195
Часто задаваемые вопросы
Урок «Ограничение частоты запросов и версионирование API» бесплатный?
Да — полный текст урока «Ограничение частоты запросов и версионирование API» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.
Чему я научусь в уроке «Ограничение частоты запросов и версионирование API»?
Ограничивайте частоту запросов с помощью RateLimiter и грамотно версионируйте API Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать PHP Academy?
Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Ограничение частоты запросов и версионирование API»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке PHP Academy?
Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Маршруты API и ресурсные контроллеры
- Ресурсы API и ответы JSON
- Аутентификация с Laravel Sanctum
- Ограничение частоты запросов и версионирование API