422エラー(Unprocessable Entity)とは?意味をわかりやすく簡単に解説
公開:
422エラー(Unprocessable Entity)とは
422エラーはHTTPステータスコードの一種で、サーバーがリクエストの構文は理解できたものの、その内容に含まれる指示を処理できない場合に返されるエラーです。このエラーコードはRFC 4918で定義されており、WebDAVプロトコルの拡張として標準化されました。
400番台のエラーコードはクライアント側の問題を示しますが、422エラーはリクエストの形式は正しいが内容に問題がある状況を表します。
422エラーが発生する具体的な原因と状況
422エラーは、バリデーションエラーが発生した際によく使用されます。例えば、メールアドレスの形式が不正な場合、必須項目が未入力の場合、などに返されます。APIへのリクエストでJSON形式のデータを送信する際、構文は正しくてもビジネスロジック上の制約に違反している場合にも、このエラーは発生します。
| 発生原因 | 具体例 |
|---|---|
| バリデーション違反 | メールアドレス形式不正 |
| 必須項目の欠落 | ユーザー名が空欄 |
| データ型の不一致 | 数値フィールドに文字列 |
| 値の範囲外 | 年齢に負の数値を指定 |
「データベースの制約違反」や「ビジネスルールに反する値が送信された場合」も422エラーの対象となります。例えば、「在庫数を超える注文数」や「過去の日付を予約日として指定した場合」などが該当します。400エラーとの違いは、400が構文エラーを示すのに対し、422はセマンティック(意味的)なエラーを示す点にあります。
422エラーのレスポンス実装とハンドリング方法
サーバー側で422エラーを返す際はHTTPステータスコード422と共に、エラーの詳細情報をJSON形式で返すことが推奨され、どのフィールドでどのようなエラーが発生したかを明示します。以下はREST APIでの実装例で、バリデーションエラーの詳細を含むレスポンスを生成するコードです。
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{
"error": "Validation Failed",
"details": [
{
"field": "email",
"message": "メールアドレスの形式が正しくありません"
},
{
"field": "age",
"message": "年齢は0以上の数値を入力してください"
}
]
}
クライアント側で422エラーを受け取った際、エラーメッセージをユーザーに表示し、該当フィールドをハイライト表示するなどの処理を実装します。JavaScriptでのエラーハンドリング例として、fetchAPIを使用した場合の処理は以下のようになり、レスポンスのステータスコードを確認して適切なエラー処理を行うのです。
fetch('/api/users', {
method: 'POST',
body: JSON.stringify(userData)
})
.then(response => {
if (response.status === 422) {
return response.json().then(error => {
error.details.forEach(detail => {
console.log(`${detail.field}: ${detail.message}`);
});
});
}
})
.catch(error => console.error('Error:', error));
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
左へフリックで次のページ、右へフリックで前のページに戻れます左右の矢印ボタン、左右のスワイプで移動できます








