1

Очевидно, мы можем использовать ETags, чтобы увидеть, если канал/воспроизведение было обновлено или не основано на следующее заявлении от their documentation:Как использовать ETags в YouTube API

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

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

+0

Покажите нам свой код, с которым вы тестируете это. – idbehold

+0

@idbehold Я просто вызываю конечную точку прямо в своем браузере! – user385729

+0

И что конечная точка? – idbehold

ответ

2

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

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

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

+0

Большое спасибо за разъяснение! Но я считаю, что этаг не должен переворачиваться между двумя цифрами случайным образом! Не думаете ли вы, что это ошибка в API YouTube? «If-None-Match» делает именно то, что я делаю, но более эффективным способом, который не показывает результат, если результат не был изменен, но все же он использует etag, который случайным образом переворачивается между двумя числами, независимо от того, был изменен или нет ... – user385729

+1

Этак просто представляет состояние запроса; нет ничего, что говорит, что несколько etags не могут представлять одно и то же состояние. Но если заданное состояние изменяется, то любые etags, которые представляют это состояние, будут признаны недействительными. (Что касается того, почему они могут использовать несколько etags для одного и того же состояния, я могу только предположить ... это может быть производительность, например, связанная с различными серверами кеширования. Или что-то еще полностью.) – jlmcdonald

Смежные вопросы