I have an API that lets you destroy an object. The part I'm not sure on is what JSON should be rendered after the record has been destroyed. Here are a couple options, but I'm not sure what the best practice is for this.
Version 1:
Return empty object with 204 status
def destroy
item = current_user.current_cart.items.find(params[:id])
item.destroy
render json: {}, status: :no_content
end
Version 2:
Return item, even though it has been destroyed
def destroy
item = current_user.current_cart.items.find(params[:id])
item.destroy
render json: item
end
Is one of these preferred over the other? Is there a version that I have not thought of that might be preferred?
For a delete request, http status code 200 or 204 implies resource deleted successfully.
9.7 DELETE
A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 202 (Accepted) if the action has not yet been enacted, or 204 (No Content) if the action has been enacted but the response does not include an entity.
So you can either return the object with 200 status code or empty response with 204 status code