当前位置:  开发笔记 > 前端 > 正文

Rails 4-最好使用PATCH或POST进行更新

如何解决《Rails4-最好使用PATCH或POST进行更新》经验,为你挑选了1个好方法。

我正在为电子商务风格的应用程序开发标准购物车。在购物车中,我们具有允许用户更新商品数量的标准流程。我了解如何使用标准的post方法来将信息传递到控制器中的操作上。我不知道动词PATCHPUT

如果我的控制器中有以下自定义操作(通过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可用于任何非幂等操作。



1> drhining..:

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可用于任何非幂等操作。

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有