可以想象在此期间另一个客户端也修改了资源的其他方面。所以,尽管会增加带宽开销,将完整表示包含在PUT响应中始终是最佳实践吗?
可以想象在此期间另一个客户端也修改了资源的其他方面。所以,尽管会增加带宽开销,将完整表示包含在PUT响应中始终是最佳实践吗?
在许多情况下(如果不是大部分情况),即使通过PUT创建或更新资源,服务器也会添加一些内容。这些内容可能是时间戳、版本号或从其他元素计算而来的任何元素。即使您遵循RESTful方法并且不使用PUT进行部分更新,这仍然是真实的。
由于这个原因,对于PUT请求,返回已更新或已创建资源的表述通常是一个好主意。但如果您PUT一个2GB大小的大图片文件,您可能不希望将其作为响应的一部分返回,虽然我不一定会称之为“最佳实践”。
另一方面,包含ETag绝对值得成为“最佳实践”。
我喜欢认为GET和DELETE是一对,它们仅接受ID。
POST和PUT也像是一对。它们接受序列化对象并使其持久化。因此,我认为POST和PUT都应该返回所创建的结果对象。
在某些情况下,您可能需要在持久化过程中进行其他计算,并且PUT可以反映这些计算结果。从技术上讲,这可能会违反第三范式,因为您已经得到了派生值。但通常,Web服务的整个目的就是作为POST和可能是PUT的增值计算的一部分。
303 See Other
响应,并将Location
头设置为更新后的资源URI(Post/Redirect/Get)。这样,即使在编辑间隙中更改了资源,客户端也可以收到当前状态的资源(如果选择遵循Location
头部),并且不会因使用浏览器而重新提交请求。200 OK
、202 Accepted
等),这对客户端可能是有用的。此外,根据您对REST的定义,您可能认为这是非标准做法。