APIのレスポンスのステータスコードについて悩んだ話 200 vs 404

ユーザーのお気に入りがない場合は200?404?

/users/123/favorites/articles

上記のURIで示されるリソース「ID:123のユーザーがお気に入りに設定している記事」

これが0件だったときに、返すべきレスポンスは200なのか、404なのか

この判断にすごく悩みました



自分の中での結論

123のユーザーがクリップしているトークが0件

であれば200です

空のリソースがあるという考えで、存在しない(404)とは違うという結論です


123のユーザーそのものがいない場合

これは404です

/users/123/favorites/articles

このリソースが空ではなく、存在しません



ページングや検索はどうするべきか

これもリソースの存在有無で確認すると筋がよさそうです

/articles?offset=1000&limit=20

このoffset, limitはあくまでフィルタリングなので、

フィルタリングの結果が空だとしても、articlesというリソースが存在するなら

200で空を返すというのが良さそうです

検索においても、フィルタリングの一種と考えれば同様の理屈が当てはまります


articlesというリソースそのものが存在しないなら404です



結論

200と404のステータスコードについて悩んだときはリソースの存在有無を中心に判断するべき

プロジェクト統一ルール, 共通認識をつくっておくのも大事である