こんにちは。
「リクエストされたURLによるリソースが存在しない」
ということを、定義上、明確に示している(=ステータスコードのメッセージ部分に、
「存在しない」意味のテキストが含まれている。)ようなステータスコードとして、
よく使われるものが2つあり、時と場合に応じてより適切なほうを選ぶとよいかと思います。
- 1つは、存在しないリソースを要求するリクエストをしたこと自体がエラーであることを明示したい場合は
404 NOT FOUND
が適切かと思われます。
204 No Content
です。これは成功を表すステータスコードで、この場合、
レスポンスボディは空にするのがお約束です。
204を返すケースの例としては、何らかのリソースをPOSTで新規
作成を要求したときに、その要求が成功して、特にレスポンスボディを
返す必要がないときに使うことがあります。
また、GETリクエストにクエリパラメータを与えて、リソースの検索をした結果、
検索は正常に行われたけれども、該当するものがなく、レスポンスボディとして
空を返したい場合にも用いられることがあります。
上記をふまえご質問の
マスタ無しエラー
というのは、データベースのマスタ系テーブルに含まれないパラメータが
リクエストに含まれていることだと思いますが、その場合は、リクエストが
不正で、処理が失敗したことを明示するために、
404 NOT FOUND
が適切と思われます。あるいは、
400 Bad Request
でもよいかもしれませんが、いずれにせよ、リクエストボディの中に
指定されたマスタ(code=002)は存在しない。
というようなエラーメッセージを含めるとよいと思います。
ちなみにステータスコードの定義は以下
W3C: Status Code Definitions
に書かれています。
以上、参考になれば幸いです。
補足 1
APIの設計時に、レスポンスコードに何を返すか?というのは、個人の考え方により、意見の分かれる
ところですので、最終的には、レスポンスコードの一覧を見たうえで、質問者様が
「これがよさそう」と思うところを選べばよろしいかと思います。
補足 2
ステータスコードの200番台系、400番台系、500番台系のうち、どれを返せば良いか?について、
極めて現場的なやり方の一例を示します。(※ウォーターフォールではなく、アジャイルです)
まず、
・リクエスト側に原因あり→ 400番台系
・サーバー側に原因あり→ 500番台系
と分けられますが、リクエスト側に原因あり(400番台系)のケースとして、Aという状況と、
Bという状況の2つあった場合、
Aによるエラーと、Bによるエラーは、ともにリクエストに原因があるので、400番台系を返させることは
決まっているが、Aの場合は何番で、Bの場合は何番にしたらよいだろう?
と考えていくわけですが、このとき、具体的に何番にしたらよいか分からないときは、
リクエストに問題がある場合は、とりあえず すべて400 Bad Request を返すことに
しておいて、必要に応じて後で詳細化する
ことにします。
同様にサーバー側に起因するエラーの場合、細かく分ければ違う状況でも、とりあえず
500 Internal Server Error だけを返すことにし、同様に、成功の場合は、200 OK だけを
返す、という設計にしておいて、これに基づいて、サーバー側と、(JQueryなどで)フロントエンド側を
実装していきます。
つまり、
- (200番台,400番台,500番台を返すべき状況では、)200, 400, 500 だけしか使わない
という、ざっくりな設計でとりあえず始めます。
その後、たとえば、
ログインしている状態でのみアクセス可能なリソース取得や更新をログインしていない状態
で試みた場合は、クライアント側でログインページを表示させたいので、他の 400 Bad Request
のケースと分ける意味で、401 Unauthorized を返させよう。
だとか、あるいは
ログインしているユーザーの権限レベルでは禁止されているリクエストを受けたときは、
403 Forbidden を返させよう。
だとか、必要に応じて分けていき、その詳細化に応じてサーバーとフロントで実装を追加します。
逆にいえば、
リクエスト不正の場合は、ステータスコードは400だけを使い、詳細はレスポンスボディに記述することにしよう。
という設計も、(いいか悪いかは別として、可能か不可能かでいえば、)出来なくはない、ということになります。
また、成功の場合も同様で、初めは全て、200 OK を返すことにしていたけれど、何かの理由で
POST で何らかのリソースを新規作成することに成功したことを、他のリクエストの成功とは
区別したいので、その場合は、201 Created を返させよう。
といった感じで詳細化していきます。
補足 3
ご質問のタイトルである、「httpステータスコードについて」、
どのような値をサーバーから返したほうがよいのでしょうか?
に応える良書を一冊挙げます。
Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
以下は、上記の書籍の目次、「第8章 ステータスコード」から引用しました。
8.4 よく使われるステータスコード
200 OK — リクエスト成功
201 Created — リソースの作成成功
301 Moved Permanently — リソースの恒久的な移動
303 See Other — 別URIの参照
400 Bad Request ー リクエストの間違い
401 Unauthorized — アクセス権不正
404 Not Found — リソースの不在
500 Internal Server Error — サーバ内部エラー
503 Service Unavailable — サービス停止
私見ですが、とりあえず上記9個は覚えておき、適切に使い分けられるようにして、
どれにも当てはまらないように思える状況のときは、ステータスコード一覧を調べてみる、
という対応で、まずは十分ではないかと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/02 03:38
退会済みユーザー
2018/07/02 03:40
2018/07/02 07:34
2018/07/02 08:18
2018/07/02 14:53 編集
2018/07/02 14:54
2018/07/02 14:57
2018/07/03 00:11