疑問
とあるエンドポイントを呼び出し時に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"