In diesem Dokument wird beschrieben, wie Sie Push-Benachrichtigungen verwenden, um Ihre Anwendung über Änderungen an einer Ressource zu informieren.
Übersicht
Die Google Drive API bietet Push-Benachrichtigungen, mit denen Sie Änderungen an Ressourcen verfolgen können. Mit dieser Funktion können Sie die Leistung Ihrer Anwendung verbessern. Sie können die zusätzlichen Netzwerk- und Rechen kosten vermeiden, die beim Abrufen von Ressourcen anfallen, um festzustellen, ob sie sich geändert haben. Wenn sich eine überwachte Ressource ändert, benachrichtigt die Google Drive API Ihre Anwendung.
Um Push-Benachrichtigungen zu verwenden, müssen Sie zwei Dinge tun:
Richten Sie Ihre Empfangs-URL oder den Webhook-Callback-Empfänger ein.
Dies ist ein HTTPS-Server, der die API-Benachrichtigungen verarbeitet, die ausgelöst werden, wenn sich eine Ressource ändert.
Richten Sie für jeden Ressourcenendpunkt, den Sie überwachen möchten , einen Benachrichtigungskanal ein.
Ein Kanal gibt Routinginformationen für Benachrichtigungen Nachrichten an. Im Rahmen der Kanaleinrichtung müssen Sie die URL angeben, an die Sie Benachrichtigungen erhalten möchten. Wenn sich die Ressource eines Kanals ändert, sendet die Google Drive API eine Benachrichtigung als
POSTAnfrage an diese URL.
Derzeit unterstützt die Google Drive API Benachrichtigungen für Änderungen an
den files und changes Methoden.
Benachrichtigungskanäle erstellen
Wenn Sie Push-Benachrichtigungen anfordern möchten, müssen Sie für jede Ressource, die Sie überwachen möchten, einen Benachrichtigungskanal einrichten. Nachdem Sie Ihre Benachrichtigungskanäle eingerichtet haben , informiert die Google Drive API Ihre Anwendung, wenn sich eine überwachte Ressource ändert.
Überwachungsanfragen stellen
Jeder überwachbaren Google Drive API-Ressource ist eine
watch Methode mit einem URI im folgenden Format zugeordnet:
https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch
Wenn Sie einen Benachrichtigungskanal für Nachrichten zu Änderungen an einer
bestimmten Ressource einrichten möchten, senden Sie eine POST Anfrage an die
watch Methode für die Ressource.
Jeder Benachrichtigungskanal ist sowohl einem bestimmten Nutzer als auch
einer bestimmten Ressource (oder einer Reihe von Ressourcen) zugeordnet. Eine watch Anfrage ist nur erfolgreich, wenn der aktuelle Nutzer oder das aktuelle Dienstkonto Inhaber dieser Ressource ist oder die Berechtigung hat, darauf zuzugreifen.
Beispiele
Das folgende Codebeispiel zeigt, wie Sie mit einer channels-Ressource die Überwachung von Änderungen an einer einzelnen files-Ressource mit der Methode files.watch starten:
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
}Geben Sie im Anfragetext die id Ihres Kanals, den type als web_hook und Ihre Empfangs-URL in address an.
Optional können Sie auch Folgendes angeben:
- Ein
token, das als Kanal-Token verwendet werden soll. - Eine
expiration-Zeit in Millisekunden für die gewünschte Ablaufzeit des Kanals.
Das folgende Codebeispiel zeigt, wie Sie mit einer channels-Ressource die Überwachung aller changes mit der Methode changes.watch starten:
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
}Geben Sie im Anfragetext die id Ihres Kanals, den type als web_hook und Ihre Empfangs-URL in address an.
Optional können Sie auch Folgendes angeben:
- Ein
token, das als Kanal-Token verwendet werden soll. - Eine
expiration-Zeit in Millisekunden für die gewünschte Ablaufzeit des Kanals.
Erforderliche Attribute
Bei jeder watch-Anfrage müssen Sie die folgenden Felder angeben:
-
Ein
idAttributstring, der diesen neuen Benachrichtigungskanal in Ihrem Projekt eindeutig identifiziert. Wir empfehlen, eine universell eindeutige ID (UUID) oder einen ähnlichen eindeutigen String zu verwenden. Maximale Länge: 64 Zeichen.Der von Ihnen festgelegte ID-Wert wird im
X-Goog-Channel-IdHTTP-Header jeder Benachrichtigung wiedergegeben, die Sie für diesen Kanal erhalten. -
Ein
typeAttributstring, der auf den Wertweb_hookfestgelegt ist. -
Ein
address-Attributstring, der auf die URL festgelegt ist, die Benachrichtigungen für diesen Benachrichtigungskanal empfängt und darauf reagiert. Dies ist Ihre Webhook-Callback-URL und sie muss HTTPS verwenden.Die Google Drive API kann nur dann Benachrichtigungen an diese HTTPS-Adresse senden, wenn auf Ihrem Webserver ein gültiges SSL-Zertifikat installiert ist. Folgende Zertifikate sind nicht gültig:
- selbst signierte Zertifikate.
- von einer nicht vertrauenswürdigen Quelle signierte Zertifikate
- gesperrte Zertifikate.
- Zertifikate, deren Betreff nicht mit dem Ziel hostname übereinstimmt.
Optionale Attribute
Sie können auch die folgenden optionalen Felder in Ihre
watch Anfrage aufnehmen:
-
Ein
tokenAttribut, das einen beliebigen Stringwert angibt, der als Kanal-Token verwendet werden soll. Sie können Benachrichtigungskanal Tokens für verschiedene Zwecke verwenden. Sie können das Token beispielsweise verwenden, um zu prüfen, ob jede eingehende Nachricht für einen Kanal bestimmt ist, den Ihre Anwendung erstellt hat. So lässt sich sicherstellen, dass die Benachrichtigung nicht gefälscht ist. Außerdem können Sie die Nachricht basierend auf dem Zweck dieses Kanals an das richtige Ziel in Ihrer Anwendung weiterleiten. Maximale Länge: 256 Zeichen.Das Token ist im
X-Goog-Channel-TokenHTTP-Header jeder Benachrichtigung enthalten, die Ihre Anwendung für diesen Kanal erhält.Wenn Sie Benachrichtigungskanal-Tokens verwenden, empfehlen wir Folgendes:
Verwenden Sie ein erweiterbares Codierungsformat wie URL-Abfrage parameter. Beispiel:
forwardTo=hr&createdBy=mobileNehmen Sie keine vertraulichen Daten wie OAuth-Tokens auf.
-
Ein
expiration-Attributstring, der auf einen Unix-Zeitstempel (in Millisekunden) des Datums und der Uhrzeit festgelegt ist, zu dem die Google Drive API keine Nachrichten mehr für diesen Benachrichtigungskanal senden soll.Wenn ein Kanal eine Ablaufzeit hat, ist sie als Wert des
X-Goog-Channel-ExpirationHTTP-Headers (in einem für Menschen lesbaren Format) in jeder Benachrichtigung enthalten, die Ihre Anwendung für diesen Kanal erhält.
Weitere Informationen zur Anfrage finden Sie in der watch Methode
für die files und changes Methoden in der API-Referenz.
Antwort auf die Überwachungsanfrage
Wenn mit der watch Anfrage ein Benachrichtigung
Kanal erstellt wird, wird der HTTP-Statuscode 200 OK zurückgegeben.
Der Inhalt der Nachricht der Antwort auf die Überwachungsanfrage enthält Informationen zum gerade erstellten Benachrichtigungskanal, wie im folgenden Beispiel zu sehen ist.
{
"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
}
Der Antworttext enthält Details zum Kanal, z. B.:
kind: Gibt an, dass es sich um eine API-Kanalressource handelt.id: Die ID, die Sie für diesen Kanal angegeben haben.resourceId: Die ID der überwachten Ressource.resourceUri: Die versionsspezifische ID der überwachten Ressource.token: Das im Anfragetext angegebene Token.expiration: Die Ablaufzeit des Kanals als Unix-Zeitstempel in Millisekunden.
Zusätzlich zu den Attributen, die Sie als Teil Ihrer Anfrage gesendet haben, enthalten die
zurückgegebenen Informationen auch resourceId und
resourceUri um die Ressource zu identifizieren, die auf diesem
Benachrichtigungskanal überwacht wird.
Weitere Informationen zur Antwort finden Sie in der API-Referenz unter der watch
Methode für die files und changes Methoden.
Synchronisierungsnachricht
Nachdem Sie einen Benachrichtigungskanal zum Überwachen einer Ressource erstellt haben, sendet die
Google Drive API eine sync Nachricht, um anzugeben, dass
Benachrichtigungen gesendet werden. Der Wert des HTTP
Headers für diese Nachrichten ist sync.X-Goog-Resource-State Aufgrund von Netzwerk
Timing-Problemen kann es vorkommen, dass Sie die sync Nachricht
erhalten, bevor Sie die watch Methodenantwort erhalten.
Sie können die sync-Benachrichtigung ignorieren, aber Sie können
sie auch verwenden. Wenn Sie beispielsweise den Kanal nicht behalten möchten, können Sie die Werte X-Goog-Channel-ID und X-Goog-Resource-ID in einem Aufruf verwenden, um den Empfang von Benachrichtigungen zu beenden. Sie können die
sync Benachrichtigung auch verwenden, um einige Initialisierungen vorzunehmen, um sich auf
spätere Ereignisse vorzubereiten.
Das Format von sync Nachrichten, die die Google Drive API an
Ihre Empfangs-URL sendet, ist unten dargestellt.
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
`sync`-Nachrichten haben immer den X-Goog-Message-Number HTTP
Headerwert von 1. Jede nachfolgende Benachrichtigung für diesen Kanal hat eine Nachrichtennummer, die größer als die vorherige ist. Die Nachrichtennummern sind jedoch nicht fortlaufend.
Benachrichtigungskanäle verlängern
Ein Benachrichtigungskanal kann eine Ablaufzeit haben, deren Wert
entweder durch Ihre Anfrage oder durch interne Limits
oder Standardwerte der Google Drive API bestimmt wird (der restriktivere Wert wird verwendet). Die Ablaufzeit des Kanals, falls vorhanden, ist als Unix-Zeitstempel (in Millisekunden) in den von der watch Methode zurückgegebenen Informationen enthalten. Außerdem sind das
Ablaufdatum und die ‑zeit (in einem für Menschen lesbaren Format) in jeder
Benachrichtigung enthalten, die Ihre Anwendung für diesen Kanal erhält. Sie finden sie im
X-Goog-Channel-Expiration HTTP-Header.
Derzeit gibt es keine automatische Möglichkeit, einen Benachrichtigungskanal zu verlängern. Wenn
ein Kanal bald abläuft, müssen Sie ihn durch einen neuen ersetzen, indem Sie die watch Methode aufrufen. Wie immer müssen Sie für
das id Attribut des neuen Kanals einen eindeutigen Wert verwenden. Beachten Sie, dass es wahrscheinlich
einen Zeitraum geben wird, in dem die beiden Benachrichtigungskanäle für dieselbe Ressource aktiv sind.
Benachrichtigungen erhalten
Wenn sich eine überwachte Ressource ändert, erhält Ihre Anwendung eine
Benachrichtigung, in der die Änderung beschrieben wird. Die Google Drive API sendet diese
Nachrichten als HTTPS-POST Anfragen an die URL, die Sie als das
address Attribut für diesen Benachrichtigungs
Kanal angegeben haben.
Format der Benachrichtigung interpretieren
Alle Benachrichtigungen enthalten eine Reihe von HTTP-Headern mit dem
X-Goog- Präfix.
Einige Arten von Benachrichtigungen können auch einen
Nachrichtentext enthalten.
Header
Benachrichtigungen, die von der Google Drive API an Ihre Empfangs- URL gesendet werden, enthalten die folgenden HTTP-Header:
| Header | Beschreibung |
|---|---|
| Immer vorhanden | |
|
UUID oder anderer eindeutiger String, den Sie zur Identifizierung dieses Benachrichtigungskanals angegeben haben. |
|
Ganzzahl, die diese Nachricht für diesen Benachrichtigungskanal identifiziert. Der Wert ist für sync-Nachrichten immer 1. Nachrichtennummern werden für jede nachfolgende Nachricht im Kanal erhöht, sind aber nicht fortlaufend. |
|
Ein intransparenter Wert, der die überwachte Ressource identifiziert. Diese ID ist über API-Versionen hinweg stabil. |
|
Der neue Ressourcenstatus, der die Benachrichtigung ausgelöst hat.
Mögliche Werte:
sync, add, remove, update,
trash, untrash, oder change
.
|
|
Eine API-versionsspezifische ID für die überwachte Ressource. |
| Manchmal vorhanden | |
|
Zusätzliche Details zu den Änderungen.
Mögliche Werte:
content,
parents,
children oder
permissions
.
Wird nicht mit sync-Nachrichten bereitgestellt. |
|
Datum und Uhrzeit des Ablaufs des Benachrichtigungskanals in einem für Menschen lesbaren Format. Nur vorhanden, wenn definiert. |
|
Benachrichtigungskanal-Token, das von Ihrer Anwendung festgelegt wurde und mit dem Sie die Benachrichtigungsquelle überprüfen können. Nur vorhanden, wenn definiert. |
Benachrichtigungen für files und changes sind leer.
Beispiele
Benachrichtigung für Änderungen an files-Ressourcen, die keinen Anfragetext enthält:
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
Benachrichtigung für Änderungen an changes-Ressourcen, die einen Anfragetext enthält:
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"
}Auf Benachrichtigungen reagieren
Um den Erfolg anzugeben, können Sie einen der folgenden Statuscodes zurückgeben:
200, 201, 202, 204, oder
102.
Wenn Ihr Dienst die API-Clientbibliothek von Google
verwendet und 500,502, 503, oder 504 zurückgibt, wiederholt die Google Drive API
die Anfrage mit exponentiellem Backoff.
Jeder andere zurückgegebene Statuscode wird als Nachrichtenfehler betrachtet.
Benachrichtigungsereignisse der Google Drive API
In diesem Abschnitt finden Sie Details zu den Benachrichtigungen, die Sie erhalten können, wenn Sie Push-Benachrichtigungen mit der Google Drive API verwenden.
| Wird gesendet, wenn | ||
|---|---|---|
sync |
files, changes |
Ein Kanal wurde erstellt. Sie können Benachrichtigungen dafür erhalten. |
add |
files |
Eine Ressource wurde erstellt oder freigegeben. |
|
files |
Eine vorhandene Ressource wurde gelöscht oder die Freigabe wurde aufgehoben. |
|
files |
Mindestens ein Attribut (Metadaten) einer Ressource wurde aktualisiert. |
|
files |
Eine Ressource wurde in den Papierkorb verschoben. |
|
files |
Eine Ressource wurde aus dem Papierkorb entfernt. |
|
changes |
Mindestens ein Änderungsprotokollelement wurde hinzugefügt. |
Bei update-Ereignissen kann der HTTP-Header X-Goog-Changed angegeben werden. Dieser Header enthält eine durch Kommas getrennte Liste, in der die Arten der aufgetretenen Änderungen beschrieben werden.
| Art der Änderung | Gibt an |
|---|---|
content |
Der Ressourceninhalt wurde aktualisiert. |
properties |
Mindestens ein Ressourcenattribut wurde aktualisiert. |
parents |
Mindestens ein übergeordnetes Element der Ressource wurde hinzugefügt oder entfernt. |
children |
Mindestens ein untergeordnetes Element der Ressource wurde hinzugefügt oder entfernt. |
permissions |
Die Berechtigungen für die Ressource wurden aktualisiert. |
Beispiel mit X-Goog-Changed-Header:
X-Goog-Resource-State: update X-Goog-Changed: content, permissions
Benachrichtigungen deaktivieren
Das Attribut expiration steuert, wann die Benachrichtigungen automatisch beendet werden. Sie können
den Empfang von Benachrichtigungen für einen bestimmten Kanal beenden, bevor er
abläuft, indem Sie die stop Methode unter
dem folgenden URI aufrufen:
https://www.googleapis.com/drive/v3/channels/stop
Für diese Methode müssen Sie mindestens die Attribute des Kanals
id und die resourceId angeben, wie im
folgenden Beispiel zu sehen ist. Wenn die Google Drive API mehrere Ressourcentypen mit
watch Methoden hat, gibt es nur eine
stop Methode.
Nur Nutzer mit der entsprechenden Berechtigung können einen Kanal beenden. Wichtig ist insbesondere:
- Wenn der Kanal von einem normalen Nutzerkonto erstellt wurde, kann nur derselbe Nutzer vom selben Client (identifiziert durch die OAuth 2.0-Client-IDs aus den Authentifizierungstokens), der den Kanal erstellt hat, den Kanal beenden.
- Wenn der Kanal von einem Dienstkonto erstellt wurde, kann jeder Nutzer vom selben Client den Kanal beenden.
Das folgende Codebeispiel zeigt, wie Sie den Empfang von Benachrichtigungen beenden:
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"
}