Я работаю с веб-сервисом ReSTful, который предоставляет версионный ресурс. Меня устраивает, как это работает, но у меня есть вопрос pedanti c о «лучшем» способе обработки запросов на последнюю версию ресурса с низкой задержкой.
Старые версии ресурса можно получить с помощью версия как в
/resource/{version}
Старые версии никогда не меняются. Это постоянная ссылка . Поэтому я могу вернуть контроль кэша: неизменный согласно https://tools.ietf.org/html/rfc8246 и максимальный возраст 1 год (согласно { ссылка })
Последняя версия ресурса доступна как по идентификатору версии, так и по специальному URL-адресу «последней» (в котором не указывается версия):
/resource
Ресурс не является неизменным вечно ( кто-то может загрузить новую версию), но мы вернули конкретную версию.
Все, что мы можем сказать о последней версии, это то, что более новая версия не была загружена с некоторого времени X . Поэтому я могу установить max-age в зависимости от X и текущего времени.
GET /resource
- Возвращает то же содержимое, что и / resource / {version} для последней версии
- Включает ссылку на заголовок self отношение, указывающее на / resource / {version}
- Каждый результат также имеет последнее изменение и etag заголовков.
Q Правильно ли это отношение "я"? (альтернативой будет / resource, который запрашивает агент и всегда указывает последнюю версию)? Я думаю, что «cache-control: immutable» является правильным в любом случае?
cache-control: max-age может быть основан на X для последней или может быть навсегда (1 год) для старой версии. Что является более правильным?
Для добавления грязи в воду существует также каноническое в качестве возможной альтернативы "себе".
Я ожидаю, что самый распространенный запрос будет для последней версии ресурса. Так что, если бы мы потрудились использовать cache-control: immutable в любом месте, это было бы наиболее ценно здесь.
Смежный вопрос задается запросом последней версии ресурса, которая является наиболее правильный и / или эффективный способ перенаправления на текущую неизменяемую версию?
Использование 303 «видеть другое» кажется более правильным, но будет включать в себя две поездки для каждого запроса, а не возвращать последнюю версию напрямую, как в настоящий момент. Используемый здесь подход больше похож на перезапись URL В принципе я стремлюсь к сервису с низкой задержкой.
Сервис работает, но я хотел бы сделать его педантично правильным и так хорошо продумано, насколько это возможно. Как будто был RF C для доступа ReSTful к версионным ресурсам. Я приветствую любую конструктивную критику.
Единственный актуальный вопрос, который я нашел здесь:
{ ссылка }, где рекомендуется временное перенаправление.
Я искал несколько веб-сайтов для вдохновения, например:
Википедия использует: Cache-Control: private, s-maxage = 0, max-age = 0, must-revalidate для последней версии страницы и даже старых версий, которые имеют постоянные ссылки и могут быть неизменными
stackoverflow, кажется, использует "cache-control: private" для все
Эта страница показывает, что неизменный используется в дикой природе. Я не нашел ничего обсуждающего его использование в веб-сервисах.