◆当ページにはプロモーションが含まれています

Laravel

Laravel API のアクセス制限数を調整する

みなさん、こんにちは。どんぶラッコです。

本日は Laravel で api.php を使っているときのアクセス制限をコントロールする方法について書いていきます。

api.php って何?

そもそも api.php を使ったことがないよ…?という方もいるかもしれません。

api.php を使ったことがない方も、web.php は使ったことがあると思います。

/route ディレクトリ内部にある、ルーティングの処理を行ってくれる場所です。

その /route ディレクトリの中に api.php も存在します。

やってくれることは web.php 同様にルーティングの処理なのですが、prefix (デフォルトでは /api ) をつける形で API用のルーティング処理を実施してくれます。

RouteServiceProvider を確認する

では、ここら辺の設定はどこにあるのか?というと RouteServiceProvider.php に定義があります。

/app/Providers/RouteServiceProvider.php

class RouteServiceProvider extends ServiceProvider
{
    public const HOME = '/dashboard';

    public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });
    }

    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(100);
        });
    }
}

ここで Route の設定が書いてあるわけです。

注目していただきたいのは RateLimiter の部分です。

    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(100);
        });
    }

ここで api.php へのアクセス回数を制限しているわけです。この場合、 1分あたり、100回までの制限がかかっている状態です。

この数字を変更すれば、1分間あたりの回数制限を引き上げることができます!

なぜ回数制限がかかっているの?

ではなぜ回数制限がかかっているのかというと、この /api.php で定義されているAPIは外部に払い出す用のAPIルートを想定しているからだと思われます。

https://proglearn.com/2021/03/19/%e3%81%84%e3%82%8d%e3%82%93%e3%81%aa%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%81%aeapi%e5%88%b6%e9%99%90%e3%82%92%e8%aa%bf%e3%81%b9%e3%81%a6%e3%81%bf%e3%81%9f/

もし、自分のサービスのフロントから呼び出すAPI、外部に払い出すAPIを分けたい場合は、routeを増やしてあげることができます。

    public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));

            // こんな感じで追加できる
            Route::prefix('api2')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api2.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });
    }

みなさんもチャレンジしてみましょう!

エンジニアにおすすめ転職サイト

マイナビIT AGENT
迷ったらまずはココ。求人数が多いため希望や条件にマッチする求人が見つかる!

レバテックキャリア
担当者のレベルが高い。エンジニア特化で15年の実績がある実績で初回提案での内定率驚異の90%!

JOIN
副業やフリーランスとして高額報酬案件を見つけるならJOIN。未経験者でも案件獲得実績豊富が強み!

\面白いと思ったら/

記事のシェア & Twitter のフォロー をお願いします!

@proglearn
一緒によく読まれている記事

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です