Mic*_*che 7 rest etag http optimistic-locking
许多REST API提供搜索资源的功能.
例如,可以使用以下HTTP请求获取类型A的资源:
GET /A?prop1={value1}&prop2={value2}
Run Code Online (Sandbox Code Playgroud)
我正在使用乐观锁定,因此希望为A类型的每个返回资源返回一个版本.到目前为止,我在使用其ID仅获取一个资源时使用了ETag标头.
是否有一种HTTP方法可以在同一响应中为多个资源返回版本?如果没有,我应该在正文中包含版本吗?
谢谢,Mickael
编辑:我在网上发现,ETag通常是通过计算部分回复的哈希来生成的.这种方法非常适合我的情况,因为将计算返回集合的哈希值.但是,如果客户端决定更新集合中的一个元素,那么他应该将哪个ETag置于If-Match标头中?我认为包含各个元素的ETag是唯一的解决方案......
我会采用以下选项之一:
默认情况下将 ETag 设为弱,它们是根据资源当前状态生成的,而不是根据 HTTP 响应负载中的资源表示形式生成的。这样,除了响应标头中整个集合的 ETag 之外,我还可以为集合查询响应正文中的每个资源返回一个有效的 ETag。
在这种情况下,请忘记If-MatchETag,并将 ETag 与作为每个资源的属性提供的一起If-Unmodified-Since使用。Last-Modified通过这样做,我可以保留强大的 ETag,但客户端仍然可以根据集合响应对一项进行更新,而不需要对资源本身发出另一个请求。
允许通过 PATCH 对集合资源本身进行更新,使用If-Match带有 ETag 的标头来表示整个集合。如果存在大量并发更改,这可能不会很好地工作,但这是一种合理的方法。