こんにちは。たいら(@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に対して、バリデーションを定義するために必要な
- authorizeメソッド
- rulesメソッドでバリデーションを定義
- エラーレスポンスを定義
をそれぞれ解説していきます。
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サンプルプログラム
解説した
- authorizeメソッド
- rulesメソッドでバリデーションを定義
- エラーレスポンスを定義
上記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でリクエストに対してバリデーションするやり方の解説でした!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント