Получать события без даты начала и окончания

В Microsoft Graph Calendar API Я могу получить все события по URL-адресу запроса:

/me/calendarView/delta?startDateTime={start_datetime}&endDateTime={end_datetime}

Но я должен указать дату начала и окончания. Есть ли способ просто получить все события без указания дат?

Просто оставив даты вне запроса, я получаю сообщение об ошибке, что эти параметры отсутствуют.


person Sinan Samet    schedule 08.04.2019    source источник


Ответы (1)


Конечная точка /calendarView предназначена для предоставления визуализированного представления календаря для заданного диапазона дат. Без диапазона дат API-интерфейс должен был бы отображать каждое событие в календаре, возможно, за десятилетия. Вычислительные затраты на выполнение этого могут быть чрезмерно высокими, не говоря уже о негативном влиянии, которое это окажет на производительность в масштабе.

Если вам просто нужны необработанные базовые объекты event, вы можете использовать _ 3_ конечная точка. Это даст вам результаты с разбивкой по страницам, содержащие каждое событие в этом календаре. Вам потребуется выполнить некоторую пост-обработку для визуализации отдельных экземпляров повторяющихся событий на основе главного события (т.е. событий с "eventType": "seriesMaster").

В общем, я бы рекомендовал использовать /calendarView, поскольку он обрабатывает экземпляры серии за вас. Вы можете эффективно имитировать получение «всего», передав ему достаточно большое окно, хотя и с падением производительности.

Для иллюстрации вызов следующего URI в Graph Explorer возвращает события за полную декаду (2009-2019):

https://graph.microsoft.com/v1.0/me/calendarview?startdatetime=2009-01-01&enddatetime=2019-12-31

Стоит отметить, что для возврата результата потребовалось 6436 миллисекунд, а данные содержат только небольшое количество событий. Когда я запустил тот же запрос к моему календарю, мне потребовалось 13 883 миллисекунды. Так что чисто с точки зрения производительности я бы не рекомендовал регулярно выполнять запросы более 12 месяцев за раз (т.е. startdatetime=2018-01-01&enddatetime=2018-12-31 заняло 2795 мс).

person Marc LaFleur    schedule 08.04.2019
comment
Спасибо за подробную информацию. Дело в том, что это просто синхронизация, поэтому пара секунд не проблема. Но почти 14 секунд - это действительно много. Я выберу Calendarview с меньшим диапазоном. - person Sinan Samet; 09.04.2019
comment
Если вы выполняете синхронизацию, вам следует используйте Deltas вместо того, чтобы каждый раз вытягивать все целиком. Первый проход дает вам все, но последующие вызовы вернут только изменения в календаре. Это сэкономит вам много обработки. - person Marc LaFleur; 09.04.2019
comment
Да, это то, что я имел в виду, поэтому мне было наплевать на время первой синхронизации. Однако, если я использую дельты, будут ли даты начала и окончания применяться к дельте? Даже если я не передаю ему параметры? - person Sinan Samet; 09.04.2019
comment
Да, он сохранит окошко даты. Вот почему я предложил использовать полный год. Когда я делал это в прошлом, у меня было два токена. Один на текущий год, другой на следующий год. 31 декабря я делаю следующий токен текущим и получаю новую дельту на следующий год. - person Marc LaFleur; 09.04.2019