web-dev-qa-db-ja.com

レコードを破棄するときに何をレンダリングすればよいですか?

オブジェクトを破棄できるAPIがあります。レコードが破棄された後、どのJSONをレンダリングする必要があるのか​​、よくわかりません。ここにいくつかのオプションがありますが、これのためのベストプラクティスが何かはわかりません。

バージョン1:

204ステータスの空のオブジェクトを返す

def destroy
  item = current_user.current_cart.items.find(params[:id])
  item.destroy
  render json: {}, status: :no_content
end

バージョン2:

破壊されていても返品する

def destroy
  item = current_user.current_cart.items.find(params[:id])
  item.destroy
  render json: item
end

これらの1つは他よりも優先されますか?私はそれが好まれるかもしれないと考えていないバージョンがありますか?

36
Peter Brown

削除リクエストの場合、httpステータスコード200または204は、リソースが正常に削除されたことを意味します。

9.7削除

成功した応答は、応答にステータスを説明するエンティティが含まれている場合は200(OK)、アクションがまだ実行されていない場合は202(承諾済み)、アクションが実行されているが応答に含まれていない場合は204(コンテンツなし)であるべきです(SHOULD)。エンティティ。

したがって、200のステータスコードでオブジェクトを返すか、204のステータスコードで空の応答を返すことができます。

28
usha

成功ステータス204(コンテンツなし)が適切と思われます。 204で暗示されているように、レスポンスボディがあってはなりません。 render :nothing, status: :no_content またはもう少しキャッチー:

def destroy
  item.destroy
  head :no_content
end

編集:render :nothingは非推奨となり、Rails 5.1以降では削除されました。代わりにrender body: nil, status: :no_content

29