gpt4 book ai didi

HTTP PUT 语义

转载 作者:可可西里 更新时间:2023-11-01 16:34:28 28 4
gpt4 key购买 nike

引用问题自http://www.garfieldtech.com/blog/put-up-with-put (这是针对 Drupal 开源项目的,有点元,因为这里没有代码):

GET、HEAD 和 PUT 是幂等的,但“偶然”的副作用(例如日志记录或统计信息收集)是可以的,不会违反它们的幂等性。 RFC 2616 对幂等性有这样的说法:

Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. The methods GET, HEAD, PUT and DELETE share this property. (RFC 2616 section 9.1.2)

我不清楚“副作用是一样的”限定词。这是否意味着它可以是相同副作用的重复,或者净 0 效应?

然后...我们一直允许向前修订,即创建一个新版本,它还不是默认版本,但将会是。这对幂等性和 PUT 有何影响?如果创建了新修订,则重复 PUT 不是空操作。相反,它会创建另一个修订版。规范说:

A single resource MAY be identified by many different URIs. For example, an article might have a URI for identifying "the current version" which is separate from the URI identifying each particular version. In this case, a PUT request on a general URI might result in several other URIs being defined by the origin server

换句话说:

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?

最佳答案

创建版本资源作为副作用很好。相关的是客户端要求什么,而不是服务器决定另外做什么。

参见 http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-21.html#idempotent.methods -- 是时候停止查看 RFC 2616 了。

关于HTTP PUT 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12947001/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com