破坏记录时我应该渲染什么?

时间:2013-06-13 17:39:57

标签: ruby-on-rails json api rest ruby-on-rails-3.2

我有一个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

其中一种比另一种更受欢迎吗?是否有一个我没想过的版本可能是首选的?

2 个答案:

答案 0 :(得分:27)

对于删除请求,http状态代码200或204表示资源已成功删除。

9.7删除

如果响应包括描述状态的实体,则成功响应应为200(OK),如果操作尚未执行,则应为202(已接受);如果已执行操作但响应为204(无内容)不包括实体。

因此,您可以使用200状态代码返回对象,也可以使用204状态代码

清空响应

答案 1 :(得分:26)

成功状态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