gpt4 book ai didi

rest - 当在 URL 和正文中使用 id 进行 PUT 时,哪个获胜?

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

尝试在以下情况下找出正确的 restful 行为:

  • 有一个端点/objects/{id} 有 GET 和 PUT 方法
  • 对象可以是任意的 json 并且出于某种原因它们有自己的 id 作为键,例如{"id": 1}
  • GET/objects/1 上,我显然应该收到 {"id": 1}
  • 当我 PUT/objects/1 {"id": 2} 时会发生什么?

这些是对我有吸引力的选项,按降序排列:

  • PUT 上的 Not-OK 状态 - 发出冲突信号并且不允许 PUT
  • 首先不要在对象中包含 id问题:我的对象可能非常复杂,并且将 id 编织到它们的嵌套结构中,因此很难再次过滤掉/分解
  • URL id 获胜(忽略 body id)。 问题:再次获取时,我没有得到我输入的内容,而是其他内容
  • body 获胜。 问题:我放置的内容完全落在了其他地方

最佳答案

RFC 7231

A successful PUT of a given representation would suggest that a subsequent GET on that same target resource will result in an equivalent representation being sent in a 200 (OK) response.

资源的标识符及其表示不需要以任何语义上重要的方式一致,这与文件的完全限定路径不需要与其内容一致的方式大致相同,与字典中的值不需要与其键一致。

GET /objects/1

200 OK

{ "id": 2 }

就 HTTP 而言,这是完全有效的,就像它对

GET /fbb477c8-e2f3-4581-9c44-27305de6ebee

200 OK

{ "id": 2 }

您需要依赖的标准的关键部分是:

An origin server SHOULD verify that the PUT representation is consistent with any constraints the server has for the target resource that cannot or will not be changed by the PUT.

完全符合规则的是,PUT/fbb477c8-e2f3-4581-9c44-27305de6ebee 的任何表示都必须是 id:1,并拒绝不满足该不变量的不一致请求。 409 Conflict是在这种情况下使用的通常状态代码。

当然,标识符 /objects/1 也是如此。

关于rest - 当在 URL 和正文中使用 id 进行 PUT 时,哪个获胜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750201/

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