Google и Microsoft предоставляют остальные API для взаимодействия со своими службами, такими как Outlook и Google Calendar. Они оба предоставляют возможность «наблюдать» за ресурсами от имени пользователя службы и затем инициировать push-уведомление при изменении ресурса, которое затем может быть обработано через веб-крючок (который может быть функцией Google Cloud или функцией Azure). .
Например, предположим, что я создаю мобильное приложение, которое синхронизируется с Календарем Google. В соответствии с документацией , предоставленной Google, можно отправить запрос "наблюдения" (https://developers.google.com/calendar/v3/push#watch-response), который возвращает следующие данные:
{
"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/calendar/v3/calendars/my_calendar@gmail.com/events", // Version-specific ID of the watched resource.
"token": "target=myApp-myCalendarChannelDest", // Present only if one was provided.
"expiration": 1426325213000, // Actual expiration time as Unix timestamp (in ms), if applicable.
}
Теперь этот ответ отсервер означает, что приложение успешно подписалось на этот ресурс, и Google отправит push-уведомление на веб-крючок (домен которого был отправлен в запросе на просмотр). При срабатывании уведомлений на веб-крючок будет отправлено следующее:
POST https://example.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/calendar/v3/calendars/my_calendar@gmail.com/events
X-Goog-Resource-State: exists
X-Goog-Message-Number: 10
Теперь все это имеет смысл, но есть несколько вещей, которые мне не понятны:
Как мой веб-крючок может понять, чтозапрос поступил от Google?
Как webhook узнает, что запрос «связан» с конкретным авторизованным пользователем? И как сервер webhook может получить информацию в почтовом запросе? и отправить его на конкретное мобильное устройство, которое отправило запрос на просмотр?