RESTful事件原子提要的消费者必须记住什么?

时间:2014-07-21 23:15:56

标签: rest caching atom-feed etag atompub

我正在研究Atom提要,作为将事件数据作为我们组织的内部REST API的一部分进行分发的一种方式。我可以控制Feed并确保:

  • 有一个"头"包含时间排序事件的Feed,其中包含etag,如果Feed更改(以及短缓存标头),则会更新。
  • 有"存档"包含具有固定etag(以及长缓存标头)的旧事件的订阅源。
  • 事件是带时间戳和不可变的,即它们发生了并且无法改变。

问题是,消费者必须记得在任何时候确保与最新数据同步,没有事件的双重处理?

  1. 它处理的最后一个etag?
  2. 处理的最后一个事件的时间戳?
  3. 我想它需要两者兼而有之? etag有效地询问Feed是否有任何更改(使用HTTP If-None-Match),如果是,则使用日期戳仅应用已更新的Feed中的更改已经处理......

    问题与REST或用于使用Feed的技术无关。例如,它适用于编写代码以使用基于Atom的RSS提要阅读器的任何人。

    更新

    考虑一下 - 某些事件可能具有相同的时间戳,因为它们会被检测到"同时分批进行。然后让消费者依赖成功处理的最后一个事件的时间戳可能会很尴尬,以防它的处理在处理具有相同时间戳的批处理中途中断...这就是我讨厌时间戳的原因!

    在这种情况下,Feed是否需要为消费者必须记住的每个事件发送一个id?那个id不会增加到永恒,永远不会被重置吗?有哪些替代方案?

1 个答案:

答案 0 :(得分:1)

您的活动都应带有唯一的ID。客户需要跟踪这些ID,并且足以防止双重处理。

  

在这种情况下,Feed是否需要为消费者必须记住的每个事件发送一个id?

是。 atom:entry必须具有唯一的atom:id。如果您的事件是不可变的,则ID的唯一性就足够了。通常,条目不需要是不可变的。 atom:updated包含最后一次重大更改:

  

最多     在某种程度上修改条目或订阅源的最近时刻     出版商认为重要

因此,一般客户需要考虑idupdated对。