2013-06-13 26 views
25

Tôi có một API cho phép bạn phá hủy một đối tượng. Phần tôi không chắc chắn là những gì JSON nên được trả lại sau khi hồ sơ đã bị phá hủy. Dưới đây là một vài lựa chọn, nhưng tôi không chắc thực hành tốt nhất là gì cho việc này.Tôi nên làm gì khi hủy hồ sơ?

Phiên bản 1:

Return trống đối tượng với 204 tình trạng

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

Version 2:

mục Return, mặc dù nó đã bị phá hủy

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

Một trong số này có được ưu tiên hơn cái kia không? Có một phiên bản mà tôi đã không nghĩ rằng có thể được ưa thích?

Trả lời

18

Để yêu cầu xóa, mã trạng thái http 200 hoặc 204 ngụ ý tài nguyên đã bị xóa thành công.

9,7 DELETE

Một phản ứng thành công NÊN là 200 (OK) nếu đáp ứng bao gồm một thực thể mô tả các trạng thái, 202 (Chấp nhận) nếu hành động vẫn chưa được ban hành, hoặc 204 (Không có nội dung) nếu hành động đã được ban hành nhưng phản hồi không bao gồm một thực thể.

Vì vậy, bạn có thể trả lại đối tượng với mã trạng thái 200 hoặc phản hồi trống với mã 204 tình trạng

+0

Khi bạn nói câu trả lời trống, bạn có nghĩa là "", nil hoặc {} .to_json không? –

+1

Bạn có thể cung cấp "" hoặc trả lại thông báo cho biết "Đã xóa thành công" – usha

18

Một trạng thái thành công của 204 (không có nội dung) xuất hiện thích hợp. Như ngụ ý bởi 204, có phải không phải là một cơ thể phản ứng, trong đó có thể đạt được với render :nothing, status: :no_content hoặc một chút hấp dẫn hơn:

def destroy 
    item.destroy 
    head :no_content 
end 

Edit:render :nothing đã được chấp nhận và được gỡ bỏ từ Rails 5.1. Thay vào đó, bạn có thể sử dụng render body: nil, status: :no_content.

Các vấn đề liên quan