【Laravel】Too Many Requestsについて調べてみた

こんにちは!ドイです!!

先日、友人に「Laravelについて、自分の知らないことを知りたい」 と無理難題を言ったとろ
「Too Many Requestsについて知っている?」と見事、私の知らないことについて教えてくれました。
Laravelについて、少しだけ詳しくなったので、まとめていきたいと思います。

Too Many Requestsとは

ステータスコードでいうところの、429エラーです。 一定時間に送信されたリクエストが多すぎる場合に、429エラーが発生するようです。

ステータスコードとは

「高校生の頃に書いたブログを見てみよう」と久しぶりに覗いてみたら、404エラーが表示された。
なんてことはありませんか?
404がまさにステータスコードと呼ばれるもので、「ブログをみる」というアクションに対しての、
サーバからの返事、と考えると分かりやすいかもしれません。

HTTP レスポンスステータスコードは、特定の HTTP リクエストが正常に完了したどうかを示します。レスポンスは 5 つのクラスに分類されています。

developer.mozilla.org

100桁の数字ごとに、グループ分けされています。

100番台

情報

200番台

成功

300番台

リダイレクト

400番台

クライアントエラー

500番台

サーバエラー

どこで設定されているのか

Laravel/app/Http/kernel.phpを見てください。

<?php
  protected $middlewareGroups = [
  'api' => [
            'throttle:60,1',
        ],
    ];

60, 1 この部分で、APIリクエストの回数を1分間に60回と制限しているようです。

対処法

上記の箇所を、

<?php
  protected $middlewareGroups = [
  'api' => [
            'throttle:600,1',
        ],
    ];

のように、時間あたりの回数を設定しなおせば、制限の幅が広がるようです。

throttleの中身

「throttleの中身を見ると面白いよ」との事で、こちら覗いて見ることにしました。
/Illuminate/Routing/Middleware/ThrottleRequests.php

うっ。。すぐに理解できなさそうなコードって、思わずそっ閉じしたくなりますね。。
自分の理解できそうな部分を探してみましょう。。

<? php
  public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1, $prefix = '')
    {

この数字、先ほど見かけましたね。 maxAttemptsで最大の試行回数、decayMinutesで一定期間について書かれていますね。

理解できない部分が多いので、読み飛ばして。。おっ!?

<? php
protected function getHeaders($maxAttempts, $remainingAttempts, $retryAfter = null)
    {
        $headers = [
            'X-RateLimit-Limit' => $maxAttempts,
            'X-RateLimit-Remaining' => $remainingAttempts,
        ];

X-RateLimit-Limit

この文字面、みたことがある気がします。。
HTML5認定試験のテキストが我が家にあるのですが、
HTTPヘッダについて調べたときに、似たようなものをみた気がするのです。
調べますと。。

X-RateLimit-Limitは受付可能なリクエストの、最大の数を、
その下のX-RateLimit-Remainingは、受付可能な残りのリクエスト数を表しているようです。

すぐに閉じなくてよかったです。。!!
なんとなくですが、設定されている場所と、どう設定されているのかが見えてきましたね。

まとめ

Laravelについて、知らないことが多いなあと思いました。
社内のコードを見ているだけでも、知らないことに遭遇し、
どこまで理解すれば根本から理解したことになるのか?と常に迷子の状態です。
引き続き、勉強を続けていきたいと思います。