Slate Errors

Client Error

422

Unprocessable Content

— 内容を処理できません

まずは確認: よくある原因 TOP3

  1. バリデーションルール違反
    年齢がマイナス、メールが形式不正など、値の意味がおかしい
  2. ビジネスルールに反する組み合わせ
    開始日より終了日が前、在庫数を超える注文など
  3. 参照する関連リソースが存在しない
    指定された外部キーの先がもう消えているケース

何が起きたのか?

422 は「形式としては正しく読めるけれど、内容が筋として通らない」というサインです。 教室で言えば、回答用紙のマス目はきちんと埋まっているのに、年齢欄に「-3」と書かれている——文字としては読めるけれど、意味として受け付けられない、そんな感覚です。

400 が「文字がにじんで読めない」段階のエラーだとしたら、422 は「読めたけれど内容が変」段階のエラー。サーバーは中身を一段深く検証して、ビジネスルールに照らして「ここは無理」と返しています。

黒板からのひとこと

採点をしていると、字は綺麗で誤字もないのに、答えが現実と矛盾している答案に出会うことがあります。先生は「文字は読めたよ。でも答えとしては成立していないね」と返します。それが 422 のスタンスです。

このエラーが返ってきたときは、レスポンスボディに「どのフィールドのどの値が引っかかったか」が含まれていることが多いです。そこを丁寧に読むのが、最短ルートになります。

解決への歩み

大丈夫、次はこうしてみよう:

  1. レスポンスのエラーメッセージを精読:どのフィールドが、なぜ弾かれたかが書かれている
  2. 入力値を仕様と照合:型は合っているか、許容範囲・正規表現に収まっているか
  3. 関連リソースの整合性を確認:参照先が存在するか、状態遷移として許されるか
  4. バリデーション仕様を共有(管理者向け):API スキーマやエラーフォーマットをドキュメント化し、利用者が自力で直せるようにする

実際にはこう見える

$ リクエスト

curl -i https://example.com/some/path

↓ レスポンス

HTTP/1.1 422 Unprocessable Content
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<html><body><h1>422 Unprocessable Content</h1></body></html>

似ているケース

もっと知りたい