PHP Academy · Урок

Ограничение частоты запросов и версионирование API

Ограничивайте частоту запросов с помощью RateLimiter и грамотно версионируйте API

Урок 4 из 413 шагов

«Ограничение частоты запросов и версионирование 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

Три распространённых подхода:

  1. Префикс URL: /api/v1/users
  2. Параметр запроса: /api/users?version=1
  3. Заголовок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Маршруты API и ресурсные контроллеры
  2. Ресурсы API и ответы JSON
  3. Аутентификация с Laravel Sanctum
  4. Ограничение частоты запросов и версионирование API
← Назад к PHP Academy