🐕

axumの0.4.6でrequestのextract出来なかった時の挙動が変わった

2022/02/27に公開

axumのextract

axumではextractというものがあり、
実際のリクエストのpath parameterやrequest bodyの情報を取り出すことができる。

pub async fn hoge(
    extract::Path(hoge_id): extract::Path<String>,
    body: extract::Json<HogeRequest>,
) -> impl IntoResponse {
    todo!()
}

extractしようとしているものがなかった時(0.4.5までの挙動)

例えば、extractしようとしたrequestの構造が異なるなどして失敗した場合、
今までだとレスポンスのステータスコードは400(Bad Requestとなっていた)。

extractしようとしているものがなかった時(0.4.6からの挙動)

例えば、extractしようとしたrequestの構造が異なるなどして失敗した場合、
レスポンスのステータスコードは422 (Unprocessable Entity)となっていた。

そもそも422とは?

The HyperText Transfer Protocol (HTTP) の 422 Unprocessable Entity 応答状態コードは、
サーバーが要求本文のコンテンツ型を理解でき、要求本文の構文が正しいものの、
中に含まれている指示が処理できなかったことを表します。

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/422

挙動が変わった経緯

こちらのPRが採用されたらしい。
どうやら、422の方が振る舞いとして適切でしょ?ということらしい。
https://github.com/tokio-rs/axum/pull/751

結論

挙動が変わったので、400想定でハンドリングしていたりテストしている場合は気をつけてください!

GitHubで編集を提案

Discussion