1

我正在使用 Microsoft Graph API 我正在为组使用 Delta API。我为每个组创建一个增量请求(我没有跟踪所有组,只跟踪特定组)。

我已经检查了这个问题并阅读了提到的文档。我已经在这里阅读了 GitHub 上的问题

我正在与同一个租户工作,同时使用 delta 响应开发了几周。除了一次,它总是几乎按预期工作。当我提出 delta 请求时,我得到了 nextLink,我跟着它直到我得到了 deltaLink。我说它几乎可以按预期工作,因为很多时候,在第一次/两次数据响应之后,我大部分时间都得到了另外 1-3 个没有额外数据的下一个链接。

我上次尝试时,在函数超时之前,我收到了大约 150 个 nextLinks 响应,除了前几个响应之外,所有这些响应都没有数据。

这是一个测试环境,组中有大约 30 个用户。

我用过

https://graph.microsoft.com/v1.0/groups/delta?$select=id,displayName,members&$filter=id eq 'groupId'`

在无限循环中,这些是我得到的响应

{
   "id":"402-xxx-ee0",
   "status":200,
   "headers":{
      "Preference-Applied":"odata.track-changes",
      "Cache-Control":"no-cache",
      "OData-Version":"4.0",
      "Content-Type":"application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8"
   },
   "body":{
      "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#groups",
      "@odata.nextLink":"https://graph.microsoft.com/v1.0/groups/delta?$skiptoken=5ZZ_<long_token>_OXWrtiE",
      "value":[

      ]
   }
}

如您所见,它们的值中没有数据,但我仍然得到 nextLink 当我关注下一个链接时,我得到了

{
   "id":"402-xxx-ee0",
   "status":200,
   "headers":{
      "Preference-Applied":"odata.track-changes",
      "Cache-Control":"no-cache",
      "OData-Version":"4.0",
      "Content-Type":"application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8"
   },
   "body":{
      "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#groups",
      "@odata.nextLink":"https://graph.microsoft.com/v1.0/groups/delta?$skiptoken=5ZZ_<long_token>_DNF5rRE0",
      "value":[

      ]
   }
}

如您所见,另一个响应带有另一个下一个链接(另一个链接),它再次返回空值。

这种情况再次发生,直到我的功能超时。

我希望在没有更多数据的第一个响应之前获得 deltaLink,或者在第一个空响应时获得最大值。

4

1 回答 1

1

具有空数组作为值和下一个链接的响应是身份实体(用户、组、应用程序、服务主体...)的 delta 函数的正常行为,表明并非所有更改都已被枚举并且更改的复制正在发生后端。

每当您遇到这种情况(空数组 + 下一个链接)时,您的应用程序应该在查询下一个链接之前暂停,为复制留出时间并避免无限循环。

如果您发现这种行为在正常情况下过于频繁地发生,您应该联系支持人员。

于 2020-06-04T14:57:33.977 回答