Я разрабатываю веб-сервис RESTful и пытаюсь найти хороший способ управления кэшированием и синхронизацией коллекций элементов.Я читал об использовании заголовков Etag и If-None-Match для оптимизации кэширования отдельных ресурсов, и мне интересно, могут ли они (или должны) использоваться для коллекций.
I 'Меня интересуют ваши отзывы о следующем подходе:
- Набор элементов представлен на URI http://foobar.com/items
- Клиент, делающий начальный запрос GET на этот URI, не будетзаголовок If-None-Match.В этом случае сервер возвращает все элементы (или некоторую сумму по усмотрению сервера, скажем, самые последние N элементов).Ответ содержит заголовок Etag, указывающий «тиковый штамп», который представляет текущее псевдо-время псевдо-часов сервера (например, некоторый счетчик, который увеличивается каждый раз, когда происходит изменение в данных).
- Клиент кэширует возвращенные элементы.
- При последующих запросах GET клиент включает ранее полученное значение Etag в свой заголовок If-None-Match.Сервер проверяет, есть ли у него какие-либо элементы, более новые, чем заголовок If-None-Match, и, если это так, возвращает ТОЛЬКО более новые элементы.В противном случае он возвращает статус 304 («не изменен») и никаких элементов.
Вопрос - я подрываю семантическое значение GET, возвращая только новые элементы в # 4, а невся коллекция (которая будет включать элементы, уже кэшированные на клиенте)?Или это похоже на разумный подход?Можете ли вы предложить альтернативные подходы, которые были бы лучше?
Заранее спасибо.