RailsでRestfulのAPIを実装していて、createのときに成功した際にstatusを:createdにしていたので、updateを実装したときにstatusを:updatedとかにしてしまい、テストが通らなくて小一時間ほど悩んでしまいました。
簡単にHTTPステータスコードと応答内容をどうしといたほうがいいのかメモを残しておきます。
基本的なリソースに対する操作
Railsのコントローラで下記のメソッドのときのステータスコードと応答の内容は実際のAPIの受け側でどうしたいかにもよってくるかと思いますが、だいたい下記のようになるのではないでしょうか。
- create
- update
- destroy
create
statusはcreated(201)を返して、新しく作成したオブジェクトを返します。
render status: :created
実際の作成された中身はビューにjbuilderとかで記述します。
APIの受け側でidが新しく発行されるので、その情報を返してあげます。
update
updateのときはHTTP的にはPUTなので、下記参照すると200か204を返す必要があります。
たいがいAPIの受け側で特に中身は必要ないと思うので下記のように記述します。
head :no_content
destroy
destroyのときはHTTP的にはDELETEなので、updateと同様に200か204を返す必要があります。また、DELETEの場合は、処理だけ受け付けて実際の消去をしない場合は202を返すみたいです。
Railsで記述するのは、updateと同様に下記のようにします。
head :no_content
RailsのHTTPステータスコードシンボル
RailsのHTTPステータスコードシンボルに関しては下記がいい感じでまとまっています。
以上です。