我有一个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
其中一种比另一种更受欢迎吗?是否有一个我没想过的版本可能是首选的?
答案 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
。