О чем должен помнить потребитель фида атомов событий RESTful?

Я исследую каналы Atom как способ распространения данных о событиях в рамках внутренних REST API нашей организации. Я могу контролировать каналы и обеспечить:

  • есть "головной" канал, содержащий упорядоченные по времени события с тегом etag, который обновляется при изменении канала (и короткие заголовки кэша).
  • Существуют "архивные" каналы, содержащие более старые события с фиксированным etag (и длинными заголовками кэша).
  • события помечены и неизменны, то есть произошли и не могут измениться.

Вопрос в том, что должен помнить потребитель, чтобы быть уверенным, что он всегда синхронизируется с самыми последними данными, без двойной обработки событий?

  1. Последний etag это обработал?
  2. Отметка времени последнего обработанного события?

Я полагаю, это нужно как? Этаг эффективно запрашивает фид, были ли какие-либо изменения (с использованием HTTP If-None-Match) и, если да, то используйте метку даты, чтобы применить только те изменения из этого обновленного фида, которые еще не были обработаны...

Вопрос не имеет ничего общего с REST или технологией, используемой для потребления корма. Например, для любого, кто пишет код, нужно использовать программу чтения RSS-каналов на основе Atom.

ОБНОВИТЬ

Подумайте об этом - некоторые события могут иметь одинаковую метку времени, поскольку они "обнаруживаются" в одно и то же время в пакетах. Тогда потребителю может быть неудобно полагаться на метку времени последнего успешно обработанного события, если его обработка умирает на полпути от обработки пакета с той же меткой времени... Вот почему я ненавижу метки времени!

В таком случае нужно ли каналу отправлять идентификатор с каждым событием, которое должен запомнить потребитель? Разве этот идентификатор не должен увеличиваться до бесконечности и никогда не будет сброшен? Какие есть альтернативы?

1 ответ

Ваши события должны все иметь уникальный идентификатор. Клиент должен отслеживать эти идентификаторы, и этого достаточно для предотвращения двойной обработки.

В таком случае нужно ли каналу отправлять идентификатор с каждым событием, которое должен запомнить потребитель?

Да. atom:entry требуется иметь atom:id это уникально. Если ваши события неизменны, уникальность идентификатора достаточно. Как правило, записи не обязательно должны быть неизменными. atom:updated содержит последнее существенное изменение:

самый последний момент времени, когда запись или канал были изменены таким образом, что издатель считает значительным

Таким образом, общий клиент должен был бы рассмотреть пару id а также updated,

Другие вопросы по тегам