Outlook graphQL Api 读取联系人遗漏了很多联系人

问题描述 投票:0回答:1

我通过 API 使用 GraphQL 开发了 Outlook 联系人查询。 但是,在 Outlook Web 界面中,您可以看到“所有联系人”下显示的联系人比我通过 API 查询获取的联系人多得多。

graphQL 查询考虑 Default、ContactFolder、ChildFolders 和 User。尽管如此,API 查询仅返回大约 90 个联系人,而在 Outlook 中的“所有联系人”下,您可以看到大约有 1000 个可用联系人。

Outlook 帐户正在 Exchange 服务器上运行。查看联系人的详细信息时,值得注意的是,唯一的区别是标识符为 V16 的联系人不同步,而标识符为 V12 的联系人似乎总是同步的。目前还不清楚无法通过 API 查询的联系人是否实际上来自其他来源,例如来自另一台服务器。

问题:如何找出问题所在? 难道是Exchange服务器的权限问题,导致API无法查询所有联系人或目录?没有错误消息。显然,GraphQL 查询实际上只找到了大约 90 个联系人。

outlook graphql synchronization contacts outlook-restapi
1个回答
0
投票

据我所知,Outlook 不提供 GraphQL API。如果我在这里不正确,请分享文档,我可以再看一下。

他们提供的是他们称之为Microsoft Graph的产品,该产品基于OData构建,这是微软驱动的针对其REST风格的开源规范(请注意,GraphQL是不是REST)。

话虽如此,我们来谈谈 Microsoft Graph 和分页。使用 OData,要获取所有结果(超过一页的结果),您必须一次查询一页。

第 1 页:
$top

这里是“我的联系人”的前 500 个结果(我认为每页最多 1000 个)的可能查询:

GET https://graph.microsoft.com/v1.0/me/contacts?$top=500

第 2 页:
$skipToken

如果有第 2 页,第 1 页的 JSON 结果将包含一个名为

@odata.nextLink
的属性,它是一个包含相同页面大小和
$skipToken
的 URL(因此您不必进行数学计算计算出当您达到更多页数时需要多少
$skip
)。

{
  ...
  "@odata.nextLink": "https://graph.microsoft.com/v1.0/users?$top=5&$skiptoken=RFNwdAIAAQAAAD8...AAAAAAAA"
  ...
}

那么,对于第 2 页,只需使用他们给您的 URL:

GET https://graph.microsoft.com/v1.0/users?$top=5&$skiptoken=RFNwdAIAAQAAAD8...AAAAAAAA

然后,如果有第 3 页,您将获得另一个

nextLink

这是“服务器驱动的分页”。

第 2 页 备用:
$top
$skip

如果您想从头开始直接跳到第 2 页——或者如果您喜欢自己计算——您可以使用“客户端驱动的分页”来实现,它同时使用

$top
$skip
。这也会给你第 2 页:

GET https://graph.microsoft.com/v1.0/me/contacts?$top=500&$skip=500
© www.soinside.com 2019 - 2024. All rights reserved.