О чем должен помнить потребитель фида атомов событий RESTful?
Я исследую каналы Atom как способ распространения данных о событиях в рамках внутренних REST API нашей организации. Я могу контролировать каналы и обеспечить:
- есть "головной" канал, содержащий упорядоченные по времени события с тегом etag, который обновляется при изменении канала (и короткие заголовки кэша).
- Существуют "архивные" каналы, содержащие более старые события с фиксированным etag (и длинными заголовками кэша).
- события помечены и неизменны, то есть произошли и не могут измениться.
Вопрос в том, что должен помнить потребитель, чтобы быть уверенным, что он всегда синхронизируется с самыми последними данными, без двойной обработки событий?
- Последний etag это обработал?
- Отметка времени последнего обработанного события?
Я полагаю, это нужно как? Этаг эффективно запрашивает фид, были ли какие-либо изменения (с использованием HTTP If-None-Match) и, если да, то используйте метку даты, чтобы применить только те изменения из этого обновленного фида, которые еще не были обработаны...
Вопрос не имеет ничего общего с REST или технологией, используемой для потребления корма. Например, для любого, кто пишет код, нужно использовать программу чтения RSS-каналов на основе Atom.
ОБНОВИТЬ
Подумайте об этом - некоторые события могут иметь одинаковую метку времени, поскольку они "обнаруживаются" в одно и то же время в пакетах. Тогда потребителю может быть неудобно полагаться на метку времени последнего успешно обработанного события, если его обработка умирает на полпути от обработки пакета с той же меткой времени... Вот почему я ненавижу метки времени!
В таком случае нужно ли каналу отправлять идентификатор с каждым событием, которое должен запомнить потребитель? Разве этот идентификатор не должен увеличиваться до бесконечности и никогда не будет сброшен? Какие есть альтернативы?
1 ответ
Ваши события должны все иметь уникальный идентификатор. Клиент должен отслеживать эти идентификаторы, и этого достаточно для предотвращения двойной обработки.
В таком случае нужно ли каналу отправлять идентификатор с каждым событием, которое должен запомнить потребитель?
Да. atom:entry
требуется иметь atom:id
это уникально. Если ваши события неизменны, уникальность идентификатора достаточно. Как правило, записи не обязательно должны быть неизменными. atom:updated
содержит последнее существенное изменение:
самый последний момент времени, когда запись или канал были изменены таким образом, что издатель считает значительным
Таким образом, общий клиент должен был бы рассмотреть пару id
а также updated
,