質問: ``` GET /comments?userId=99999 ``` この場合はステータスコード200で空の配列を返すで良いでしょうか? クエリパラメーターの99999にマッチするものがなくても、リソースが存在していないとも異なるので、 404ということでもないのかなと思いました。
回答: 単一レコードを取得するAPIであれば、レコードがなかったら404を返すべきで、 正常終了である200を返すのは良くないと考えています。 配列を返すAPIならば、200でも問題ないですけど。 レコードが見つからない=エラーではないため。 `GET /comments` => レコードがあろうがなかろうが配列を返せばいいので、200 `GET /comments?userId=99999` => 配列で返すので200 `GET /comment` => どのレコードを返せば良いか不明というかパラメータが不足している。Bad Requestという事で400 `GET /comment/1` => レコードがなければ404、あれば200 もちろん、想定するレスポンスとしては、 `GET /comments` => `[ {"id": 1, "user_id": 1, ..}, {"id": 2, "user_id": 100, ...}, ..., ]` `GET /comment/1` => `{ "id": 1, "user_id": 1, ...}` という形ですよね? 自分がAPIを作る場合は、`GET /comment/1`で404などのエラーの場合は、 こんな感じでより具体的なエラー内容を返すようにしています。 ``` { "error": { "code": 1000, "message": "record not found: id=1" } } ``` 特にフロント側でエラーを表示する時は、エラーコードを元に判定する事が多いです。 APIのレスポンスに含まれるエラーメッセージは、ログなどに出力して開発者側にとって分かりやすいようにしてます。 デバッグ情報的な扱いです。