Ce document explique comment utiliser les notifications push pour informer votre application lorsqu'une ressource est modifiée.
Présentation
L'API Google Drive fournit des notifications push qui vous permettent de surveiller les modifications apportées aux ressources. Vous pouvez utiliser cette fonctionnalité pour améliorer les performances de votre application. Elle vous permet d'éliminer les coûts supplémentaires de réseau et de calcul liés à l'interrogation des ressources pour déterminer si elles ont été modifiées. Chaque fois qu'une ressource surveillée est modifiée, l'API Google Drive envoie une notification à votre application.
Pour utiliser les notifications push, vous devez effectuer deux opérations :
Configurer l'URL de réception ou le récepteur de rappel "webhook".
Il s'agit d'un serveur HTTPS qui gère les messages de notification de l'API déclenchés lorsqu'une ressource est modifiée.
Configurer un canal de notification pour chaque point de terminaison de ressource que vous souhaitez surveiller.
Un canal spécifie les informations de routage des messages de notification messages. Lors de la configuration du canal, vous devez identifier l'URL spécifique à laquelle vous souhaitez recevoir les notifications. Chaque fois que la ressource d'un canal est modifiée, l'API Google Drive envoie un message de notification sous forme de
POSTrequête à cette URL.
Actuellement, l'API Google Drive est compatible avec les notifications de modification des méthodes
files et changes.
Créer des canaux de notification
Pour demander des notifications push, vous devez configurer un canal de notification pour chaque ressource que vous souhaitez surveiller. Une fois vos canaux de notification configurés, l'API Google Drive informe votre application lorsque des ressources surveillées sont modifiées.
Envoyer des requêtes de surveillance
Chaque ressource de l'API Google Drive pouvant être surveillée est associée à une méthode
watch au format d'URI suivant :
https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch
Pour configurer un canal de notification pour les messages concernant les modifications apportées à une
ressource spécifique, envoyez une POST requête à la
méthode watch de la ressource.
Chaque canal de notification est associé à un utilisateur et
à une ressource (ou un ensemble de ressources) spécifiques. Une requête watch n'aboutit que si l'utilisateur ou le compte de service actuel possède cette ressource ou est autorisé à y accéder.
Exemples
L'exemple de code suivant montre comment utiliser une ressource channels pour commencer à surveiller les modifications apportées à une seule ressource files à l'aide de la méthode files.watch :
POST https://www.googleapis.com/drive/v3/files/fileId/watch
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json
{
"id": "01234567-89ab-cdef-0123456789ab",
"type": "web_hook",
"address": "https://mydomain.com/notifications",
...
"token": "target=myApp-myFilesChannelDest",
"expiration": 1426325213000
}Dans le corps de la requête, indiquez l'id de votre canal, le type en tant que web_hook et l'URL de réception dans address.
Vous pouvez également fournir les informations suivantes :
- Un
tokenà utiliser comme jeton de canal. - Un délai
expirationen millisecondes pour le délai d'expiration du canal demandé.
L'exemple de code suivant montre comment utiliser une ressource channels pour commencer à surveiller toutes les changes à l'aide de la méthode changes.watch :
POST https://www.googleapis.com/drive/v3/changes/watch
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json
{
"id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a77",
"type": "web_hook",
"address": "https://mydomain.com/notifications",
...
"token": "target=myApp-myChangesChannelDest",
"expiration": 1426325213000
}Dans le corps de la requête, indiquez l'id de votre canal, le type en tant que web_hook et l'URL de réception dans address.
Vous pouvez également fournir les informations suivantes :
- Un
tokenà utiliser comme jeton de canal. - Un délai
expirationen millisecondes pour le délai d'expiration du canal demandé.
Propriétés obligatoires
Pour chaque requête watch, vous devez fournir les champs suivants :
-
Une chaîne de propriété
idqui identifie de manière unique ce nouveau canal de notification dans votre projet. Nous vous recommandons d'utiliser un identifiant unique universel (UUID) ou toute autre chaîne unique similaire. 64 caractères au maximum.La valeur d'ID que vous définissez est renvoyée dans l'
X-Goog-Channel-IdHTTP de chaque message de notification que vous recevez pour ce canal. -
Une chaîne de propriété
typedéfinie sur la valeurweb_hook. -
Une chaîne de propriété
addressdéfinie sur l'URL qui écoute et répond aux notifications de ce canal de notification. Il s'agit de l'URL de rappel de votre webhook, qui doit utiliser le protocole HTTPS.Notez que l'API Google Drive ne peut envoyer des notifications à cette adresse HTTPS que si un certificat SSL valide est installé sur votre serveur Web. Les certificats non valides sont :
- les certificats auto-signés ;
- Certificats signés par une source non fiable
- Certificats révoqués
- Certificats dont le sujet ne correspond pas au nom d'hôte cible
Propriétés facultatives
Vous pouvez également spécifier les champs facultatifs suivants avec votre
watch requête :
-
Une propriété
tokenqui spécifie une valeur de chaîne arbitraire à utiliser comme jeton de canal. Vous pouvez utiliser des jetons de canal de notification à différentes fins. Par exemple, vous pouvez utiliser le jeton pour vérifier que chaque message entrant est destiné à un canal créé par votre application (afin de vous assurer que la notification n'est pas usurpée) ou pour acheminer le message vers la bonne destination dans votre application en fonction de l'objectif de ce canal. Longueur maximale : 256 caractères.Le jeton est inclus dans le
X-Goog-Channel-Tokenen-tête HTTP de chaque message de notification que votre application reçoit pour ce canal.Si vous utilisez des jetons de canal de notification, nous vous recommandons de :
Utiliser un format d'encodage extensible, tel que des paramètres de requête d'URL. Exemple :
forwardTo=hr&createdBy=mobileNe pas inclure de données sensibles telles que des jetons OAuth.
-
Une chaîne de propriété
expirationdéfinie sur un horodatage Unix (en millisecondes) de la date et de l'heure auxquelles vous souhaitez que l'API Google Drive cesse d'envoyer des messages pour ce canal de notification.Si un canal a une date d'expiration, elle est incluse en tant que valeur de l'en-tête
X-Goog-Channel-ExpirationHTTP (au format lisible ) dans chaque message de notification que votre application reçoit pour ce canal.
Pour en savoir plus sur la requête, consultez la watch méthode
pour les files et changes méthodes dans la documentation de référence de l'API.
Réponse de surveillance
Si la watch requête crée un canal de notification, elle renvoie un code d'état HTTP 200 OK.
Le corps du message de la réponse de surveillance fournit des informations sur le canal de notification que vous venez de créer, comme illustré dans l'exemple ci-dessous.
{
"kind": "api#channel",
"id": "01234567-89ab-cdef-0123456789ab",
"resourceId": "o3hgv1538sdjfh",
"resourceUri": "https://www.googleapis.com/drive/v3/files/o3hgv1538sdjfh",
"token": "target=myApp-myFilesChannelDest",
"expiration": 1426325213000
}
Le corps de la réponse fournit des informations sur le canal, telles que :
kind: identifie cette ressource comme un canal d'API.id: ID que vous avez spécifié pour ce canal.resourceId: ID de la ressource surveillée.resourceUri: ID spécifique à la version de la ressource surveillée.token: jeton fourni dans le corps de la requête.expiration: délai d'expiration du canal sous forme d'horodatage Unix en millisecondes.
En plus des propriétés que vous avez envoyées dans votre requête, les
informations renvoyées incluent également resourceId et
resourceUri pour identifier la ressource surveillée sur ce
canal de notification.
Vous pouvez transmettre les informations renvoyées à d'autres opérations de canal de notification, par exemple lorsque vous souhaitez cesser de recevoir des notifications.
Pour en savoir plus sur la réponse, consultez la watch
méthode pour les files et changes méthodes dans la documentation de référence de l'API.
Message de synchronisation
Après avoir créé un canal de notification pour surveiller une ressource, l'
API Google Drive envoie un message sync pour indiquer que les
notifications commencent. La valeur de l'en-tête HTTP X-Goog-Resource-State pour ces messages est sync. En raison de problèmes de synchronisation du réseau, il est possible de recevoir le message sync avant même de recevoir la réponse de la méthode watch.
Vous pouvez ignorer la notification sync, mais vous pouvez
également l'utiliser. Par exemple, si vous décidez de ne pas conserver
le canal, vous pouvez utiliser les valeurs X-Goog-Channel-ID et
X-Goog-Resource-ID dans un appel pour
cesser de recevoir des notifications. Vous pouvez également utiliser la
sync notification pour effectuer une initialisation afin de vous préparer à
des événements ultérieurs.
Le format des messages sync que l'API Google Drive envoie à
votre URL de réception est présenté ci-dessous.
POST https://mydomain.com/notifications // Your receiving URL. X-Goog-Channel-ID: channel-ID-value X-Goog-Channel-Token: channel-token-value X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format. Present only if the channel expires. X-Goog-Resource-ID: identifier-for-the-watched-resource X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource X-Goog-Resource-State: sync X-Goog-Message-Number: 1
Les messages de synchronisation ont toujours une valeur d'en-tête HTTP
X-Goog-Message-Number de 1. Chaque notification suivante pour ce canal a
un numéro de message supérieur au précédent, mais les numéros de message
ne sont pas séquentiels.
Renouveler les canaux de notification
Un canal de notification peut avoir un délai d'expiration, avec une valeur
déterminée par votre requête ou par les limites ou valeurs par défaut internes de l'API Google Drive (la valeur la plus restrictive est utilisée). Le délai d'expiration du canal, s'il en existe un, est inclus en tant qu'horodatage Unix (en millisecondes) dans les informations renvoyées par la méthode watch. De plus, la
date et l'heure d'expiration sont incluses (au format lisible) dans chaque
message de notification que votre application reçoit pour ce canal dans l'
X-Goog-Channel-Expiration en-tête HTTP.
Actuellement, il n'existe aucun moyen automatique de renouveler un canal de notification. Lorsqu'
un canal est sur le point d'expirer, vous devez le remplacer par un nouveau en appelant
la méthode watch. Comme toujours, vous devez utiliser une valeur unique pour
la propriété id du nouveau canal. Notez qu'il existe probablement une période de "chevauchement" pendant laquelle les deux canaux de notification pour la
même ressource sont actifs.
Recevoir des notifications
Chaque fois qu'une ressource surveillée est modifiée, votre application reçoit un
message de notification décrivant la modification. L'API Google Drive envoie ces
messages sous forme de requêtes POST HTTPS à l'URL que vous avez spécifiée comme
address propriété pour ce canal de notification.
Interpréter le format du message de notification
Tous les messages de notification incluent un ensemble d'en-têtes HTTP avec des
X-Goog- préfixes.
Certains types de notifications peuvent également inclure un
corps de message.
En-têtes
Les messages de notification publiés par l'API Google Drive sur votre URL de réception incluent les en-têtes HTTP suivants :
| En-tête | Description |
|---|---|
| Toujours présent | |
|
UUID ou autre chaîne unique que vous avez fournie pour identifier ce canal de notification. |
|
Entier qui identifie ce message pour ce canal de notification
La valeur est toujours 1 pour les messages sync. Les numéros de message
augmentent pour chaque message suivant sur le canal, mais ils ne sont pas séquentiels. |
|
Valeur opaque identifiant la ressource surveillée. Cet ID est stable dans toutes les versions de l'API. |
|
Le nouvel état de la ressource qui a déclenché la notification.
Valeurs possibles : sync, add, remove, update, trash, untrash ou change.
|
|
Identifiant spécifique à la version de l'API pour la ressource surveillée. |
| Parfois présent | |
|
Informations supplémentaires sur les modifications.
Valeurs possibles :
content,
parents,
children, ou
permissions
.
Non fourni avec les messages sync. |
|
Date et heure d'expiration du canal de notification, exprimées au format lisible. Présent uniquement s'il est défini. |
|
Jeton de canal de notification défini par votre application et que vous pouvez utiliser pour vérifier la source de la notification. Présent uniquement s'il est défini. |
Les messages de notification pour files et changes sont vides.
Exemples
Message de notification de modification pour les ressources files, qui n'inclut pas de corps de requête :
POST https://mydomain.com/notifications Content-Type: application/json; utf-8 Content-Length: 0 X-Goog-Channel-ID: 4ba78bf0-6a47-11e2-bcfd-0800200c9a66 X-Goog-Channel-Token: 398348u3tu83ut8uu38 X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT X-Goog-Resource-ID: ret08u3rv24htgh289g X-Goog-Resource-URI: https://www.googleapis.com/drive/v3/files/ret08u3rv24htgh289g X-Goog-Resource-State: update X-Goog-Changed: content,properties X-Goog-Message-Number: 10
Message de notification de modification pour les ressources changes, qui inclut un corps de requête :
POST https://mydomain.com/notifications
Content-Type: application/json; utf-8
Content-Length: 118
X-Goog-Channel-ID: 8bd90be9-3a58-3122-ab43-9823188a5b43
X-Goog-Channel-Token: 245t1234tt83trrt333
X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT
X-Goog-Resource-ID: ret987df98743md8g
X-Goog-Resource-URI: https://www.googleapis.com/drive/v3/changes
X-Goog-Resource-State: changed
X-Goog-Message-Number: 23
{
"kind": "drive#changes"
}Répondre à des notifications
Pour indiquer que l'opération a réussi, vous pouvez renvoyer l'un des codes d'état suivants :
200, 201, 202, 204, ou
102.
Si votre service utilise la bibliothèque cliente de l'API Google
et renvoie 500,502, 503 ou 504, l'API Google Drive
effectue une nouvelle tentative avec un intervalle exponentiel.
Tout autre code d'état renvoyé est considéré comme un échec de message.
Comprendre les événements de notification de l'API Google Drive
Cette section fournit des informations détaillées sur les messages de notification que vous pouvez recevoir lorsque vous utilisez des notifications push avec l'API Google Drive.
| Envoyé lorsque | ||
|---|---|---|
sync |
files, changes |
Un canal a été créé. Vous pouvez vous attendre à commencer à recevoir des notifications pour ce canal. |
add |
files |
Une ressource a été créée ou partagée. |
|
files |
Une ressource existante a été supprimée ou son partage a été annulé. |
|
files |
Une ou plusieurs propriétés (métadonnées) d'une ressource ont été mises à jour. |
|
files |
Une ressource a été placée dans la corbeille. |
|
files |
Une ressource a été supprimée de la corbeille. |
|
changes |
Un ou plusieurs éléments de journal des modifications ont été ajoutés. |
Pour les événements update, l'en-tête HTTP X-Goog-Changed peut être fourni. Cet en-tête contient une liste séparée par des virgules qui décrit les types de modifications qui ont été apportées.
| Type de modification | Indique |
|---|---|
content |
Le contenu de la ressource a été mis à jour. |
properties |
Une ou plusieurs propriétés de la ressource ont été mises à jour. |
parents |
Un ou plusieurs parents de la ressource ont été ajoutés ou supprimés. |
children |
Un ou plusieurs enfants de la ressource ont été ajoutés ou supprimés. |
permissions |
Les autorisations de la ressource ont été mises à jour. |
Exemple avec l'en-tête X-Goog-Changed :
X-Goog-Resource-State: update X-Goog-Changed: content, permissions
Arrêter les notifications
La propriété expiration contrôle le moment où les notifications s'arrêtent automatiquement. Vous pouvez
choisir de cesser de recevoir des notifications pour un canal spécifique avant son
expiration en appelant la méthode stop à
l'URI suivant :
https://www.googleapis.com/drive/v3/channels/stop
Cette méthode nécessite que vous fournissiez au moins les propriétés du canal
id et les resourceId, comme illustré dans l'exemple ci-dessous. Notez que si l'API Google Drive comporte plusieurs types de
ressources dotées de méthodes watch, il n'existe qu'une seule
méthode stop.
Seuls les utilisateurs disposant de l'autorisation appropriée peuvent arrêter un canal. En particulier :
- Si le canal a été créé par un compte utilisateur standard, seul le même utilisateur du même client (identifié par les ID client OAuth 2.0 des jetons d'authentification) qui a créé le canal peut l'arrêter.
- Si le canal a été créé par un compte de service, n'importe quel utilisateur du même client peut l'arrêter.
L'exemple de code suivant montre comment cesser de recevoir des notifications :
POST https://www.googleapis.com/drive/v3/channels/stop
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json
{
"id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66",
"resourceId": "ret08u3rv24htgh289g"
}