PHP Academy · レッスン

レート制限とAPIのバージョニング

RateLimiterでリクエストを制限し、APIを適切にバージョン管理します

レッスン 4/413 ステップ

「レート制限とAPIのバージョニング」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

レート制限の理由

レート制限は、APIを不正利用、DoS攻撃、制御不能なクライアントから保護します。すべてのユーザーに対してリソースを公平に分配できるようにします。

Laravel組み込みのThrottle

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バージョニング戦略

一般的な方法は次の3つです:

  1. URLプレフィックス:/api/v1/users
  2. クエリパラメーター:/api/users?version=1
  3. Acceptヘッダー:Accept: application/vnd.myapp.v1+json

LaravelのAPIでは、URLプレフィックスが最も一般的です。

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()を使用します。URLプレフィックスとバージョン別のコントローラーおよびリソースでAPIをバージョン管理します。

確認問題

レート制限を超えたとき、LaravelはどのHTTPステータスコードを返しますか?

無料で開始

AI チューターと学ぶ PHP — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
49
レッスン
195

よくある質問

「レート制限とAPIのバージョニング」レッスンは無料ですか?

はい。「レート制限とAPIのバージョニング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「レート制限とAPIのバージョニング」で何を学びますか?

RateLimiterでリクエストを制限し、APIを適切にバージョン管理します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「レート制限とAPIのバージョニング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. APIルートとリソースコントローラー
  2. APIリソースとJSONレスポンス
  3. Laravel Sanctumによる認証
  4. レート制限とAPIのバージョニング
← PHP Academyに戻る