#google-calendar-api
Вопрос:
Мы управляем синхронизацией наших календарей таким образом —
- запуск первой синхронизации с некоторой фильтрацией (timeMin и timeMax), затем получение
nextSyncToken
- запуск инкрементной синхронизации при срабатывании наблюдателя событий. Инкрементная синхронизация игнорирует исходные фильтры и возвращает обновленные события с разных дат.
Является ли это ожидаемым поведением?
пример — запуск первой синхронизации по датам 2021-07-25T00:00:00 - 2021-07-25T20:00:00
, получение nextSyncToken = xxxxx
. добавление нового события на 2021-08-08. запуск инкрементной синхронизации с nextSyncToken = xxxxx
возвращает это новое событие , хотя оно должно было быть отфильтровано. (протестировано на nodejs и на справочной странице api Google)
По запросу Хосе это запросы и ответы:
Первый запрос:
calendarId: ******,
q: importantEventsQuery,
timeMax: 2021-07-25T20:00:00 03:00,
timeMin: 2021-07-25T10:00:00 03:00
Первый ответ:
{
"kind": "calendar#events",
"etag": ""p320******"",
"summary": "a******",
"updated": "2021-08-09T04:39:45.696Z",
"timeZone": "******",
"accessRole": "owner",
"defaultReminders": [
{
"method": "popup",
"minutes": 15
}
],
"nextSyncToken": "**********uAE=",
"items": []
}
Вторая просьба:
calendarId: ******,
syncToken: **********uAE=
Второй ответ:
{
"kind": "calendar#events",
"etag": ""p320cltebhuhv40g"",
"summary": "alon.sade@verizonmedia.com",
"updated": "2021-08-09T04:39:45.696Z",
"timeZone": "Asia/Jerusalem",
"accessRole": "owner",
"defaultReminders": [
{
"method": "popup",
"minutes": 15
}
],
"nextSyncToken": "**********uAE=",
"items": []
}
Теперь я добавляю новое событие в дату, отличную от даты запроса, и без термина «Важный запрос».
Третий запрос: соответствует второму.
Третий ответ:
{
"kind": "calendar#events",
"etag": ""p32k******"",
"summary": "******",
"updated": "2021-08-09T06:42:13.241Z",
"timeZone": "******",
"accessRole": "owner",
"defaultReminders": [
{
"method": "popup",
"minutes": 15
}
],
"nextSyncToken": "*****=",
"items": [
{
"kind": "calendar#event",
"etag": ""******"",
"id": "******",
"status": "confirmed",
"htmlLink": "https://www.google.com/calendar/event?eid=******",
"created": "2021-08-09T06:42:12.000Z",
"updated": "2021-08-09T06:42:12.725Z",
"summary": "dd",
"creator": {
"email": "******",
"self": true
},
"organizer": {
"email": "******",
"self": true
},
"start": {
"dateTime": "2021-08-09T08:30:00 01:00"
},
"end": {
"dateTime": "2021-08-09T09:00:00 01:00"
},
"iCalUID": "******",
"sequence": 0,
"reminders": {
"useDefault": true
},
"eventType": "default"
}
]
}
Комментарии:
1. Как вы упомянули, календарь изменяется путем добавления нового события, вы проверили, изменилось ли это
nextSyncToken
?2. Когда я получаю новый результат (с несвязанными событиями), он
nextSyncToken
новый и другой3. Как я вижу в ответах, это не предполагаемое поведение, если бы соответствующий отчет еще не был подан, я бы открыл новый. developers.google.com/calendar/api/support#problems_errors
Ответ №1:
Это нормально, чтобы обеспечить согласованность данных
Это ожидаемое поведение, потому что вы добавляете новый ресурс, и для сохранения согласованности он может изменить порядок этого результата.
Если вы хотите, чтобы ваше приложение было согласованным, я настоятельно рекомендую вам всякий раз, когда вы добавляете ресурс, пытаться сделать новый запрос, включая фильтры.
Посмотрите на события: список > Свойство syncToken>, где указано It makes the result of this list request contain only entries that have changed since then
, что вы должны делать новый запрос при каждом изменении, как было сказано ранее.
Комментарии:
1. Спасибо за ответ! — что вы подразумеваете под «добавлением нового ресурса»? новое событие было добавлено в тот же календарь исходного запроса. Кроме того, я не могу добавлять фильтры временного диапазона, когда я использую the
nextSyncToken
. Что касается цитаты из документации, разве не предполагается, что возвращенные записи с момента последнего запроса будут по-прежнему использовать те же ограничения ?2. Я имею в виду, что, как вы сказали «добавление нового события в 2021-08-08», вы добавляете сюда новый ресурс. Когда вы говорите, что «это должно было быть отфильтровано», я объясняю в своем ответе причину, по которой фильтры не отражаются при использовании
nextSyncToken
ранее сгенерированного (перед добавлением этого события). Я не понимаю, что вы подразумеваете под «Я не могу добавлять фильтры временного диапазона, когда я использую nextSyncToken».3. спасибо, я не знал, что события-это ресурсы. какова цель
nextSyncToken
и запуска инкрементной синхронизации, если она игнорирует фильтры и возвращает новые (несвязанные) ресурсы в результатах? Что касается диапазона времени добавления, вы предложили, чтобы «всякий раз, когда вы добавляете ресурс, попробуйте сделать новый запрос, включая фильтры», я не хочу выполнять полную синхронизацию для каждого нового события, я пытаюсь выполнить добавочную синхронизацию, как описано здесь: developers.google.com/calendar/api/guides/sync4. Можно ли увидеть полную полезную нагрузку (запрос / ответ)?
5. Я добавил запросы и ответы, спасибо!