2013-06-13 3 views
25

Ich habe eine API, mit der Sie ein Objekt zerstören können. Der Teil, auf den ich nicht sicher bin, ist, wie JSON gerendert werden soll, nachdem der Datensatz zerstört wurde. Hier sind ein paar Optionen, aber ich bin mir nicht sicher, was die beste Praxis dafür ist.Was soll ich beim Löschen eines Datensatzes rendern?

Version 1:

Return leeres Objekt mit 204 Status

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

Version 2:

Rückholeinzelteil, obwohl es

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

Ist eines dieser beiden gegenüber den anderen bevorzugt? Gibt es eine Version, an die ich nicht gedacht habe, die vielleicht bevorzugt wird?

Antwort

18

Für eine Löschanforderung bedeutet der HTTP-Statuscode 200 oder 204, dass die Ressource erfolgreich gelöscht wurde.

9.7 DELETE

Eine erfolgreiche Antwort sollte 200 (OK), wenn die Antwort enthält eine Einheit beschreibt den Status, 202 (angenommen), wenn die Aktion ist noch nicht in Kraft gesetzt wurde, oder 204 (kein Inhalt), wenn die Aktion wurde ausgeführt, aber die Antwort enthält keine Entität.

So können Sie entweder zurückgeben, das Objekt mit Statuscode 200 oder leerer Antwort mit 204 Statuscode

+0

Wenn Sie leere Antwort sagen, meinen Sie "", Nil oder {} .to_json? –

+1

Sie können entweder "" eingeben oder eine Nachricht mit der Meldung "Gelöscht erfolgreich" zurückgeben. – usha

18

Ein Erfolgsstatus von 204 (ohne Inhalt) erscheint angemessen. Wie durch 204 angedeutet, muss es nicht eine Antwort Körper sein, der mit render :nothing, status: :no_content oder etwas eingängiger erreicht werden kann:

def destroy 
    item.destroy 
    head :no_content 
end 

Edit:render :nothing ist veraltet und wurde entfernt, da Rails 5.1. Stattdessen könnten Sie render body: nil, status: :no_content verwenden.