0
0

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 3 years have passed since last update.

POST で primary key を取得できない場合は 400 or 404のどっちを選べばいいの?

Posted at

疑問

とあるエンドポイントを呼び出し時にuser_idを指定するが、
DBにuser情報がない場合 404 or 400 or 503 何を選べばよい?

事前情報と参考文献

4XX の早見表 Start -> No -> No-> Yes -> No(※) -> No -> 404
4XX の早見表 Start -> No -> No-> Yes -> Yes(※) -> Yes -> No * 5 -> 400

※ 問「リソースは存在する?」で 400 と 404 は分岐する
※ 下記の引用に示されるように 「リソースは存在する?」 は「接続可能なURIであるか?」を意味する
※ このとき、 form dataは考慮されない

資源(RESOURCE) – URI

端的に言うと?

routingだけ機能したときに実行対象のAPIが発見できない場合が404。

RESTful APIに従っている場合(CURD の Createのみ担当している場合) の 404

urlのアドレス先が無いなら404。
こんな感じに endpointのpathでuser_idを含む場合で、
リクエストのuser_idからuser情報がない場合は404

endpoint_A_path="https://${domain}/user/${user_id}/create_unique_key"
curl -X POST \
  ${endpoint_A_path} \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'foo=baz'
RESTful APIに従っている場合(CURD の Createのみ担当している場合) の 400

必然的に リクエストのuser_idからuser情報がない場合以外のエラー になるから
作成に失敗する場合は400(or 503)を返却する。

endpoint_A_path="https://${domain}/user/${user_id}/create_unique_key"
curl -X POST \
  ${endpoint_A_path} \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'foo=baz'
RESTful APIに従っていない場合(CURD の Create, Updateを担当している場合) の 400

こんな感じに endpointのpathで含まないならurlのアドレス先はあるはずだから404ではない。
リクエストのuser_idからuser情報がない場合も、
リクエストのuser_idからuser情報がない場合以外のエラー も
通常、400 を返却する。
urlのアドレス先はあるけど、パラメータが間違っていてサーバーエラーが発生するから。

endpoint_A_path="https://${domain}/users/create_unique_key"
curl -X POST \
  ${endpoint_A_path} \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d "user=${user_id}&foo=baz"
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?