RESTful
REST-API

200 or 204 どっちを使うか

PUTDELETEメソッドで200返すか204返すか悩んだのでそのメモ
200返すか204を返すか大体の方針が見えるはず!

204について

HTTPステータスコードの204 No Content
訳すると内容なし。HTTPステータスコードとして204を返すのなら、その名の通りレスポンスボディーは何も返さないのが正解

参考: RFC2616 日本語訳の複製

PUT

RFC2616 9.6 PUT 日本語訳の複製には更新成功時には200204と記載されていました

  • 既存のデータを更新するだけなので、正しく更新された場合は204のステータスコードだけを返せばいいよー派
  • 変更された状態のデータを返すべき!ステータスコードは200で!派

PUTでは上記の2つの派閥?考え?宗教戦争????があるようです

RESTfulについて勉強する際にバイブルとしていた本。Web API: The Good Parts では、後者の200を返すことをおすすめしていたので、基本は200でいいのかなー安直

自分は基本は200だけど用意するAPIで使い分けるという意見に自分は落ち着きました
(W3Cもどちらかを使いましょうまでしか言及していないのでこれでいいはず...)

DELETE

DELETEに関しては、W3Cがこれ!ってものを出していたので従うのがいいかなと思います。

成功したレスポンスは、もしレスポンスがステータスで表しているエンティティを含んでいるなら 200 (OK)、もし動作がまだ行われていないなら 202 (Accepted)、もし動作は行われたが、レスポンスにエンティティを含んでいないなら 204 (No Content) であるべきである>
RFC2616 9.7 DELETE 日本語訳の複製

論理削除なら200、物理削除なら204でいけそうです

おまけ

すごい図がありました
ただし200と204の分岐がto content でしかなかったので結局ボディー送るか送らないか考える必要はあるんですけどね笑

https://raw.githubusercontent.com/for-GET/http-decision-diagram/master/httpdd.png

参考