Rails Put vs Post

我一直在阅读put和post请求之间的区别,我有一些相关的问题,因为它与rails有关:我想在已经创建的行中更改一个特定的字段...应该使用put还是post请求? 例如下面的不同?

#Assume this is a put request
def update
    @model=Model.find(x)
    @model.field="new_field"
    @model.save
end

#Assume this is a post request
def update
    @model=Model.find(x)
    @model.field="new_field"
    @model.save
end

#What if I use the rails update method?
def update
    @model=Model.find(x)
    @model.update(model_params)
    @model.save
end

提前致谢。


根据铁路公约,

PUT用于更新现有资源

POST用于创建新资源

在导轨4中,PUT已更改为PATCH以避免混淆。

默认情况下,Rails生成的路由将如下所示

    posts GET    /posts(.:format)                            {:action=>"index", :controller=>"posts"}
          POST   /posts(.:format)                            {:action=>"create", :controller=>"posts"}
 new_post GET    /posts/new(.:format)                        {:action=>"new", :controller=>"posts"}
edit_post GET    /posts/:id/edit(.:format)                   {:action=>"edit", :controller=>"posts"}
     post GET    /posts/:id(.:format)                        {:action=>"show", :controller=>"posts"}
          PUT    /posts/:id(.:format)                        {:action=>"update", :controller=>"posts"}
          DELETE /posts/:id(.:format)                        {:action=>"destroy", :controller=>"posts"}

注意PUT和POST的动作


默认情况下,Rails旨在按照REST规范所规定的方式使用HTTP动词,您不应该担心这些方法为什么可能允许您执行相同的操作。 相反,您应该考虑提供一个RESTful API,用户将理解。 这些默认行为可以被覆盖。

REST表示:

使用POST方法的请求应对资源收集起作用; 将新资源添加到示例URL:http://example.com/resources

使用PUT HTTP动词的请求应该对集合中的单个资源起作用; 完全取代服务器上的资源示例URL:http://example.com/resource/1

使用PATCH HTTP动词的请求应该对集合中的单个资源起作用; 更新站点所在资源的某些属性示例URL:http://example.com/resource/1

Rails 4现在使用PUT动词上的PATCH动词来更新资源。


  • 我认为我们应该在更新记录的某些属性时使用PATCH
  • PUT确实意味着在“替换”资源或其所有属性的情况下,但也可能意味着创建资源(我基于这本书阅读本书时记得的内容:REST API设计规则手册),例如,当您移动(复制)您触发PUT而不是POST的AWS S3资源。 所以,是的PUT很混乱。
  • 提交新资源时应使用POST
  • 围绕PATCH也存在很多困惑,我个人认同JSON API标准是如何提出去做的http://jsonapi.org/format/#crud-updating:

    PATCH /articles/1 HTTP/1.1
    Content-Type: application/vnd.api+json
    Accept: application/vnd.api+json
    
    {
      "data": {
        "type": "articles",
        "id": "1",
        "attributes": {
          "title": "To TDD or Not"
        }
      }
    }
    

    我喜欢Rails I,但事实是它并不完全遵循一些核心的Web约定。 Rails正在努力提高生产力,过于严格的惯例压低了生产力。 所以在寻求答案时不要过分。 事实是Rails以同样的方式对待PUT和PATCH,显然两者都是错误的。 所以我建议:

  • POST创建
  • 修补程序更新
  • 获取索引,新建,显示
  • 根本不使用PUT
  • 如果你发现自己的控制器正在做一些奇怪的动作,试着重构你的控制器(引入新的控制器可能是http://jeromedalbert.com/how-dhh-organizes-his-rails-controllers/)
  • 但是如果你的整个项目在任何地方都使用PUT,那么你不需要经过并改变一切。 只要坚持一个或另一个(PUT或PATCH)。

    UPDATE

    我已经写了2篇关于这个话题的文章,我深入这个话题。

  • http://www.eq8.eu/blogs/36-patch-vs-put-and-the-patch-json-syntax-war
  • http://www.eq8.eu/blogs/37-post-create-and-put-updatepost
  • 链接地址: http://www.djcxy.com/p/41029.html

    上一篇: Rails Put vs Post

    下一篇: Servlet parameters and doPut