App\Providers\RouteServiceProviderに移動して、bootメソッド内でRateLimiterの設定を変更

Laravelを使ったWebアプリケーションを開発する際、複数のタブやウィンドウでページを高速に開くと、429 Too Many Requestsというエラーに遭遇することがあります。この背景には、Laravelのデフォルトのレートリミットが関与しています。

初期設定では、同一IPアドレスからのAPIの呼び出しは1分間に60回までという制限があります。これはDOS攻撃などからサービスを保護するための対策として設定されていますが、必要に応じてこの制限は変更可能です。

レートリミットの変更方法

LaravelではApp\Providers\RouteServiceProviderの中にあるbootメソッドを通して、この制限を簡単にカスタマイズできます。

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

public function boot()
{
    // 既存のコード

    RateLimiter::for('api', function ($request) {
        return Limit::perMinute(100);  // 1分間に100回に変更
    });
}

変更後、特に追加でコマンドを実行する必要はありません。

問題の再現

例えば、1ページにて4つのAPIを呼び出しているようなシチュエーションを考えます。このページを複数のタブで一気に開くと、15タブ目以降でAPIの呼び出し制限を超え、429 Too Many Requestsエラーが発生します。私の場合、業務システムにおいて複数の顧客ページを一括で開く処理を行った際にこの問題に遭遇しました。

無制限に質問可能なプログラミングスクール!

万が一転職できない場合は、転職保障全額返金できるコースもあり!!

無制限のメンター質問対応

 

DMMウェブキャンプでプログラミングを学習しませんか?

独学より成長スピードをブーストさせましょう!

 

まずは無料相談から!

おすすめの記事