65
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WebAPIでバリデーションチェックエラーの際、HTTPステータスは何を返すのが適切か

Last updated at Posted at 2017-10-10

先日、WebAPIのバリデーションチェックエラー(必須チェック、桁数チェックなど)でレスポンスを返却する際、HTTPステータスとして何を返すのが適切かで議論となりました。
色々と調べて結論が出たので、せっかくなのでまとめて共有しようと思います。

議論メモ

返却ステータス案

  1. 200 OKを返す
  2. 400 Bad Requestを返す

その時出た意見

  • エラーだからOKを返すのも気持ち悪いよね
  • 400系は404 Not Foundなどと同じ粒度のエラーで使うべきだよね

などいろいろ出たのですが、これだという結論が出なかったため調べてみました。

Teratail

最初に、Teratailに質問を投稿してみました。
https://teratail.com/questions/95217

XHR等で結果を取得する場合、ステータスコード200は正常に取得できた(success)と判断して処理をする記述をされる方が多いように感じますので400系を返すのがよいのではないかと考えます。

teratail APIは容赦なく400 Bad Requestになりますね。
他の実装でも、パラメータ不足等はBad Requestになることが多いかと思います。
エンドポイントが異なる場合等で404が返ることもあります。

上記のようなコメントを頂き、他のAPI仕様を確認してみました。(suyamaさん、コメントありがとうございました!)

GitHub API

Sending invalid fields will result in a 422 Unprocessable Entity response.

Twitter API

400 INVALID_PARAMETER

StackOverFlow

StackOverFlowでも同じような質問を見つけました(最初から検索すればよかった、、)
https://stackoverflow.com/questions/6123425/rest-response-code-for-invalid-data

400 is the best choice in both cases. If you want to further clarify the error you can either change the Reason Phrase or include a body to explain the error.
412 - Precondition failed is used for conditional requests when using last-modified date and ETags.
403 - Forbidden is used when the server wishes to prevent access to a resource.
The only other choice that is possible is 422 - Unprocessable entity.

結論:400(Bad Request)を返却するのがよさそう

上記の通り色々と調べた結果、やはり400(Bad Request)を返却するのが良さそうでした。
より詳細に返却するのであれば、GitHubのように422(Unprocessable Entity)が適切かもしれません。

参考:HTTPステータスコード - Wikipedia

65
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?