422 Unprocessable Entityレスポンスのモック
詳細なバリデーションエラーを含む422 Unprocessable Entityエラーレスポンスを生成。Laravel、Railsなどのフレームワークで一般的。
Testing Patterns
詳細な説明
422 Unprocessable Entity
422ステータスコードは、サーバーがリクエストのコンテンツタイプと構文を理解しているが、データが意味的に無効であることを示します。LaravelやRuby on Railsなどのフレームワークでバリデーションエラーに一般的に使用されます。
レスポンス構造
{
"message": "The given data was invalid.",
"errors": {
"email": [
"The email field is required.",
"The email must be a valid email address."
],
"password": [
"The password must be at least 8 characters.",
"The password must contain at least one uppercase letter."
],
"age": [
"The age must be a number.",
"The age must be between 18 and 120."
]
}
}
400 vs 422
| 側面 | 400 Bad Request | 422 Unprocessable Entity |
|---|---|---|
| 構文 | 不正なJSON、間違ったContent-Type | 有効なJSON、正しい構文 |
| 意味論 | N/A(解析不可) | フィールドは存在するが値が無効 |
| 一般的なフレームワーク | Express、Fastify | Laravel、Rails、Phoenix |
| RFC | HTTP/1.1 | WebDAV (RFC 4918) |
フィールドグループ化エラー
このパターンはフィールド名ごとにエラーをグループ化し、各フィールドにエラーメッセージの配列を持ちます。これは特に以下に役立ちます:
- フィールドごとに複数のエラーを表示
- プログラム的にすべての無効なフィールドをハイライト
- 国際化されたエラーメッセージのサポート
フロントエンド統合
ほとんどのフォームライブラリ(React Hook Form、Formik、VeeValidate)はフィールドレベルエラーの設定をビルトインサポートしています。レスポンスのerrorsオブジェクトをフォーム状態に直接マッピングします:
Object.entries(response.errors).forEach(([field, messages]) => {
setError(field, { message: messages[0] });
});
ユースケース
Laravel、Rails、または同様のフレームワークで作業する開発者が、フロントエンドの422バリデーションエラー処理をテストし、適切なフィールドレベルのエラー表示とフォーム状態管理を確認するために使用できます。