0

我可以使用 Microsoft Graph API 以及我的 Web 应用程序中的日历检索用户的个人资料。有时,我必须在一个请求中得到它们;比如网络太慢或者某些原因。但是,此 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();

任何人都可以帮助我吗?非常感谢。

4

3 回答 3

1

Microsoft Graph 的核心是一个 API 聚合器。换句话说,它充当多个产品 API(Azure Active Directory、Exchange Online、SharePoint、OneDrive、OneNote 等)的代理。通常,您无法跨 API 边界检索数据。

在这种情况下,/me从 Azure Active Directory 中提取数据,同时/calendars从 Exchange Online 中提取数据。因此,您无法从一次调用中检索两个结果集。

您可以使用JSON Batching来近似单个调用,但我不确定它是否会产生很大的不同。两次调用与一次调用的开销非常小,无论如何结果的大小应该几乎相同。JSON Batching 允许您进行一次调用,但它需要稍大的请求负载(要执行的 JSON),而且结果大小应该与两次调用相同)。我希望任何性能差异充其量都可以忽略不计。

于 2018-10-29T15:02:56.313 回答
1

为了补充 Marc 的评论,您不应该假设批处理是最快的解决方案,因为 HTTP 请求可以并行发出。使用 Tasks 确实需要一些麻烦,但没有理由需要按顺序执行多个调用。

这是来自 Fiddler 的一个批处理调用的时间线,该批处理调用与其他两个调用执行相同的操作。

在此处输入图像描述

于 2018-10-31T03:13:34.187 回答
0

根据您的描述,我假设您想要获取用户的个人资料并在一个请求中列出他的个人资料。

参考这个文档,我们可以使用下面的 API 来做。

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

我们可以将这两个请求放在正文中,如下所示:

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

我们可以得到这样的结果(为简洁起见,截图已被截断) 结果

于 2018-10-30T01:16:06.063 回答