引用来自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 节)
我不清楚“副作用是一样的”限定词。这是否意味着它可以是相同副作用的重复,或净 0 效应?
然后......我们一直允许向前修订,即创建一个尚未成为默认版本但将成为默认版本的新版本。这对幂等性和 PUT 有何影响?如果创建了新修订,则重复 PUT 不是无操作。相反,它将创建另一个修订版。规范说:
单个资源可以由许多不同的 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"}
这仍然是规范有效的行为吗?如果不是,这是否意味着任何使用 Create-Read-Archive-Purge (CRAP) 模型而不是 CRUD 或支持正向修订的系统本质上不是 PUT 兼容的?