2016-02-12 1 views
1

J'essaie d'utiliser etags afin de réduire à la fois ma bande passante et mon utilisation de quota mais/search renvoie un nouvel etag même si rien n'a changé. Il envoie également le contenu si je spécifie l'etag précédent dans l'en-tête.Est-ce que le youtube api v3/search prend en charge etags?

Est-il pris en charge pour cet appel API ou suis-je probablement faire quelque chose de mal?

Répondre

1

Etags sont pris en charge par YouTube, mais cela dépend de quel type de données que vous demandez

ETags, une partie standard du protocole HTTP, permettent aux applications de se référer à une version spécifique d'une ressource API particulière. La ressource peut être un flux entier ou un élément de ce flux. Cette fonctionnalité prend en charge les cas d'utilisation suivants:

Mise en cache et récupération conditionnelle - Votre application peut mettre en cache les ressources API et leurs fichiers ETags. Ensuite, lorsque votre application demande à nouveau une ressource stockée , elle spécifie l'ETag associée à cette ressource . Si la ressource a été modifiée, l'API renvoie la ressource modifiée et l'ETag associée à cette version de la ressource. Si la ressource n'a pas changé, l'API renvoie une réponse HTTP 304 (non modifiée), qui indique que la ressource n'a pas été modifiée. Votre application peut réduire la latence et l'utilisation de la bande passante en servant des ressources mises en cache de cette manière.

Les bibliothèques client pour les API Google diffèrent dans leur prise en charge de ETags. Par exemple, la bibliothèque cliente JavaScript prend en charge ETags via une liste blanche pour les en-têtes de requête autorisés comprenant If-Match et If-None-Match. La liste blanche permet à la mise en cache normale du navigateur de se produire si que si l'ETag d'une ressource n'a pas changé, la ressource peut être servie à partir du cache du navigateur. D'autre part, le client Obj-C ne prend pas en charge les ETags. Protection contre les remplacements par inadvertance de modifications - ETags permet de s'assurer que plusieurs clients API ne suppriment pas par inadvertance les modifications mutuelles. Lors de la mise à jour ou de la suppression d'une ressource, votre application peut spécifier l'ETag de la ressource. Si l'ETag ne correspond pas à la version la plus récente de cette ressource, la demande d'API échoue.

L'utilisation ETags dans votre application offre plusieurs avantages:

L'API répond plus rapidement aux demandes de ressources mises en cache, mais sans changement, donnant une latence plus faible et plus faible utilisation de la bande passante. Votre application ne remplacera pas par inadvertance les modifications apportées à une ressource qui ont été créées à partir d'un autre client API.

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

J'érafle habituellement YouTube pour les vidéos recherches et je stocke juste eTag qu'il revienne. Pour utiliser l'etag, créez une requête d'en-tête et mettez "If-None-Match" égal à votre valeur etag. Notez que cela doit être un en-tête de requête et non ajouté à l'appel de noeud final. Vous pouvez également utiliser "If-Match".

Selon quel type d'API que vous utilisez, la façon d'insérer une nouvelle valeur à l'en-tête de demande peuvent différer légèrement

+0

S'il n'y avait pas de changement sur le jeu de résultats, Youtube émettra une erreur 304 et retour wont n'importe quels résultats (sur mon cas) et si quelque chose a été changé sur l'ensemble de résultats, il renverra tout ce qui correspond à la requête précédente. – Vhortex

+0

Je passais un en-tête intitulé "Etag" de ma fin, je ne me suis pas rendu compte qu'il devait envoyer l'etag en utilisant "If-None-Match" à la place. Merci pour l'aide! – WinterDev