【问题标题】:Put and idempotent放和幂等
【发布时间】:2012-03-16 01:48:44
【问题描述】:

如果您的模型包含一个名为“created”和“updated”的文件

当您使用 PUT 将内容更新到此记录时..

  1. 是否应将 created 设置为数据创建或修改的时间?由于 PUT 是幂等的,所以不应该依赖之前的值

  2. 由于发出请求时总是修改updated,所以违反幂等原则?

【问题讨论】:

    标签: ruby-on-rails ruby api http rest


    【解决方案1】:

    是否应将 created 设置为数据创建或修改的时间?由于 PUT 是幂等的,所以它不应该依赖先前的值。

    我真的不明白你在这里问什么。没有理由将 created_at 设置为修改时间,因为它们是两个不同的概念。

    由于发出请求时总是修改updated,所以违反幂等原则?

    您认为updated_at 总是被修改的假设是不正确的(至少在 Rails 中不是,也不应该在其他任何地方)。如果您多次执行相同的PUT,则不会违反幂等性,因为这些后续请求不会修改任何属性,因此updated_at 时间不会更改。

    有一个有趣的post on the Rails blog about PUT & PATCH 对此增加了很多。在我看来,用户永远不应该在他们的请求中发送created_atupdated_at(因为服务器通常应该忽略它们并自行设置它们),尽管这是否违反了@987654330 的想法确实值得怀疑@ 应该发送整个对象。但是,如果忽略这个想法(因为它经常在 Rails 中,也许在其他地方),那么PUT 确实是幂等的。

    【讨论】:

    • 回复:“没有理由 created_at ...”,当然,但只是想与“幂等”的含义保持一致
    • 霍华德的观点是,根据 HTTP 规范,PUT 创建或修改资源之间不应该有任何明显的区别。无论哪种方式,您最终得到的资源都应该是相同的,而 created_at 字段与此不符。
    • @Chuck 怎么样?在PUT 请求完成后,对象何时会拥有不同的created_at
    【解决方案2】:

    用 put 你不改变 created_at 你改变 modified_at 或任何它被称为。 Created_at 仅在创建时设置。顺便说一句,post 和 put 都可以用来创建和更新值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2015-10-10
      • 1970-01-01
      • 2015-05-25
      • 2011-10-10
      相关资源
      最近更新 更多