Http 如何对多个项目使用ETag/If匹配

Http 如何对多个项目使用ETag/If匹配,http,rest,etag,Http,Rest,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 或者,如果ETAG/if Match不能应对这种情况,建议采用什么方法?或者我应该自己滚吗?tl;dr:可以将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

或者,如果ETAG/if Match不能应对这种情况,建议采用什么方法?或者我应该自己滚吗?

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

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


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

首先,如何使用单个URL检索多个项目?请参见第二个示例URI
GET/items
将返回项目列表。什么类型的列表?你能显示实际数据吗?这些都还在计划阶段。我的问题是,;ETag信息在HTTP头中返回,因此如何为多个项目返回适当的信息?您将无法在头中返回多个ETag。根据主体数据(xml等)的格式,您可能能够将ETag作为项本身的属性/节点包括在内。这就是为什么我问列表的格式是什么。我发现的另一种方法是使用返回内容的散列。在这种情况下,哈希将在集合上计算,因此是ETag头的候选。但是,如何使用此ETag进行乐观锁定?例如,客户端可能决定更新集合中的一个项目,但他没有此特定项目的哈希。不确定这是否正确,但我会恢复将哈希作为集合中每个实体的一部分。我个人想不出别的办法。或者让客户机拉取他们想要更新的单个实体,当准备就绪时,有时您需要对API进行一些聊天。如果要对集合中的项执行更新,请对其资源URI执行head请求,并使用该Etag执行更新locking@MatthewConcreteBlackmon:执行额外的HEAD请求可能会导致竞争状况。您首先在版本X中获得状态,但下面的HEAD请求可能返回版本X+1。eTag不是这样使用的。eTag头值仅在服务器端生成。有关确切的定义,请参见HTTP标准。常用术语REST被视为HTTP的同义词,但它们非常复杂
GET /items    --> How do I return multiple ETags for multiple items here?