Как использовать ETag в YouTube API

По-видимому, мы можем использовать ETag, чтобы увидеть, был ли канал / плейлист обновлен или нет на основе следующего утверждения из их документации:

когда ваше приложение снова запрашивает сохраненный ресурс, оно указывает ETag, связанный с этим ресурсом. Если ресурс изменился, API возвращает измененный ресурс и ETag, связанный с этой версией ресурса. Если ресурс не изменился, API возвращает ответ HTTP 304 (не изменен), который указывает, что ресурс не изменился.

Но я попытался получить данные канала, которые не меняются, но после обновления пару раз кажется, что ETag переходит к другим значениям!

1 ответ

Вы не можете просто снова попасть в конечную точку и сравнить значения etag; скорее, вы должны сделать запрос, сохранить значение etag, а затем передать это значение etag с последующими запросами. Вы сделаете это с помощью заголовка запроса... установите в заголовке HTTP "If-None-Match" значение вашего etag. Если ничего не изменилось, вы получите 304 (вместо любого контента или метаданных). Если что-то изменилось, вы получите новый результат, и вы возьмете этот новый etag и сохраните его вместо старого.

Клиент Google API для Javascript поддерживает этот заголовок; когда вы создаете свой объект gapi.client.request, вы передаете объект для аргументов; одним из параметров этого объекта является 'headers', в котором вы можете установить 'If-None-Match' равным etag, который вы хотите проверить.

(Также обратите внимание, что есть заголовок "If-Match", который также может работать с etags, где он будет возвращать контент только в том случае, если ресурс тот же, что вы запрашивали ранее... вероятно, не так много варианты использования для этого, но он существует и поддерживается.)

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