【Laravel】APIでリクエストに対してバリデーションするやり方を解説します

こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、11年目エンジニアです。

この記事では、 PHPのフレームワークの1つのLaravelでAPIでリクエストに対してバリデーションするやり方を丁寧に解説します。

APIの基本的な実装のやり方については、こちらの記事をご参考ください。

前提条件:実行環境について

実行環境は以下の通りです。

OS Windows10
PHPのバージョン 8.0.3
Laravelのバージョン 8.42.1
Postmanのバージョン 8.7.0

この記事では

C:\Laravel\LaravelSample

配下にLaravelのプロジェクトを作成しています。

PostmanはAPIのレスポンスを確認するために使います。
インストールするやり方はこちらの記事をご参考ください。

APIでリクエストに対してバリデーションするやり方を解説

APIでリクエストに対してバリデーションするやり方をサンプルプログラムをまじえて解説します。

リクエストに対してバリデーションをするには、FormRequestを使います。
作成するコマンドは

です。
詳しくは、こちらの記事をご参考ください。

この記事では【SampleRequest】という名前のFormRequestを使って解説していきます。
新規作成された直後の中身は↓のようになっています。

このFormRequestに対して、バリデーションを定義するために必要な

  1. authorizeメソッド
  2. rulesメソッドでバリデーションを定義
  3. エラーレスポンスを定義

をそれぞれ解説していきます。

authorizeメソッド

authorizeメソッドの解説をします。

authorizeメソッドとは、ユーザーが指定したリクエストへの権限をチェックするメソッドです。
authorizeメソッドがfalseを返した場合、HTTPステータスコードが403のレスポンスが返されます。

なので

  • ユーザー認証は別のところで行う
  • そもそも認証チェックが不要

という場合、authorizeメソッドが返す値はtrueに指定する必要があります。
この記事では、trueを返すようにします。

rulesメソッドでバリデーションを定義

rulesメソッドでバリデーションを定義の解説をします。

バリデーションは連想配列で定義します。
サンプルは以下になります。

連想配列のキーにはバリデーションをかけたいリクエストのキーを指定し、値にはバリデーションを指定します。
【age】のように値に配列を指定すれば、複数のバリデーションをかけることも可能です。

指定しているバリデーションの意味は以下になります。

バリデーション 意味
required 必須
numeric 数値かどうか
max:7 7文字以内であるか

サンプルの定義だとそれぞれのキーにかけられるバリデーションは以下の意味になります。

キー バリデーション
user_name 必須
age 必須かつ数値であるか
job 7文字以内であるか

rulesメソッドで各キーに対して、適切なバリデーションを指定します。
この記事では3つのみ紹介しましたが、他にもバリデーションルールはたくさんあります。
詳しくは、こちらの記事をご参考ください。

エラーレスポンスを定義

エラーレスポンスを定義の解説をします。

そもそもなぜエラーレスポンスを定義する必要があるかと言うと、もしエラーレスポンスを定義せずエラーが発生した場合、HTMLのレスポンスが返ってくるからです。
画面からのリクエストだった場合、それでよいかもしれません。
が、APIだと不便です。
そのため、APIのエラーレスポンスはjsonで返すよう定義する必要があります。

エラーレスポンスを定義するには、failedValidationメソッドをオーバーライドします。
書き方サンプルは以下になります。

上記を指定するには

を宣言する必要があります。

「400」とは、エラーレスポンスだった場合返すHTTPステータスのことです。

failedValidationメソッドのvalidator変数には、バリデーションを実行し失敗した後のvalidatorが指定されます。
そのため

で、バリデーションのエラーメッセージを取得できます。
返り値を

で返します。

FormRequestサンプルプログラム

解説した

  1. authorizeメソッド
  2. rulesメソッドでバリデーションを定義
  3. エラーレスポンスを定義

上記3つを設定したFormRequestサンプルプログラムの全文は以下になります。

FormRequestをコントローラーに設定する

FormRequestが完成したら、コントローラーに設定します。

コントローラーに使いたいFormRequestを

と宣言し、メソッドの引数に

と設定してあげれば、バリデーションをかけることができるようになります。

APIを実行し確認する

FormRequestが完成し、コントローラーにも設定したので、バリデーションエラーが返るか確認します。

まず、Laravelでサーバーを立ち上げます。
コマンドは

です。
サーバーを立ち上げるコマンドの詳細な説明は、こちらの記事をご参考ください。

APIのレスポンスを確認するためにPostmanを起動します。
基本的な使い方については、こちらの記事をご参考ください。

KEYとVALUEに以下を設定し、【Send】ボタンを押します。

KEY VALUE
user_name
age aaaaa
job programmer

指定したバリデーションの通りに、HTTPステータスが400でエラーレスポンスが返ってくることが確認できました。

まとめ:APIでリクエストに対してバリデーションしたい場合FormRequestを使おう

以上がLaravelでAPIでリクエストに対してバリデーションするやり方の解説でした!

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

コメント

タイトルとURLをコピーしました