【问题标题】:Keep getting 429 (Too Many Requests) throttling errors不断收到 429(请求过多)限制错误
【发布时间】:2016-08-10 06:03:07
【问题描述】:

我尝试engage with the API team via Twitter,但我没有得到回应,开发正在这里停止...

简而言之,我在针对 OneNote API 进行开发时不断收到 429,我知道 this suggests I'm hitting the API too hard,但我不知道。

在最坏的情况下,我每分钟可能会执行 1 或 2 个请求,由我在开发时手动调用。有时我会在两次通话之间留出 10 到 15 分钟,有时这可行,有时不行。

过去几天我一直在研究一个特定的问题。 在我的代码中,我调用以在单个查询中获取所有笔记本、部分和部分组(过滤为仅返回来自某些笔记本的数据)

然后我再次调用以获取这些笔记本的所有更新页面。我一直在摆弄过滤器字符串以使第二次调用正常工作(我现在认为我已经这样做了),但是在第二次 API 调用中我得到 429 的 10 次中有 9 次。

请问有什么方法可以将我的用户帐户列入白名单吗?

FWIW 这是我的第二个查询(空格通常被编码):

/me/notes/pages?count=true&top=100&expand=parentNotebook,parentSection
&filter=(parentNotebook/id eq '{GUID}' or parentNotebook/id eq '{GUID}' or parentNotebook/id eq '{GUID}') and lastModifiedTime gt 2016-08-05T11:34:09.000Z

这确实像我预期的那样工作,日期子句现在正在工作,但我只能偶尔测试一下,因为我得到 429。

顺便说一句,如果我通过 API 控制台运行我的第二个过滤器,我每次都会收到 504“代理请求超时”。这是因为我在笔记本谓词周围添加了括号。

所以我几乎无法继续开发,请问我该如何解决?

【问题讨论】:

    标签: onenote onenote-api


    【解决方案1】:

    作为短期解决方法,请尝试以下方法:

    而不是一个查询:

    /me/notes/pages?count=true&top=100&expand=parentNotebook,parentSection&filter=(parentNotebook/id eq '{GUID}' or parentNotebook/id eq '{GUID}' or parentNotebook/id eq '{GUID}') and lastModifiedTime gt 2016-08-05T11:34:09.000Z
    

    去掉“count=true”(你在用这个吗?),只留下一个 parentNotebookId 过滤器。结果将默认按 LastModifiedTime 降序排列(最近的在前)。

    Perform this query for all the notebooks you're interested in:
    /me/notes/pages?top=100&expand=parentNotebook,parentSection&filter=parentNotebook/id eq '{GUID}'
    

    【讨论】:

    • 谢谢。我将此标记为答案,因为它似乎确实解决了我的直接问题。在过去的一个小时里,我已经运行了很多次,没有 429。虽然我仍在使用 lastModifiedTime 谓词
    【解决方案2】:

    只是预感:您可以尝试将第二个调用(用于获取更新的页面)拆分为单独的 http 请求(每个笔记本 ID 一个)吗?

    此外,如果您想要更新通知,webhook 可能是更好的选择。

    最后对 Twitter 上的沉默表示歉意。

    【讨论】:

    • 我已经按照你的建议 @DipakBoyed 完成了,同样的问题发生了:/api/v1.0/me/notes/pages?count=true&top=100&expand=parentNotebook,parentSection&filter=parentNotebook/id eq '{GUID}'%20and%20lastModifiedTime%20gt%202016-08-06T20:39:35.000Z 今天早上用这个查询调用 API 3 或 4 次后,我再次点击 #429 :(
    • 这对我来说仍然是一个真正的问题。我不能做任何其他事情。你一直在阻止我这个请求。其他都很好。
    • 您好!不幸的是,您在我们的 GET Pages API 中遇到了一个严重错误(当使用过滤器和其他查询参数调用时)。实际上,在调用我们的索引服务时,我们在应用过滤器方面做得很糟糕(这反过来又限制了我们)。我们现在已经发现了这个问题,并且正在努力 1. 长期修复以及 2. 短期解决方法。如果我们提出合理的短期解决方法,我们将再次发布更多详细信息。
    • 更新 2. 短期解决方法:我们调整了容量并提高了合作伙伴索引服务设置的限制,同时我们致力于长期修复。希望这会为您带来更少的 429。
    • 嗨,刚刚又试了一次:[xCorrelationId] => 23320071-a27d-4281-ad0f-369345b193a5 [statusCode] => 429 [reasonPhrase] => 请求太多
    【解决方案3】:

    很遗憾,您在我们的 GET Pages API 中遇到了一个严重错误(当使用过滤器和其他查询参数调用时)。实际上,在调用我们的索引服务时,我们在应用过滤器方面做得很糟糕(这反过来又限制了我们)。我们已将此确定为一个持续存在的问题,该问题开始限制调用者,尤其是在负载较重的情况下。

    短期解决方法:我们正在调整我们的容量并临时提高我们的合作伙伴索引服务设置的限制,同时我们正在努力解决长期问题。希望这将为您带来更少的 429。

    作为面向未来的解决方案,我还鼓励您查看@Jorge 建议的答案。 (删除 count=true 查询参数并仅在 1 个 parentNotebookId 上过滤(无 lastModifiedTime 过滤)

    【讨论】:

      猜你喜欢
      • 2019-10-04
      • 1970-01-01
      • 2020-11-17
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多