放置和幂等

时间:2012-02-26 04:45:48

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

如果您的模型包含一个名为“已创建”和“已更新”的字段

使用PUT更新此记录的内容时..

  1. 应该创建设置为数据创建或修改的时间吗?由于PUT是幂等的,因此它不应该依赖于先前的值

  2. 由于在您发出请求时始终会修改更新,因此违反了幂等原则?

2 个答案:

答案 0 :(得分:6)

  

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

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

  

由于在发出请求时始终会修改更新,因此违反了幂等原则?

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

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

答案 1 :(得分:0)

使用put你不要改变created_at你改变modified_at或者它被调用的任何东西。 Created_at仅在创建时设置。 BTW,post和put都可以用来创建和更新值。