Benachrichtigungen bei Ressourcenänderungen

In diesem Dokument wird beschrieben, wie Sie Push-Benachrichtigungen verwenden, die Ihre Anwendung informieren, wenn sich eine Ressource ändert.

Übersicht

Die Google Drive API bietet Push-Benachrichtigungen, mit denen Sie Änderungen an Ressourcen im Blick behalten können. Mit dieser Funktion können Sie die Leistung Ihrer Anwendung verbessern. So lassen sich die zusätzlichen Netzwerk- und Rechenkosten vermeiden, die durch das Abfragen von Ressourcen entstehen, um festzustellen, ob sie sich geändert haben. Sobald sich eine beobachtete Ressource ändert, benachrichtigt die Google Drive API Ihre Anwendung.

Damit Sie Push-Benachrichtigungen verwenden können, müssen Sie zwei Dinge tun:

  • Richten Sie die Empfänger-URL oder den Webhook-Callback-Empfänger ein.

    Dies ist ein HTTPS-Server, der die API-Benachrichtigungsnachrichten verarbeitet, die bei einer Ressourcenänderung ausgelöst werden.

  • Richten Sie für jeden Ressourcenendpunkt, den Sie beobachten möchten, einen Benachrichtigungskanal ein.

    Ein Kanal gibt Routinginformationen für Benachrichtigungsnachrichten an. Im Rahmen der Kanaleinrichtung müssen Sie die URL angeben, unter der Sie Benachrichtigungen erhalten möchten. Jedes Mal, wenn sich die Ressource eines Kanals ändert, sendet die Google Drive API eine Benachrichtigungsnachricht als POST-Anfrage an diese URL.

Derzeit unterstützt die Google Drive API Benachrichtigungen für Änderungen an den Methoden files und changes.

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 beobachtete Ressource ändert.

Smartwatch-Anfragen stellen

Jede abwählbare Google Drive API-Ressource ist mit einer watch-Methode unter einem URI mit folgendem Format verknüpft:

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 mit einem bestimmten Nutzer als auch mit einer bestimmten Ressource (oder einer Gruppe von Ressourcen) verknüpft. Eine watch-Anfrage ist nur dann erfolgreich, wenn der aktuelle Nutzer oder das aktuelle Dienstkonto Eigentümer der Ressource ist oder die Berechtigung zum Zugriff darauf hat.

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie Sie mit einer channels-Ressource mithilfe der Methode files.watch nach Änderungen an einer einzelnen files-Ressource suchen:

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", // Your channel ID.
  "type": "web_hook",
  "address": "https://mydomain.com/notifications", // Your receiving URL.
  ...
  "token": "target=myApp-myFilesChannelDest", // (Optional) Your files channel token.
  "expiration": 1426325213000 // (Optional) Your requested channel expiration date and time.
}

Im folgenden Codebeispiel wird gezeigt, wie du mithilfe einer channels-Ressource mit der Methode changes.watch nach allen changes Ausschau hältst:

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", // Your channel ID.
  "type": "web_hook",
  "address": "https://mydomain.com/notifications", // Your receiving URL.
  ...
  "token": "target=myApp-myChangesChannelDest", // (Optional) Your changes channel token.
  "expiration": 1426325213000 // (Optional) Your requested channel expiration date and time.
}

Erforderliche Properties

Bei jeder watch-Anfrage müssen Sie die folgenden Felder angeben:

  • Ein id-Attributstring, der diesen neuen Benachrichtigungskanal innerhalb Ihres Projekts eindeutig identifiziert. Wir empfehlen die Verwendung einer Universally Unique Identifier (UUID) oder eines ähnlichen eindeutigen Strings. Maximale Länge: 64 Zeichen.

    Der von Ihnen festgelegte ID-Wert wird im X-Goog-Channel-Id-HTTP-Header jeder Benachrichtigungsnachricht, die Sie für diesen Kanal erhalten, zurückgegeben.

  • Ein type-Attribut-String, der auf den Wert web_hook festgelegt ist.

  • Ein address-Property-String, der auf die URL festgelegt ist, die auf Benachrichtigungen für diesen Benachrichtigungskanal wartet und darauf reagiert. Dies ist Ihre Webhook-Callback-URL und sie muss HTTPS verwenden.

    Die Google Drive API kann Benachrichtigungen nur 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 Inhaber nicht mit dem Zielhostnamen übereinstimmt.

Optionale Attribute

Sie können auch die folgenden optionalen Felder in Ihrer watch-Anfrage angeben:

  • Eine token-Property, die einen beliebigen Stringwert angibt, der als Kanaltoken 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, um sicherzustellen, dass die Benachrichtigung nicht gefälscht wird, oder um die Nachricht basierend auf dem Zweck dieses Kanals an das richtige Ziel innerhalb Ihrer Anwendung weiterzuleiten. Maximale Länge: 256 Zeichen.

    Das Token ist in jedem X-Goog-Channel-Token-HTTP-Header in jeder Benachrichtigungsnachricht enthalten, die Ihre Anwendung für diesen Kanal empfängt.

    Wenn Sie Benachrichtigungskanal-Tokens verwenden, empfehlen wir Folgendes:

    • Verwenden Sie ein erweiterbares Codierungsformat, z. B. URL-Suchparameter. Beispiel: forwardTo=hr&createdBy=mobile

    • Fügen Sie keine vertraulichen Daten wie OAuth-Tokens hinzu.

  • Ein expiration-Eigenschaftsstring, der auf einen Unix-Zeitstempel (in Millisekunden) des Datums und der Uhrzeit festgelegt ist, an dem die Google Drive API keine Nachrichten mehr für diesen Benachrichtigungskanal senden soll.

    Wenn ein Kanal ein Ablaufdatum hat, wird es in jeder Benachrichtigungsnachricht, die Ihre Anwendung für diesen Kanal empfängt, als Wert des X-Goog-Channel-Expiration-HTTP-Headers (in einem visuell lesbaren Format) angegeben.

Weitere Informationen zur Anfrage finden Sie in der API-Referenz unter „watch“ für die Methoden files und changes.

Antwort auf Smartwatch

Wenn mit der watch-Anfrage ein Benachrichtigungskanal erstellt wurde, wird der HTTP-Statuscode 200 OK zurückgegeben.

Der Nachrichtentext der Smartwatch-Antwort enthält Informationen zum gerade erstellten Benachrichtigungskanal, wie im Beispiel unten dargestellt.

{
  "kind": "api#channel",
  "id": "01234567-89ab-cdef-0123456789ab"", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://www.googleapis.com/drive/v3/files/o3hgv1538sdjfh", // Version-specific ID of the watched resource.
  "token": "target=myApp-myFilesChannelDest", // Present only if one was provided.
  "expiration": 1426325213000, // Actual expiration date and time as UNIX timestamp (in milliseconds), if applicable.
}

Zusätzlich zu den Eigenschaften, die du im Rahmen deiner Anfrage gesendet hast, enthalten die zurückgegebenen Informationen auch resourceId und resourceUri, um die Ressource zu identifizieren, die auf diesem Benachrichtigungskanal angesehen wird.

Sie können die zurückgegebenen Informationen an andere Benachrichtigungskanalvorgänge weitergeben, z. B. wenn Sie keine Benachrichtigungen mehr erhalten möchten.

Weitere Informationen zur Antwort finden Sie in der API-Referenz unter „watch“ für die Methoden files und changes.

Synchronisierungsnachricht

Nachdem Sie einen Benachrichtigungskanal zum Beobachten einer Ressource erstellt haben, sendet die Google Drive API eine sync-Nachricht, um anzuzeigen, dass Benachrichtigungen gestartet werden. Der Wert des X-Goog-Resource-State-HTTP-Headers für diese Nachrichten ist sync. Aufgrund von Netzwerkzeitproblemen ist es möglich, dass Sie die sync-Nachricht erhalten, bevor Sie die Antwort der watch-Methode erhalten.

Sie können die sync-Benachrichtigung ignorieren, sie aber auch verwenden. Wenn Sie den Kanal beispielsweise nicht mehr verwenden möchten, können Sie die Werte X-Goog-Channel-ID und X-Goog-Resource-ID in einem Anruf verwenden, um keine Benachrichtigungen mehr zu erhalten. Sie können die Benachrichtigung sync auch verwenden, um eine Initialisierung durchzuführen und sich auf spätere Ereignisse vorzubereiten.

Unten sehen Sie das Format der sync-Nachrichten, die die Google Drive API an Ihre Empfänger-URL sendet.

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

Synchronisationsnachrichten haben immer den Wert 1 für den X-Goog-Message-Number-HTTP-Header. Jede nachfolgende Benachrichtigung für diesen Channel hat eine Nachrichtennummer, die höher als die vorherige ist. Die Nachrichtennummern sind jedoch nicht fortlaufend.

Benachrichtigungskanäle verlängern

Ein Benachrichtigungskanal kann eine Ablaufzeit haben. Der Wert wird entweder durch Ihre Anfrage oder durch interne Limits oder Standardwerte der Google Drive API bestimmt. Es wird der jeweils strengste Wert verwendet. Das Ablaufdatum des Kanals (falls vorhanden) ist in den Informationen, die von der watch-Methode zurückgegeben werden, als Unix-Zeitstempel (in Millisekunden) enthalten. Außerdem sind das Ablaufdatum und die Ablaufzeit (in einem für Menschen lesbaren Format) in jeder Benachrichtigungsnachricht, die deine Anwendung für diesen Kanal im X-Goog-Channel-Expiration-HTTP-Header empfängt, enthalten.

Derzeit gibt es keine Möglichkeit, einen Benachrichtigungskanal automatisch zu verlängern. Wenn das Ablaufdatum eines Kanals näher rückt, müssen Sie ihn durch einen neuen ersetzen. Rufen Sie dazu die watch-Methode auf. Wie immer müssen Sie für die Property id des neuen Kanals einen eindeutigen Wert verwenden. Beachten Sie, dass es wahrscheinlich zu einer „Überschneidung“ kommt, wenn die beiden Benachrichtigungskanäle für dieselbe Ressource aktiv sind.

Benachrichtigungen erhalten

Sobald sich eine beobachtete Ressource ändert, erhält Ihre Anwendung eine Benachrichtigung mit einer Beschreibung der Änderung. Die Google Drive API sendet diese Nachrichten als HTTPS-POST-Anfragen an die URL, die Sie als address-Property für diesen Benachrichtigungskanal angegeben haben.

Format der Benachrichtigungsnachrichten auswerten

Alle Benachrichtigungsnachrichten enthalten eine Reihe von HTTP-Headern mit X-Goog--Präfixen. Einige Benachrichtigungstypen können auch einen Nachrichtentext enthalten.

Header

Benachrichtigungsnachrichten, die von der Google Drive API an Ihre Empfänger-URL gesendet werden, enthalten die folgenden HTTP-Header:

Header Beschreibung
Immer vorhanden
X-Goog-Channel-ID UUID oder anderer eindeutiger String, den Sie zur Identifizierung dieses Benachrichtigungskanals angegeben haben.
X-Goog-Message-Number Ganzzahl, die diese Nachricht für diesen Benachrichtigungskanal identifiziert. Der Wert ist für sync-Nachrichten immer 1. Die Nachrichtennummern steigen mit jeder nachfolgenden Nachricht auf dem Kanal, sind aber nicht fortlaufend.
X-Goog-Resource-ID Ein intransparenter Wert, der die beobachtete Ressource identifiziert. Diese ID ist unabhängig von API-Versionen stabil.
X-Goog-Resource-State Der neue Ressourcenstatus, der die Benachrichtigung ausgelöst hat. Mögliche Werte: sync, add, remove, update, trash, untrash oder change .
X-Goog-Resource-URI Eine API-Versions-spezifische Kennung für die beobachtete Ressource.
Manchmal vorhanden
X-Goog-Changed Weitere Informationen zu den Änderungen. Mögliche Werte: content, parents, children oder permissions. Nicht für sync-Nachrichten verfügbar.
X-Goog-Channel-Expiration Datum und Uhrzeit des Ablaufs des Benachrichtigungskanals in einem für Menschen lesbaren Format. Nur vorhanden, wenn definiert.
X-Goog-Channel-Token Benachrichtigungskanal-Token, das von Ihrer Anwendung festgelegt wurde und mit dem Sie die Benachrichtigungsquelle verifizieren können. Nur vorhanden, wenn definiert.

Die Benachrichtigungsnachrichten für files und changes sind leer.

Beispiele

Benachrichtigungsnachricht zu Änderungen bei files-Ressourcen ohne Anfragetext:

POST https://mydomain.com/notifications // Your receiving URL.
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

Benachrichtigungsnachricht zu Änderungen bei changes-Ressourcen mit einem Anfragetext:

POST https://mydomain.com/notifications // Your receiving URL.
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

Als Erfolg 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, wird der Vorgang von der Google Drive API mit exponentiellem Backoff wiederholt. Alle anderen Rückgabestatuscodes gelten als Fehler.

Benachrichtigungsereignisse der Google Drive API

In diesem Abschnitt finden Sie Details zu den Benachrichtigungen, die Sie bei Verwendung von Push-Benachrichtigungen mit der Google Drive API erhalten können.

X-Goog-Resource-State Gilt für Gesendet, wenn
sync files, changes Ein Kanal wurde erstellt. Sie sollten dann Benachrichtigungen dazu erhalten.
add files Eine Ressource wurde erstellt oder freigegeben.
remove files Eine vorhandene Ressource wurde gelöscht oder die Freigabe aufgehoben.
update files Mindestens eine Property (Metadaten) einer Ressource wurde aktualisiert.
trash files Eine Ressource wurde in den Papierkorb verschoben.
untrash files Eine Ressource wurde aus dem Papierkorb entfernt.
change changes Es wurden mindestens ein oder mehrere Änderungselemente hinzugefügt.

Für update-Ereignisse kann der X-Goog-Changed-HTTP-Header angegeben werden. Dieser Header enthält eine durch Kommas getrennte Liste, in der die Arten der Änderungen beschrieben werden.

Art der Änderung Gibt an
content Der Inhalt der Ressource wurde aktualisiert.
properties Mindestens eine Ressourceneigenschaft wurde aktualisiert.
parents Mindestens ein übergeordnetes Element für die Ressource wurde hinzugefügt oder entfernt.
children Mindestens eine untergeordnete Ressource wurde hinzugefügt oder entfernt.
permissions Die Ressourcenberechtigungen wurden aktualisiert.

Beispiel mit X-Goog-Changed-Header:

X-Goog-Resource-State: update
X-Goog-Changed: content, permissions

Benachrichtigungen deaktivieren

Mit der Property expiration wird festgelegt, wann die Benachrichtigungen automatisch beendet werden. Du kannst festlegen, dass du keine Benachrichtigungen mehr für einen bestimmten Kanal erhältst, bevor er abläuft. Rufe dazu die Methode stop unter folgendem URI auf:

https://www.googleapis.com/drive/v3/channels/stop

Für diese Methode müssen Sie mindestens die id- und die resourceId-Properties des Kanals angeben, wie im Beispiel unten gezeigt. Hinweis: Wenn die Google Drive API mehrere Arten von Ressourcen mit watch-Methoden hat, gibt es nur eine watch-Methode.stop

Nur Nutzer mit der entsprechenden Berechtigung können einen Kanal beenden. Wichtig ist insbesondere:

  • Wenn der Kanal von einem regulären Nutzerkonto erstellt wurde, kann nur derselbe Nutzer desselben Clients (wie anhand der OAuth 2.0-Client-IDs aus den Authentifizierungstokens ermittelt) den Kanal beenden.
  • Wenn der Kanal von einem Dienstkonto erstellt wurde, kann jeder Nutzer desselben Clients den Kanal beenden.

Im folgenden Codebeispiel wird gezeigt, wie Sie keine Benachrichtigungen mehr erhalten:

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"
}