HTTP PUT语义

3
引用自http://www.garfieldtech.com/blog/put-up-with-put的问题(这是针对Drupal开源项目的,有点元,因为没有代码在这里):
GET、HEAD和PUT是幂等的,但“偶然”的副作用,如日志记录或统计信息收集,是可以的,不违反它们的幂等性。RFC 2616在幂等性方面有这样的说法:
方法也可以具有“幂等性”属性,即(除了错误或到期问题之外),N>0个相同请求的副作用与单个请求的副作用相同。方法GET、HEAD、PUT和DELETE共享此属性。(RFC 2616第9.1.2节)
我不清楚“副作用是一样的”限定语是什么意思。这是否意味着它可以重复相同的副作用,还是净零效应?
然后......我们一直允许前向修订,也就是创建一个尚未成为默认版本的新版本。这如何影响幂等性和PUT?如果创建了一个新的修订版,则重复PUT不是无操作。而是会创建另一个修订版。规范说:
一个资源可以由许多不同的URI标识。例如,一篇文章可能有一个用于标识“当前版本”的URI,该URI与标识每个特定版本的URI是分开的。在这种情况下,对通用URI的PUT请求可能会导致源服务器定义多个其他URI。
换句话说: PUT /node/5 {title: "Hello world"} 结果是:
GET /node/5 {title: "Hello world"} GET /node/5/revision/8 {title: "Hello world"}
这完全符合规范。但是,以下代码怎么办? PUT /node/5 {title: "Bonjour le monde"} 结果是:
GET /node/5 {title: "Hello world"} GET /node/5/revision/8 {title: "Hello world"} GET /node/5/revision/9 {title: "Bonjour le monde"}
这仍然是符合规范的行为吗?如果不是,是否意味着任何使用创建-读取-归档-清除(CRAP)模型而不是CRUD或支持前向修订的系统本质上不符合PUT兼容性?
1个回答

2

你对标准废弃RFC 2616有什么了解呢?谢谢你的参与! - chx
再澄清一下:所以PUT /node/5会创建/node/5/revision/9,但在有人点击PUT /node/5/revision/9/publish之前,不会改变GET /node/5的结果,这没问题吗? - chx
1
等等,如果你向X进行PUT操作,它应该修改X。如果不这样做,你就没有按照定义使用PUT。 - Julian Reschke
@JulianReschke 顺便说一下,为什么人们应该停止查看 RFC 2616?此链接 没有显示它被其他任何东西所取代。 - Florian Margaine
Florian - 它现在正在被淘汰。因此,人们真的应该审查新规范。 - Julian Reschke
显示剩余2条评论

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