Поддерживает ли youtube api v3/search etags?

Я пытаюсь использовать etags, чтобы уменьшить пропускную способность и использование квот, но /search возвращает новый etag, даже когда ничего не изменилось. Он также по-прежнему отправляет содержимое, если я укажу предыдущий etag в заголовке.

Это поддерживается для этого вызова API или я, вероятно, делаю что-то не так?

1 ответ

Решение

Этаги поддерживаются YouTube, но это зависит от того, какие данные вы запрашиваете

ETags, стандартная часть протокола HTTP, позволяет приложениям ссылаться на конкретную версию определенного ресурса API. Ресурсом может быть весь канал или элемент в этом канале. Эта функция поддерживает следующие варианты использования:

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

Клиентские библиотеки для API Google отличаются поддержкой ETags. Например, клиентская библиотека JavaScript поддерживает ETag через белый список для разрешенных заголовков запросов, который включает в себя If-Match и If-None-Match. Белый список позволяет выполнять обычное кэширование в браузере, поэтому если ETag ресурса не изменился, ресурс можно обслуживать из кэша браузера. Клиент Obj-C, с другой стороны, не поддерживает ETag. Защита от непреднамеренного перезаписи изменений - ETag помогает гарантировать, что несколько клиентов API не будут непреднамеренно перезаписывать изменения друг друга. При обновлении или удалении ресурса ваше приложение может указать ETag ресурса. Если ETag не совпадает с самой последней версией этого ресурса, запрос API завершается неудачно.

Использование ETag в вашем приложении дает несколько преимуществ:

API быстрее реагирует на запросы кешированных, но неизмененных ресурсов, обеспечивая более низкую задержку и более низкое использование полосы пропускания. Ваше приложение не будет непреднамеренно перезаписывать изменения в ресурсе, которые были сделаны из другого клиента API.

https://developers.google.com/youtube/v3/getting-started

Я обычно очищаю Youtube для поиска видео и просто сохраняю тот Etag, который он возвращает. Чтобы использовать etag, создайте запрос заголовка и поместите "If-None-Match" равным вашему значению etag. Обратите внимание, что это должен быть заголовок запроса, а не добавленный к вызову конечной точки. Вы также можете использовать "If-Match".

В зависимости от того, какой API вы используете, способ вставки нового значения в заголовок запроса может немного отличаться

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