我正在为电子商务风格的应用程序开发标准购物车。在购物车中,我们具有允许用户更新商品数量的标准流程。我了解如何使用标准的post方法来将信息传递到控制器中的操作上。我不知道动词PATCH和PUT。
如果我的控制器中有以下自定义操作(通过POST调用),那么使用标准操作(例如“更新”)的PATCH是否被认为更安全?我仍在学习有关Rails和PATCH和PUT的更多信息,这让我有些困惑。
carts_controller
def update_cart_qty @item = Item.find(params[:line_item][:item_id]) quantity = params[:line_item][:quantity] # if qty is a not a number or negative set to 1 quantity = '1' if !quantity.match(/^\d+$/) if quantity == '0' result = current_cart.line_items.where("item_id = ?", params[:line_item][:item_id]).destroy_all respond_to do |format| format.js {flash.now[:notice] = "Removed \"#{@item.title}\" from your cart."} format.html {flash[:error] = "Removed \"#{@item.title}\" from your cart."} end else result = current_cart.add_item_and_update(@item, quantity, branch, current_user, price) current_cart.save respond_to do |format| format.js {flash.now[:notice] = "Qty \"#{quantity}\" of item \"#{@item.title}\" was updated."} format.html {flash[:notice] = "Qty \"#{quantity}\" of item \"#{@item.title}\" was updated."} end end end
drhining.. 5
jsonapi.org上的文档对PUT与PATCH进行了很好的讨论。
HTTP规范不允许使用PUT部分更新资源(即仅更改其某些状态)。相反,应该将PUT完全替换资源的状态。
[ snip HTTP spec blockquote ]
因此,部分更新的正确方法是PATCH,这是JSON API使用的方法。而且,由于PATCH也可以用于完全替换资源,因此到目前为止,JSON API并不需要为PUT定义任何行为。但是,将来可能会定义PUT语义。
过去,许多API使用PUT进行部分更新,因为PATCH尚未得到很好的支持。但是,现在几乎所有客户端都支持PATCH,而那些客户端不容易解决。
基本思想是,仅当完全替换资源时才应使用PUT,而PATCH则应用于部分替换/更新。POST可用于任何非幂等操作。
jsonapi.org上的文档对PUT与PATCH进行了很好的讨论。
HTTP规范不允许使用PUT部分更新资源(即仅更改其某些状态)。相反,应该将PUT完全替换资源的状态。
[ snip HTTP spec blockquote ]
因此,部分更新的正确方法是PATCH,这是JSON API使用的方法。而且,由于PATCH也可以用于完全替换资源,因此到目前为止,JSON API并不需要为PUT定义任何行为。但是,将来可能会定义PUT语义。
过去,许多API使用PUT进行部分更新,因为PATCH尚未得到很好的支持。但是,现在几乎所有客户端都支持PATCH,而那些客户端不容易解决。
基本思想是,仅当完全替换资源时才应使用PUT,而PATCH则应用于部分替换/更新。POST可用于任何非幂等操作。