如何使用 Microsoft Graph API 检索用户的个人资料和用户的日历?
How to retrieve the user's profile and the user's calendars using the Microsoft Graph API?
我可以使用 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();
谁能帮帮我?非常感谢。
Microsoft Graph 的核心是 API 聚合器。换句话说,它充当多个产品 API 的代理(Azure Active Directory、Exchange Online、SharePoint、OneDrive、OneNote 等)。通常,您无法跨 API 边界检索数据。
在这种情况下,/me
从 Azure Active Directory 中提取数据,而 /calendars
从 Exchange Online 中提取数据。因此,您无法通过一次调用检索两个结果集。
您可以使用 JSON Batching 来估计单个调用,但我不确定它是否会产生很大的不同。与一次调用相比,两次调用的开销非常小,而且无论如何,结果的大小应该几乎相同。 JSON 批处理允许您进行单个调用,但它需要稍大的请求负载(JSON 才能执行),而且结果大小应该与两次调用相同)。我希望任何性能差异充其量可以忽略不计。
根据您的描述,我假设您想获取用户的个人资料并在一个请求中列出他的个人资料。
参考this document,我们可以用下面的API来实现
`https://graph.microsoft.com/v1.0/$batch`
我们可以把这两个请求放在正文中,像这样:
`{
"requests": [
{
"id": "1",
"method": "GET",
"url": "/me"
},
{
"id": "2",
"method": "GET",
"url": "/me/calendars"
}
]
}`
我们可以得到这样的结果(为简洁起见,屏幕截图已被截断)
补充一下 Marc 的评论,您不应该假设批处理是最快的解决方案,因为 HTTP 请求可以并行发出。 Tasks 确实需要花一些时间,但没有理由需要按顺序执行多个调用。
这是一个来自 Fiddler 的时间线,其中一个批处理调用与其他两个调用执行相同的操作。
我可以使用 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();
谁能帮帮我?非常感谢。
Microsoft Graph 的核心是 API 聚合器。换句话说,它充当多个产品 API 的代理(Azure Active Directory、Exchange Online、SharePoint、OneDrive、OneNote 等)。通常,您无法跨 API 边界检索数据。
在这种情况下,/me
从 Azure Active Directory 中提取数据,而 /calendars
从 Exchange Online 中提取数据。因此,您无法通过一次调用检索两个结果集。
您可以使用 JSON Batching 来估计单个调用,但我不确定它是否会产生很大的不同。与一次调用相比,两次调用的开销非常小,而且无论如何,结果的大小应该几乎相同。 JSON 批处理允许您进行单个调用,但它需要稍大的请求负载(JSON 才能执行),而且结果大小应该与两次调用相同)。我希望任何性能差异充其量可以忽略不计。
根据您的描述,我假设您想获取用户的个人资料并在一个请求中列出他的个人资料。
参考this document,我们可以用下面的API来实现
`https://graph.microsoft.com/v1.0/$batch`
我们可以把这两个请求放在正文中,像这样:
`{
"requests": [
{
"id": "1",
"method": "GET",
"url": "/me"
},
{
"id": "2",
"method": "GET",
"url": "/me/calendars"
}
]
}`
我们可以得到这样的结果(为简洁起见,屏幕截图已被截断)
补充一下 Marc 的评论,您不应该假设批处理是最快的解决方案,因为 HTTP 请求可以并行发出。 Tasks 确实需要花一些时间,但没有理由需要按顺序执行多个调用。
这是一个来自 Fiddler 的时间线,其中一个批处理调用与其他两个调用执行相同的操作。