可以想象,另一个客户也在过渡期间修改了资源的其他方面.因此,尽管有带宽开销,最好还是在PUT响应中始终包含完整表示吗?
在许多(如果不是大多数)情况下,即使通过PUT创建或更新资源,服务器也会向资源添加内容.示例是时间戳,版本号或从其他人计算的任何元素.即使您遵循RESTful方法并且不使用PUT进行部分更新,也是如此.
仅仅因为这个原因,返回更新或创建的资源的表示通常是PUT请求的一个好主意.不过,我不一定称之为"最佳实践" - 如果您将一个巨大的2GB图像文件丢弃,您可能不希望将其作为响应的一部分返回.
另一方面,包括ETag在内,绝对值得"最佳实践".
Jldupont的评论指出了我正确的方向.我将使用ETag通过使用If-match标头执行条件PUT来确定资源是否已被修改,如此处所述.
然后,如果发生冲突,我将让用户决定是从服务器获取最新的表示(GET)还是用自己的更改覆盖更改.
因此,不需要在对PUT的响应中返回完整表示以帮助进行冲突检测和解决.
我觉得GET和DELETE是一对 - 它们只带一个ID.
POST和PUT看起来也像一对.它们采用序列化对象并使其持久化.因此,我认为POST和PUT都应该返回创建的结果对象.
在某些情况下,您可能会在持久性过程中进行其他计算,而PUT可能会反映这些计算结果.从技术上讲,这可能是第三次正常形式违规,因为您有派生值.但通常,Web服务的重点是作为POST和PUT的一部分进行一些增值计算.