放置和幂等性

3
如果您的模型包含称为“created”和“updated”的字段,
当您使用PUT更新此记录的内容时...
1.应该将“created”设置为数据创建或修改时的时间吗?由于PUT是幂等的,所以不应该依赖先前的值。
2.由于每次请求都会修改“updated”,是否违反了幂等原则?
2个回答

6

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

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

由于每次请求都会修改updated,这违反了幂等原则吗?

你的假设updated_at总是被修改并不正确(至少在Rails中不是这样,在其他地方也不应该)。如果你多次进行相同的PUT请求,幂等性不会受到影响,因为这些后续请求不修改任何属性,因此updated_at时间不会改变。

有一篇有趣的Rails博客文章,关于PUT & PATCH,这篇文章对此进行了更深入的探讨。在我看来,用户不应该在请求中发送created_atupdated_at(因为服务器通常应该忽略它们并自行设置),尽管这确实值得怀疑是否违反了PUT应该发送整个对象的想法。然而,如果忽略了这个想法(就像在Rails中经常发生的情况,也许其他地方也是如此),那么PUT确实是幂等的。


回复:“没有理由创建于...”,当然,我只是想与“幂等”的含义保持一致。 - Howard
Howard的观点是,在HTTP规范下,PUT创建或修改资源时不应有任何可观察到的差异。无论哪种方式,你最终得到的资源应该是相同的,而created_at字段与此不符。 - Chuck
@Chuck 怎么可能呢?在 PUT 请求完成后,对象的 created_at 什么时候会改变呢? - Andrew Marshall

0

使用put方法时,您不会更改created_at,而是更改modified_at或其他名称。 Created_at仅在创建时设置。 顺便说一句,post和put都可以用于创建和更新值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接