我有2个资源 - 这是一个例子,不要注意它的相关性 - 它们是连在一起的:
/customers/{id}
提供有关客户的年龄,性别,名字等的信息。/customers/{id}/age
,对应于客户的年龄属性。对于性能问题,此资源存在。为了符合HATEOAS约束,从/customers/{id}
资源提供了一个链接。应用程序可以在/customers/{id}
或/customers/{id}/age
资源上使用 PUT 执行更新。
由于年龄属性与两种资源相关,因此可以通过两种不同的方式更新年龄,从而导致冲突。 所以ETag似乎是解决我问题的银弹;-)!
此示例的两个基本问题,更为一般:
/customers/{id}/age
的更新修改了两个资源的etag。这个和/customers/{id}
。/customers/{id}
资源而不是年龄时仅修改firstName,我不想更新/customers/{id}/age
资源的ETag。一个更普遍的问题:是否有一些关于使用ETag标题的良好做法,或者我可以做我想做的任何事情?
答案 0 :(得分:1)
这种情况经常出现。将资源视为一种层次(即一棵树)通常很自然地将“父母”项目依赖于他们的孩子,而孩子们不一定依赖于他们的父母。更新叶子项目时,即ETag发生变化时,该效果会一直波动到根目录。
一个例子是CardDAV,其中地址簿的“ctag”取决于集合中所有vCard条目的ETag。在这种情况下,ctag没有明确表示为ETag,但它很可能已经存在。