ETag使用和资源修改
ETag usage and resources modification
上下文
我有2个资源-这是一个例子,不要注意它的相关性-link合在一起:
/customers/{id}
提供有关客户的年龄、性别、名字等信息。
/customers/{id}/age
对应客户的年龄属性。对于性能问题,此资源存在。为了符合 HATEOAS 约束,/customers/{id}
资源提供了 link。
问题
应用程序可以在 /customers/{id}
或 /customers/{id}/age
资源上使用 PUT 执行更新。
由于年龄属性与两种资源相关,因此可以通过两种不同的方式执行年龄更新,从而导致冲突。
所以 ETag 似乎是解决我问题的灵丹妙药 ;-)!
问题
此示例的两个更一般的问题:
- 资源的更新是否会导致将此资源的 ETag(显而易见)和修改为其他资源?
在我的示例中,资源
/customers/{id}/age
的更新修改了两个资源的 etag。这个和 /customers/{id}
.
- ETag的修改可以是有条件的吗?
我的意思是,如果应用程序在更新
/customers/{id}
资源时只修改 firstName 而不是年龄,我不想更新 /customers/{id}/age
资源的 ETag。
一个更普遍的问题:关于使用 ETag header 是否有一些好的做法,或者我可以做任何我想做的事情?
这种情况经常出现。将资源视为层次结构(即树)通常很自然,其中 'parent' 项依赖于它们的子项,而子项不一定依赖于它们的父项。当叶项更新时,即 ETag 发生变化时,该效果会一直波及到根。
一个例子是 CardDAV,其中地址簿有一个 "ctag",它依赖于集合中所有 vCard 条目的 ETag。在这种情况下,ctag 没有明确表示为 ETag,但它很可能是。
上下文
我有2个资源-这是一个例子,不要注意它的相关性-link合在一起:
/customers/{id}
提供有关客户的年龄、性别、名字等信息。/customers/{id}/age
对应客户的年龄属性。对于性能问题,此资源存在。为了符合 HATEOAS 约束,/customers/{id}
资源提供了 link。
问题
应用程序可以在 /customers/{id}
或 /customers/{id}/age
资源上使用 PUT 执行更新。
由于年龄属性与两种资源相关,因此可以通过两种不同的方式执行年龄更新,从而导致冲突。 所以 ETag 似乎是解决我问题的灵丹妙药 ;-)!
问题
此示例的两个更一般的问题:
- 资源的更新是否会导致将此资源的 ETag(显而易见)和修改为其他资源?
在我的示例中,资源
/customers/{id}/age
的更新修改了两个资源的 etag。这个和/customers/{id}
. - ETag的修改可以是有条件的吗?
我的意思是,如果应用程序在更新
/customers/{id}
资源时只修改 firstName 而不是年龄,我不想更新/customers/{id}/age
资源的 ETag。
一个更普遍的问题:关于使用 ETag header 是否有一些好的做法,或者我可以做任何我想做的事情?
这种情况经常出现。将资源视为层次结构(即树)通常很自然,其中 'parent' 项依赖于它们的子项,而子项不一定依赖于它们的父项。当叶项更新时,即 ETag 发生变化时,该效果会一直波及到根。
一个例子是 CardDAV,其中地址簿有一个 "ctag",它依赖于集合中所有 vCard 条目的 ETag。在这种情况下,ctag 没有明确表示为 ETag,但它很可能是。