2013-06-13 14 views
25

Mam interfejs API, który pozwala niszczyć obiekt. Częścią, której nie jestem pewien, jest to, co JSON powinien być renderowany po zniszczeniu rekordu. Oto kilka opcji, ale nie jestem pewien, jaka jest najlepsza praktyka.Co powinienem renderować podczas niszczenia rekordu?

Wersja 1:

Powrót pusty obiekt z 204 Stan

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

Wersja 2:

pozycja powrotu, mimo że został zniszczony

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

Czy jedna z nich jest preferowana w stosunku do drugiej? Czy istnieje wersja, o której nie myślałem, że może być preferowana?

Odpowiedz

18

W przypadku żądania usunięcia kod stanu http 200 lub 204 oznacza, że ​​zasoby zostały pomyślnie usunięte.

9,7 DELETE

Skuteczna odpowiedź powinna być 200 (OK) jeżeli odpowiedź zawiera encję opisującą status 202 (Accepted) jeżeli akcja nie została jeszcze uchwalona, ​​lub 204 (No Content) jeżeli działanie zostało uchwalone, ale odpowiedź nie zawiera podmiotu.

Więc można albo przywrócić obiekt z kodem 200 statusu lub pustym odpowiedzi z kodem 204 statusu

+0

Kiedy mówisz pustą odpowiedź, masz na myśli "", zero lub {} .to_json? –

+1

Możesz podać "" lub zwrócić wiadomość z napisem "Usunięte pomyślnie" – usha

18

status sukces 204 (bez zawartości) wydaje się właściwe. Jak wskazuje 204, nie musi być organem odpowiedzi, które mogą być osiągnięte z render :nothing, status: :no_content lub nieco bardziej chwytliwe:

def destroy 
    item.destroy 
    head :no_content 
end 

Edit:render :nothing jest przestarzała i została usunięta ponieważ Rails 5.1. Zamiast tego możesz użyć render body: nil, status: :no_content.

Powiązane problemy