レート制限とAPIのバージョニング
RateLimiterでリクエストを制限し、APIを適切にバージョン管理します
「レート制限と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つです:
- URLプレフィックス:
/api/v1/users - クエリパラメーター:
/api/users?version=1 - 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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- APIルートとリソースコントローラー
- APIリソースとJSONレスポンス
- Laravel Sanctumによる認証
- レート制限とAPIのバージョニング