如何将ETag / If-Match与多个项目一起使用

时间:2012-03-23 10:47:42

标签: http rest http-etag

在RESTful接口中处理乐观锁定的推荐方法似乎是从GET返回ETag,并在PUT上提供If-Match,即:

GET /items/1  --> gives client an ETag for a single item
PUT /items/1  <-- client gives it back as If-Match for checking

如何将此方案用于多个项目,例如,如果我想批量从一个URI中获取多个项目:

GET /items    --> How do I return multiple ETags for multiple items here? 

或者,如果ETags / If-Match不能应对这种情况,那么推荐的方法是什么?或者我应该自己滚动?

1 个答案:

答案 0 :(得分:20)

tl; dr :将etags分配给包含“集合”的资源是可以的,但在确定时,由应用程序来管理该集合中项目的标识/更改有效的etag。

REST架构风格中的资源并不意味着它是单个项目或集合。它只代表工作流中给定点的应用程序的状态。资源将包含描述性数据,并希望链接到工作流中该点的可能后续步骤。工作流程可以像获取订单状态一样简单,也可以像电子商务网站上的订购商品一样复杂,并且可以取消订单。

etag是用于确定特定状态(资源)是否是最新的机制。将etag分配给返回数据集合的资源意味着您的应用程序正在识别该点处的集合项的状态,并且如果这些项中的任何内容发生更改,则先前的etag值将不再有效。由您的应用程序决定何时更改集合项以及如何识别各个项目。换句话说,etags适用于资源,但不适用于给定资源的各个组件。