В этом документе описывается, как использовать push-уведомления, информирующие ваше приложение об изменении ресурса.
Обзор
API Google Drive предоставляет push-уведомления, позволяющие отслеживать изменения ресурсов. Вы можете использовать эту функцию для повышения производительности своего приложения. Она позволяет исключить дополнительные сетевые и вычислительные затраты, связанные с опросом ресурсов для определения их изменений. При каждом изменении отслеживаемого ресурса API Google Drive уведомляет ваше приложение.
Чтобы использовать push-уведомления, необходимо сделать две вещи:
Настройте принимающий URL или приемник обратного вызова «webhook».
Это HTTPS-сервер, который обрабатывает сообщения API-уведомлений, которые запускаются при изменении ресурса.
Настройте ( канал уведомлений ) для каждой конечной точки ресурса, за которой вы хотите следить.
Канал определяет маршрутизацию для уведомлений. В рамках настройки канала необходимо указать конкретный URL-адрес, на который вы хотите получать уведомления. При каждом изменении ресурса канала API Google Диска отправляет уведомление в виде
POST
запроса на этот URL-адрес.
В настоящее время API Google Drive поддерживает уведомления об изменениях files
и методах changes
.
Создать каналы уведомлений
Чтобы запросить push-уведомления, необходимо настроить канал уведомлений для каждого ресурса, который вы хотите отслеживать. После настройки каналов уведомлений API Google Диска будет информировать ваше приложение об изменении любого отслеживаемого ресурса.
Оформить запрос на просмотр
Каждый доступный для просмотра ресурс API Google Drive имеет связанный с ним метод watch
в URI следующей формы:
https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch
Чтобы настроить канал уведомлений для сообщений об изменениях определенного ресурса, отправьте POST
запрос методу watch
для ресурса.
Каждый канал уведомлений связан как с конкретным пользователем, так и с конкретным ресурсом (или набором ресурсов). Запрос watch
не будет выполнен, если текущий пользователь или учётная запись службы не владеет этим ресурсом или не имеет на него разрешения.
Примеры
В следующем примере кода показано, как использовать ресурс channels
для начала отслеживания изменений в ресурсе одного files
с помощью метода 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", // 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. }
В следующем примере кода показано, как использовать ресурс channels
для начала отслеживания всех changes
с помощью метода 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", // 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. }
Требуемые свойства
При каждом запросе watch
необходимо указать следующие поля:
Строка свойства
id
, которая однозначно идентифицирует этот новый канал уведомлений в вашем проекте. Мы рекомендуем использовать универсальный уникальный идентификатор ( UUID ) или любую аналогичную уникальную строку. Максимальная длина: 64 символа.Заданное вами значение идентификатора отражается в HTTP-заголовке
X-Goog-Channel-Id
каждого уведомительного сообщения, которое вы получаете для этого канала.Строка свойства
type
, для которой задано значениеweb_hook
.Строка свойства
address
, заданная как URL-адрес, который прослушивает уведомления и отвечает на них для этого канала уведомлений. Это URL-адрес обратного вызова вашего веб-перехватчика, и он должен использовать HTTPS.Обратите внимание, что API Google Диска может отправлять уведомления на этот HTTPS-адрес только при наличии на вашем веб-сервере действующего SSL-сертификата. К недействительным сертификатам относятся:
- Самоподписанные сертификаты.
- Сертификаты, подписанные ненадежным источником.
- Сертификаты, которые были отозваны.
- Сертификаты, тема которых не соответствует целевому имени хоста.
Дополнительные свойства
Вы также можете указать эти необязательные поля в своем запросе watch
:
Свойство
token
, которое задаёт произвольное строковое значение для использования в качестве токена канала. Токены каналов уведомлений можно использовать для различных целей. Например, с помощью токена можно проверить, что каждое входящее сообщение относится к каналу, созданному вашим приложением, — чтобы убедиться, что уведомление не подделывается, — или перенаправить сообщение по нужному адресу в вашем приложении в зависимости от назначения этого канала. Максимальная длина: 256 символов.Токен включается в HTTP-заголовок
X-Goog-Channel-Token
в каждом уведомлении, которое ваше приложение получает для этого канала.Если вы используете токены канала уведомлений, мы рекомендуем вам:
Используйте расширяемый формат кодирования, например параметры URL-запроса. Пример:
forwardTo=hr&createdBy=mobile
Не включайте конфиденциальные данные, такие как токены OAuth.
Строка свойства
expiration
, заданная как временная метка Unix (в миллисекундах) даты и времени, когда вы хотите, чтобы API Google Диска прекратил отправлять сообщения для этого канала уведомлений.Если у канала есть срок действия, он включается в качестве значения HTTP-заголовка
X-Goog-Channel-Expiration
(в удобочитаемом формате) в каждое уведомительное сообщение, которое ваше приложение получает для этого канала.
Более подробную информацию о запросе можно найти в методе watch
files
и методе changes
в справочнике API.
Смотреть ответ
Если запрос watch
успешно создает канал уведомлений, он возвращает код статуса HTTP 200 OK
.
В тексте сообщения ответа на просмотр содержится информация о канале уведомлений, который вы только что создали, как показано в примере ниже.
{ "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. }
Помимо свойств, отправленных вами в рамках запроса, возвращаемая информация также включает resourceId
и resourceUri
для идентификации ресурса, отслеживаемого на этом канале уведомлений.
Вы можете передать возвращенную информацию другим операциям канала уведомлений, например, когда вы хотите прекратить получать уведомления .
Более подробную информацию об ответе можно найти в методе watch
за files
и методах changes
в справочнике API.
Синхронизировать сообщение
После создания канала уведомлений для отслеживания ресурса API Google Диска отправляет сообщение sync
, уведомляющее о начале отправки уведомлений. Значение HTTP-заголовка X-Goog-Resource-State
для этих сообщений — sync
. Из-за проблем с синхронизацией в сети сообщение sync
может быть получено даже до того, как будет получен ответ от метода watch
.
Уведомление sync
можно игнорировать, но вы также можете его использовать. Например, если вы решите не сохранять канал, вы можете использовать значения X-Goog-Channel-ID
и X-Goog-Resource-ID
в вызове, чтобы отключить получение уведомлений . Вы также можете использовать уведомление sync
для инициализации и подготовки к последующим событиям.
Формат сообщений sync
, которые API Google Drive отправляет на ваш принимающий URL, показан ниже.
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
Сообщения синхронизации всегда имеют значение HTTP-заголовка X-Goog-Message-Number
равное 1
Каждое последующее уведомление для этого канала имеет номер сообщения, который больше предыдущего, хотя номера сообщений не будут последовательными.
Обновите каналы уведомлений
Канал уведомлений может иметь срок действия, определяемый либо вашим запросом, либо внутренними ограничениями или значениями по умолчанию API Google Drive (используется более строгое значение). Срок действия канала, если он указан, включается в виде временной метки Unix (в миллисекундах) в информацию, возвращаемую методом watch
. Кроме того, дата и время окончания срока действия включаются (в удобном для восприятия формате) в каждое уведомление, которое ваше приложение получает для этого канала, в HTTP-заголовке X-Goog-Channel-Expiration
.
В настоящее время автоматического продления канала уведомлений не предусмотрено. Когда срок действия канала подходит к концу, необходимо заменить его новым, вызвав метод watch
. Как всегда, необходимо использовать уникальное значение для свойства id
нового канала. Обратите внимание, что, вероятно, будет существовать период «перекрытия» между активными двумя каналами уведомлений для одного и того же ресурса.
Получать уведомления
При каждом изменении отслеживаемого ресурса ваше приложение получает уведомление с описанием этого изменения. API Google Диска отправляет эти сообщения в виде HTTPS-запросов POST
на URL-адрес, указанный вами в качестве свойства address
для этого канала уведомлений.
Интерпретировать формат сообщения уведомления
Все уведомления содержат набор HTTP-заголовков с префиксами X-Goog-
. Некоторые типы уведомлений также могут включать тело сообщения.
Заголовки
Уведомления, отправляемые API Google Drive на ваш принимающий URL, включают следующие заголовки HTTP:
Заголовок | Описание |
---|---|
Всегда присутствует | |
| UUID или другая уникальная строка, предоставленная вами для идентификации этого канала уведомлений. |
| Целое число, идентифицирующее это сообщение для данного канала уведомлений. Для сообщений sync значение всегда равно 1 Номера сообщений увеличиваются с каждым последующим сообщением в канале, но они не являются последовательными. |
| Непрозрачное значение, идентифицирующее отслеживаемый ресурс. Этот идентификатор стабилен во всех версиях API. |
| Новое состояние ресурса, вызвавшее уведомление. Возможные значения: sync , add , remove , update , trash , untrash или change . |
| Идентификатор, специфичный для версии API, для наблюдаемого ресурса. |
Иногда присутствует | |
| Дополнительные сведения об изменениях. Возможные значения: content , parents , children , permissions . Не предоставляется с сообщениями sync . |
| Дата и время истечения срока действия канала уведомлений, выраженные в удобном для восприятия формате. Присутствует только в том случае, если определено. |
| Токен канала уведомлений, установленный вашим приложением, который можно использовать для проверки источника уведомления. Присутствует только в том случае, если определен. |
Уведомления о files
и changes
пусты.
Примеры
Изменение уведомительного сообщения для ресурсов files
, которое не включает тело запроса:
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
Сообщение об изменении уведомлений об changes
ресурсов, которое включает тело запроса:
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" }
Ответить на уведомления
Чтобы указать на успех, вы можете вернуть любой из следующих кодов состояния: 200
, 201
, 202
, 204
или 102
.
Если ваш сервис использует клиентскую библиотеку API Google и возвращает 500
, 502
, 503
или 504
, API Google Drive выполняет повторные попытки с экспоненциальной задержкой . Любой другой код статуса возврата считается ошибкой сообщения.
Понимание событий уведомлений API Google Диска
В этом разделе приведены сведения об уведомлениях, которые вы можете получать при использовании push-уведомлений с API Google Диска.
| | Доставлено когда |
---|---|---|
sync | files , changes | Канал успешно создан. Вы можете рассчитывать на получение уведомлений по нему. |
add | files | Ресурс был создан или предоставлен в общий доступ. |
| files | Существующий ресурс был удален или к нему больше не предоставляется общий доступ. |
| files | Одно или несколько свойств (метаданные) ресурса были обновлены. |
| files | Ресурс перемещен в корзину. |
| files | Ресурс удален из корзины. |
| changes | Добавлен один или несколько пунктов журнала изменений. |
Для событий update
может быть предоставлен HTTP-заголовок X-Goog-Changed
. Этот заголовок содержит список, разделённый запятыми, описывающий типы произошедших изменений.
Изменить тип | Указывает |
---|---|
content | Содержание ресурса обновлено. |
properties | Одно или несколько свойств ресурса были обновлены. |
parents | Один или несколько родительских ресурсов были добавлены или удалены. |
children | Один или несколько дочерних ресурсов были добавлены или удалены. |
permissions | Разрешения ресурсов были обновлены. |
Пример с заголовком X-Goog-Changed
:
X-Goog-Resource-State: update X-Goog-Changed: content, permissions
Остановить уведомления
Свойство expiration
управляет моментом автоматического прекращения уведомлений. Вы можете прекратить получение уведомлений для конкретного канала до истечения срока его действия, вызвав метод stop
по следующему URI:
https://www.googleapis.com/drive/v3/channels/stop
Для этого метода необходимо указать как минимум id
канала и свойства resourceId
, как показано в примере ниже. Обратите внимание: если в API Google Drive есть несколько типов ресурсов с методами watch
, метод stop
будет только один.
Остановить канал могут только пользователи с соответствующими разрешениями. В частности:
- Если канал был создан с помощью учетной записи обычного пользователя, остановить канал может только тот же пользователь из того же клиента (что идентифицируется по идентификаторам клиентов OAuth 2.0 из токенов авторизации), который создал канал.
- Если канал был создан учетной записью службы, любой пользователь того же клиента может остановить канал.
В следующем примере кода показано, как прекратить получение уведомлений:
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" }
В этом документе описывается, как использовать push-уведомления, информирующие ваше приложение об изменении ресурса.
Обзор
API Google Drive предоставляет push-уведомления, позволяющие отслеживать изменения ресурсов. Вы можете использовать эту функцию для повышения производительности своего приложения. Она позволяет исключить дополнительные сетевые и вычислительные затраты, связанные с опросом ресурсов для определения их изменений. При каждом изменении отслеживаемого ресурса API Google Drive уведомляет ваше приложение.
Чтобы использовать push-уведомления, необходимо сделать две вещи:
Настройте принимающий URL или приемник обратного вызова «webhook».
Это HTTPS-сервер, который обрабатывает сообщения API-уведомлений, которые запускаются при изменении ресурса.
Настройте ( канал уведомлений ) для каждой конечной точки ресурса, за которой вы хотите следить.
Канал определяет маршрутизацию для уведомлений. В рамках настройки канала необходимо указать конкретный URL-адрес, на который вы хотите получать уведомления. При каждом изменении ресурса канала API Google Диска отправляет уведомление в виде
POST
запроса на этот URL-адрес.
В настоящее время API Google Drive поддерживает уведомления об изменениях files
и методах changes
.
Создать каналы уведомлений
Чтобы запросить push-уведомления, необходимо настроить канал уведомлений для каждого ресурса, который вы хотите отслеживать. После настройки каналов уведомлений API Google Диска будет информировать ваше приложение об изменении любого отслеживаемого ресурса.
Оформить запрос на просмотр
Каждый доступный для просмотра ресурс API Google Drive имеет связанный с ним метод watch
в URI следующей формы:
https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch
Чтобы настроить канал уведомлений для сообщений об изменениях определенного ресурса, отправьте POST
запрос методу watch
для ресурса.
Каждый канал уведомлений связан как с конкретным пользователем, так и с конкретным ресурсом (или набором ресурсов). Запрос watch
не будет выполнен, если текущий пользователь или учётная запись службы не владеет этим ресурсом или не имеет на него разрешения.
Примеры
В следующем примере кода показано, как использовать ресурс channels
для начала отслеживания изменений в ресурсе одного files
с помощью метода 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", // 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. }
В следующем примере кода показано, как использовать ресурс channels
для начала отслеживания всех changes
с помощью метода 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", // 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. }
Требуемые свойства
При каждом запросе watch
необходимо указать следующие поля:
Строка свойства
id
, которая однозначно идентифицирует этот новый канал уведомлений в вашем проекте. Мы рекомендуем использовать универсальный уникальный идентификатор ( UUID ) или любую аналогичную уникальную строку. Максимальная длина: 64 символа.Заданное вами значение идентификатора отражается в HTTP-заголовке
X-Goog-Channel-Id
каждого уведомительного сообщения, которое вы получаете для этого канала.Строка свойства
type
, для которой задано значениеweb_hook
.Строка свойства
address
, заданная как URL-адрес, который прослушивает уведомления и отвечает на них для этого канала уведомлений. Это URL-адрес обратного вызова вашего веб-перехватчика, и он должен использовать HTTPS.Обратите внимание, что API Google Диска может отправлять уведомления на этот HTTPS-адрес только при наличии на вашем веб-сервере действующего SSL-сертификата. К недействительным сертификатам относятся:
- Самоподписанные сертификаты.
- Сертификаты, подписанные ненадежным источником.
- Сертификаты, которые были отозваны.
- Сертификаты, тема которых не соответствует целевому имени хоста.
Дополнительные свойства
Вы также можете указать эти необязательные поля в своем запросе watch
:
Свойство
token
, которое задаёт произвольное строковое значение для использования в качестве токена канала. Токены каналов уведомлений можно использовать для различных целей. Например, с помощью токена можно проверить, что каждое входящее сообщение относится к каналу, созданному вашим приложением, — чтобы убедиться, что уведомление не подделывается, — или перенаправить сообщение по нужному адресу в вашем приложении в зависимости от назначения этого канала. Максимальная длина: 256 символов.Токен включается в HTTP-заголовок
X-Goog-Channel-Token
в каждом уведомлении, которое ваше приложение получает для этого канала.Если вы используете токены канала уведомлений, мы рекомендуем вам:
Используйте расширяемый формат кодирования, например параметры URL-запроса. Пример:
forwardTo=hr&createdBy=mobile
Не включайте конфиденциальные данные, такие как токены OAuth.
Строка свойства
expiration
, заданная как временная метка Unix (в миллисекундах) даты и времени, когда вы хотите, чтобы API Google Диска прекратил отправлять сообщения для этого канала уведомлений.Если у канала есть срок действия, он включается в качестве значения HTTP-заголовка
X-Goog-Channel-Expiration
(в удобочитаемом формате) в каждое уведомительное сообщение, которое ваше приложение получает для этого канала.
Более подробную информацию о запросе можно найти в методе watch
files
и методе changes
в справочнике API.
Смотреть ответ
Если запрос watch
успешно создает канал уведомлений, он возвращает код статуса HTTP 200 OK
.
В тексте сообщения ответа на просмотр содержится информация о канале уведомлений, который вы только что создали, как показано в примере ниже.
{ "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. }
Помимо свойств, отправленных вами в рамках запроса, возвращаемая информация также включает resourceId
и resourceUri
для идентификации ресурса, отслеживаемого на этом канале уведомлений.
Вы можете передать возвращенную информацию другим операциям канала уведомлений, например, когда вы хотите прекратить получать уведомления .
Более подробную информацию об ответе можно найти в методе watch
за files
и методах changes
в справочнике API.
Синхронизировать сообщение
После создания канала уведомлений для отслеживания ресурса API Google Диска отправляет сообщение sync
, уведомляющее о начале отправки уведомлений. Значение HTTP-заголовка X-Goog-Resource-State
для этих сообщений — sync
. Из-за проблем с синхронизацией в сети сообщение sync
может быть получено даже до того, как будет получен ответ от метода watch
.
Уведомление sync
можно игнорировать, но вы также можете его использовать. Например, если вы решите не сохранять канал, вы можете использовать значения X-Goog-Channel-ID
и X-Goog-Resource-ID
в вызове, чтобы отключить получение уведомлений . Вы также можете использовать уведомление sync
для инициализации и подготовки к последующим событиям.
Формат сообщений sync
, которые API Google Drive отправляет на ваш принимающий URL, показан ниже.
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
Сообщения синхронизации всегда имеют значение HTTP-заголовка X-Goog-Message-Number
равное 1
Каждое последующее уведомление для этого канала имеет номер сообщения, который больше предыдущего, хотя номера сообщений не будут последовательными.
Обновите каналы уведомлений
Канал уведомлений может иметь срок действия, определяемый либо вашим запросом, либо внутренними ограничениями или значениями по умолчанию API Google Drive (используется более строгое значение). Срок действия канала, если он указан, включается в виде временной метки Unix (в миллисекундах) в информацию, возвращаемую методом watch
. Кроме того, дата и время окончания срока действия включаются (в удобном для восприятия формате) в каждое уведомление, которое ваше приложение получает для этого канала, в HTTP-заголовке X-Goog-Channel-Expiration
.
В настоящее время автоматического продления канала уведомлений не предусмотрено. Когда срок действия канала подходит к концу, необходимо заменить его новым, вызвав метод watch
. Как всегда, необходимо использовать уникальное значение для свойства id
нового канала. Обратите внимание, что, вероятно, будет существовать период «перекрытия» между активными двумя каналами уведомлений для одного и того же ресурса.
Получать уведомления
При каждом изменении отслеживаемого ресурса ваше приложение получает уведомление с описанием этого изменения. API Google Диска отправляет эти сообщения в виде HTTPS-запросов POST
на URL-адрес, указанный вами в качестве свойства address
для этого канала уведомлений.
Интерпретировать формат сообщения уведомления
Все уведомления содержат набор HTTP-заголовков с префиксами X-Goog-
. Некоторые типы уведомлений также могут включать тело сообщения.
Заголовки
Уведомления, отправляемые API Google Drive на ваш принимающий URL, включают следующие заголовки HTTP:
Заголовок | Описание |
---|---|
Всегда присутствует | |
| UUID или другая уникальная строка, предоставленная вами для идентификации этого канала уведомлений. |
| Целое число, идентифицирующее это сообщение для данного канала уведомлений. Для сообщений sync значение всегда равно 1 Номера сообщений увеличиваются с каждым последующим сообщением в канале, но они не являются последовательными. |
| Непрозрачное значение, идентифицирующее отслеживаемый ресурс. Этот идентификатор стабилен во всех версиях API. |
| Новое состояние ресурса, вызвавшее уведомление. Возможные значения: sync , add , remove , update , trash , untrash или change . |
| Идентификатор, специфичный для версии API, для наблюдаемого ресурса. |
Иногда присутствует | |
| Дополнительные сведения об изменениях. Возможные значения: content , parents , children , permissions . Не предоставляется с сообщениями sync . |
| Дата и время истечения срока действия канала уведомлений, выраженные в удобном для восприятия формате. Присутствует только в том случае, если определено. |
| Токен канала уведомлений, установленный вашим приложением, который можно использовать для проверки источника уведомления. Присутствует только в том случае, если определен. |
Уведомления о files
и changes
пусты.
Примеры
Изменение уведомительного сообщения для ресурсов files
, которое не включает тело запроса:
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
Сообщение об изменении уведомлений об changes
ресурсов, которое включает тело запроса:
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" }
Ответить на уведомления
Чтобы указать на успех, вы можете вернуть любой из следующих кодов состояния: 200
, 201
, 202
, 204
или 102
.
Если ваш сервис использует клиентскую библиотеку API Google и возвращает 500
, 502
, 503
или 504
, API Google Drive выполняет повторные попытки с экспоненциальной задержкой . Любой другой код статуса возврата считается ошибкой сообщения.
Понимание событий уведомлений API Google Диска
В этом разделе приведены сведения об уведомлениях, которые вы можете получать при использовании push-уведомлений с API Google Диска.
| | Доставлено когда |
---|---|---|
sync | files , changes | Канал успешно создан. Вы можете рассчитывать на получение уведомлений по нему. |
add | files | Ресурс был создан или предоставлен в общий доступ. |
| files | Существующий ресурс был удален или к нему больше не предоставляется общий доступ. |
| files | Одно или несколько свойств (метаданные) ресурса были обновлены. |
| files | Ресурс перемещен в корзину. |
| files | Ресурс удален из корзины. |
| changes | Добавлен один или несколько пунктов журнала изменений. |
Для событий update
может быть предоставлен HTTP-заголовок X-Goog-Changed
. Этот заголовок содержит список, разделённый запятыми, описывающий типы произошедших изменений.
Изменить тип | Указывает |
---|---|
content | Содержание ресурса обновлено. |
properties | Одно или несколько свойств ресурса были обновлены. |
parents | Один или несколько родительских ресурсов были добавлены или удалены. |
children | Один или несколько дочерних ресурсов были добавлены или удалены. |
permissions | Разрешения ресурсов были обновлены. |
Пример с заголовком X-Goog-Changed
:
X-Goog-Resource-State: update X-Goog-Changed: content, permissions
Остановить уведомления
Свойство expiration
управляет моментом автоматического прекращения уведомлений. Вы можете прекратить получение уведомлений для конкретного канала до истечения срока его действия, вызвав метод stop
по следующему URI:
https://www.googleapis.com/drive/v3/channels/stop
Для этого метода необходимо указать как минимум id
канала и свойства resourceId
, как показано в примере ниже. Обратите внимание: если в API Google Drive есть несколько типов ресурсов с методами watch
, метод stop
будет только один.
Остановить канал могут только пользователи с соответствующими разрешениями. В частности:
- Если канал был создан с помощью учетной записи обычного пользователя, остановить канал может только тот же пользователь из того же клиента (что идентифицируется по идентификаторам клиентов OAuth 2.0 из токенов авторизации), который создал канал.
- Если канал был создан учетной записью службы, любой пользователь того же клиента может остановить канал.
В следующем примере кода показано, как прекратить получение уведомлений:
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" }