Rest PUT请求是否应该与来自同一资源的GET响应兼容

Rest PUT请求是否应该与来自同一资源的GET响应兼容,rest,Rest,我正在回顾一些端点,这些端点是针对复杂API的开始而开发的 是否有任何行业推荐的最佳实践表明,您应该确保GET请求的响应可以用作针对相同资源的PUT请求的有效负载 此外,我希望您能对采取这种方法的人可能遇到的陷阱提供反馈。我会说“这很有帮助”,但严格来说这并不是必要的。因为内容协商和多个表示是一回事,所以您可以使用不同的媒体类型来“更改”或“检索”资源的状态 如果请求的表示是一个简单的子集,那么您可能需要的是PATCH 如果PUT请求的响应包含ETag,则PUT的请求正文应与当前状态完全匹配。但

我正在回顾一些端点,这些端点是针对复杂API的开始而开发的

是否有任何行业推荐的最佳实践表明,您应该确保GET请求的响应可以用作针对相同资源的PUT请求的有效负载


此外,我希望您能对采取这种方法的人可能遇到的陷阱提供反馈。

我会说“这很有帮助”,但严格来说这并不是必要的。因为内容协商和多个表示是一回事,所以您可以使用不同的媒体类型来“更改”或“检索”资源的状态

如果请求的表示是一个简单的子集,那么您可能需要的是
PATCH

如果
PUT
请求的响应包含
ETag
,则
PUT
的请求正文应与当前状态完全匹配。但事实上,这种情况很少发生,因为API倾向于重新序列化其模型,并且通常会有细微的差异

不过,拥有该ETag是有帮助的,因为更智能的客户端可以读取该ETag并使用它来预热其当前缓存的资源状态,并且如果将来需要更多的
PUT
,并且客户端希望使用ETag来避免丢失的更新问题,则还可以避免竞争条件

就我个人而言,我喜欢
获取
资源,更改单个属性
再次放置
完整资源的能力。

,这是后续获取将返回的功能。