Microsoft graph api OneDrive中的节流

Microsoft graph api OneDrive中的节流,microsoft-graph-api,onedrive,Microsoft Graph Api,Onedrive,我们有一个注册的AAD应用程序,标记为多租户。我们正在使用此应用程序ID为Microsoft Graph生成令牌 第一个用户是注册应用程序的租户中的全局管理员 第二个用户是另一个租户的一部分 当第二个用户试图使用Microsoft Graph从OneDrive获取信息时,有时会出现HTTP 429 ActivityLimitReach错误 我们阅读了关于的指南,它说在响应头中的Retry after值之后重复请求。但是在我们的例子中,响应中没有Retry After字段 我们通过每天执行一个

我们有一个注册的AAD应用程序,标记为多租户。我们正在使用此应用程序ID为Microsoft Graph生成令牌

  • 第一个用户是注册应用程序的租户中的全局管理员
  • 第二个用户是另一个租户的一部分
当第二个用户试图使用Microsoft Graph从OneDrive获取信息时,有时会出现
HTTP 429 ActivityLimitReach
错误

我们阅读了关于的指南,它说在响应头中的
Retry after
值之后重复请求。但是在我们的例子中,响应中没有
Retry After
字段

我们通过每天执行一个请求来接收此错误。此外,在收到
429
后,我们可以重试并获得成功的结果(经过多次尝试)。此错误仅出现在OneDrive中,其他服务正常

如何避免
429
错误?我们如何检查或增加当前的限制

请求示例

GET https://graph.microsoft.com/v1.0/users/:userId/drives
响应示例

HTTP/1.1 429 
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: application/json
request-id: 377d2cdf-7be3-4286-819a-46060330365f
client-request-id: 377d2cdf-7be3-4286-819a-46060330365f
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"West Europe","Slice":"SliceA","Ring":"4","ScaleUnit":"000","Host":"AGSFE_IN_13","ADSiteName":"AMS"}}
Duration: 170.5668
Strict-Transport-Security: max-age=31536000
Date: Wed, 23 May 2018 11:39:08 GMT

{
  "error": {
    "code": "activityLimitReached",
    "message": "The request has been throttled",
    "innerError": {
      "request-id": "377d2cdf-7be3-4286-819a-46060330365f",
      "date": "2018-05-23T11:39:09"
    }
  }
}
我们如何避免429错误?我们如何检查或增加当前的限制

为了避免429错误,我们必须控制我们的请求,不要在有限的时间内执行太多的请求。限额问题是已知问题,我们现在不能增加限额

设置和发布精确的节流限制听起来非常简单,但事实上,这并不是最好的方法。我们持续监控SharePoint Online上的资源使用情况。根据使用情况,我们会微调阈值,以便用户能够在不降低SharePoint Online的可靠性和性能的情况下使用最大数量的资源

以上参考来自有关节流和OneDrive for Business/SharePoint的MS文档:


我建议去建议一项改进(或对现有的改进进行投票)。该反馈有助于产品团队根据对建议改进的兴趣来确定未来工作的优先级。但根据上述官方文件,,最好的解决方案仍然是控制我们的请求,而不是功能请求

我对onedrive api没有太多经验,但在使用onenote api时,我确实经历过节流。

这篇文章介绍了在您的问题中,如何比通用的microsoft graph链接更有用。
尤其是,针对api的长时间调用将导致节流比多个目标调用更快发生(并且您需要在发出新调用之前让调用完成,在排队等待多个curl请求时要非常小心)。

一旦节流,反复尝试同一个调用可能会增加节流发生的时间长度(我还没看过一整天,但我已经看过几个小时了)。

我假设(但不确定)所有microsoftgraph api调用在内部都会计入资源限制,但如果您针对onedrive api直接调用onedrive,则不会计入microsoft graph限制,并且可能允许您在不限制的情况下请求。
我绝对建议您为direct onedrive api获取第二个访问令牌(您可以使用相同的刷新令牌),然后尝试这种方法。

GET https://www.onedrive.com/v1.0/users/:userId/drives

如果某个用户出现问题,可能是他们超出了租户资源?

我们使用curl进行了尝试。我们的应用程序在24小时内没有执行任何请求。暂停后,我们使用curl执行了一个请求,并得到一个
HTTP 429 activitylimitreated
错误(响应中未显示
重试后的
标题)。每天对单个请求可以使用哪种类型的限制?不确定OneDrive的限制。根据我对Azure管理API的使用经验,限制可以是10000/月或这样的值。因此每天的值非常低。我们可以联系MS支持以增加限制以支付更多费用。未执行任何请求是错误的e需要超过期限。这种行为听起来像是一个bug,不是一个已知的问题。每天一个请求不能达到任何限制。因为Ivan以前可能发送了太多请求,所以azure会在一段时间内限制他的请求。在这段时间内,每天一个请求击中throtting是正常的,因为它没有限制您是否直接使用onedrive API尝试过相同的场景。这可能会告诉您这是onedrive问题还是microsoftgraph问题?您是否使用客户端凭据或身份验证代码OAuth flow?我们使用这种方法您的应用程序向租户(即所有用户)进行了多少次呼叫?今天我的第一个
请求太多(状态代码429)
。GitHub出现问题,要求提供更多限制信息: