Как получить профиль пользователя и его календари с помощью Microsoft Graph API?

Я могу получить профиль пользователя с помощью Microsoft Graph API, а также их календари в моем веб-приложении. Иногда мне нужно получить их в одном запросе; например, сеть слишком медленная или по какой-то причине. Однако в ответе этого API GET /me нет свойства о календарях. Как я могу с этим справиться?

Я использую следующий код с помощью Graph Client:

// get the user's profile
var me = await _serviceClient.Me.Request().GetAsync();

// list the user's calendars
var result = _serviceClient.Me.Calendars.Request().GetAsync();

Кто-нибудь может мне помочь? Большое Вам спасибо.


person AMars.K    schedule 29.10.2018    source источник
comment
Вы пробовали batch конечную точку?   -  person Keen Jin    schedule 29.10.2018


Ответы (3)


Согласно вашему описанию, я предполагаю, что вы хотите получить профиль пользователя и перечислить его профиль в одном запросе.

Обратитесь к этому документу, мы можем использовать следующий API для сделай это.

`https://graph.microsoft.com/v1.0/$batch`

И мы можем поместить два запроса в тело, вот так:

`{
  "requests": [
    {
      "id": "1",
      "method": "GET",
      "url": "/me"
    },
    {
      "id": "2",
      "method": "GET",
      "url": "/me/calendars"
    }
    ]
}`

Мы можем получить такой результат (скриншот для краткости был усечен)  Результат

person Keen Jin    schedule 30.10.2018
comment
Это именно то, что мне нужно. Благодарю за ответ. - person AMars.K; 30.10.2018

Microsoft Graph, по своей сути, представляет собой агрегатор API. Другими словами, он действует как прокси для API-интерфейсов нескольких продуктов (Azure Active Directory, Exchange Online, SharePoint, OneDrive, OneNote и т. Д.). Как правило, вы не можете получать данные через границы API.

В этом случае /me получает данные из Azure Active Directory, а /calendars - из Exchange Online. Таким образом, вы не можете получить оба набора результатов из одного вызова.

Вы можете использовать пакетную обработку JSON, чтобы приблизиться к одному вызову, но я Не уверен, что это будет иметь большое значение. Накладные расходы, связанные с двумя вызовами по сравнению с одним, довольно минимальны, и размер результатов должен быть почти одинаковым независимо от этого. Пакетная обработка JSON позволяет вам выполнить один вызов, но для этого требуется немного большая полезная нагрузка запроса (JSON для выполнения) и, опять же, размер результата должен быть идентичен двум вызовам). Я ожидал, что любая разница в производительности будет в лучшем случае незначительной.

person Marc LaFleur    schedule 29.10.2018
comment
Спасибо за Ваш ответ. Я многое понял из твоего ответа. - person AMars.K; 30.10.2018

Чтобы добавить к комментариям Марка, вы не должны предполагать, что пакетирование - это самое быстрое решение, потому что HTTP-запросы могут отправляться параллельно. С задачами нужно немного поиграть, но нет причин, по которым нужно выполнять несколько вызовов последовательно.

Вот график от Fiddler для пакетного вызова, выполняющего то же самое, что и два других вызова.

введите описание изображения здесь

person Darrel Miller    schedule 31.10.2018