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

Pet*_*own 36 api rest json ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

版本2:

退货,即使它已被销毁

def destroy
  item = current_user.current_cart.items.find(params[:id])
  item.destroy
  render json: item
end
Run Code Online (Sandbox Code Playgroud)

这些中的一个优先于另一个吗?是否有一个我没想过的版本可能更受欢迎?

ush*_*sha 27

对于删除请求,http状态代码200或204意味着资源已成功删除.

9.7删除

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

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


And*_*art 27

成功状态204(无内容)似乎是合适的.正如204所暗示的那样,一定不能有一个响应体,可以用render :nothing, status: :no_content或者更有吸引力:

def destroy
  item.destroy
  head :no_content
end
Run Code Online (Sandbox Code Playgroud)

编辑: render :nothing自Rails 5.1以来已被弃用并被删除.相反,你可以使用render body: nil, status: :no_content.