不断收到 429(请求过多)节流错误
Keep getting 429 (Too Many Requests) throttling errors
我试过 engage with the API team via Twitter 但我没有得到回应,开发在这里逐渐停止......
简而言之,我在针对 OneNote API 开发时一直得到 429,我知道 this suggests I'm hitting the API too hard,但我不是。
在最坏的情况下,我每分钟可能执行 1 或 2 个请求,在我开发时由我手动调用。有时我会在两次通话之间留出 10-15 分钟,有时这有效,有时无效。
最近几天我一直在处理一个特定的问题。
在我的代码中,我调用以在单个查询中获取所有笔记本、部分和部分组(过滤为仅来自某些笔记本的 return 数据)
然后我再次调用以获取这些笔记本的所有更新页面。我一直在摆弄过滤器字符串以使第二个调用正常工作(我现在认为我已经做到了),但是在第二次 API 调用中,我在 10 次中有 9 次得到 429。
有什么方法可以让我的用户帐户列入白名单吗?
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 "Proxy request timeout"。这是因为我在笔记本谓词周围添加了括号。
所以我几乎无法继续开发,请问我该如何解决?
只是一个预感:您可以尝试将第二个调用(用于获取更新的页面)拆分为单独的 http 请求(一个用于每个笔记本 ID)吗?
此外,如果您想要的是更新通知,webhooks 可能是更好的选择。
最后对 Twitter 上的沉默表示歉意。
作为短期解决方法,请尝试以下操作:
而不是一个查询:
/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}'
不幸的是,您在我们的 GET 页面 API 中遇到了一个严重错误(当使用过滤器和其他查询参数调用时)。实际上,我们在调用我们的索引服务时应用过滤器的工作很糟糕(这反过来会限制我们)。我们已将此确定为一个持续存在的问题,它开始限制呼叫者,尤其是在高负载下。
短期解决方法:我们正在调整我们的容量并临时提高我们的合作伙伴索引服务设置的限制,同时我们致力于长期修复。希望这将使您以后的 429 更少。
作为面向未来的解决方案,我还鼓励您查看@Jorge 的建议答案。 (删除 count=true 查询参数并仅在 1 个 parentNotebookId 上进行过滤(无 lastModifiedTime 过滤)
我试过 engage with the API team via Twitter 但我没有得到回应,开发在这里逐渐停止......
简而言之,我在针对 OneNote API 开发时一直得到 429,我知道 this suggests I'm hitting the API too hard,但我不是。
在最坏的情况下,我每分钟可能执行 1 或 2 个请求,在我开发时由我手动调用。有时我会在两次通话之间留出 10-15 分钟,有时这有效,有时无效。
最近几天我一直在处理一个特定的问题。 在我的代码中,我调用以在单个查询中获取所有笔记本、部分和部分组(过滤为仅来自某些笔记本的 return 数据)
然后我再次调用以获取这些笔记本的所有更新页面。我一直在摆弄过滤器字符串以使第二个调用正常工作(我现在认为我已经做到了),但是在第二次 API 调用中,我在 10 次中有 9 次得到 429。
有什么方法可以让我的用户帐户列入白名单吗?
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 "Proxy request timeout"。这是因为我在笔记本谓词周围添加了括号。
所以我几乎无法继续开发,请问我该如何解决?
只是一个预感:您可以尝试将第二个调用(用于获取更新的页面)拆分为单独的 http 请求(一个用于每个笔记本 ID)吗?
此外,如果您想要的是更新通知,webhooks 可能是更好的选择。
最后对 Twitter 上的沉默表示歉意。
作为短期解决方法,请尝试以下操作:
而不是一个查询:
/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}'
不幸的是,您在我们的 GET 页面 API 中遇到了一个严重错误(当使用过滤器和其他查询参数调用时)。实际上,我们在调用我们的索引服务时应用过滤器的工作很糟糕(这反过来会限制我们)。我们已将此确定为一个持续存在的问题,它开始限制呼叫者,尤其是在高负载下。
短期解决方法:我们正在调整我们的容量并临时提高我们的合作伙伴索引服务设置的限制,同时我们致力于长期修复。希望这将使您以后的 429 更少。
作为面向未来的解决方案,我还鼓励您查看@Jorge 的建议答案。 (删除 count=true 查询参数并仅在 1 个 parentNotebookId 上进行过滤(无 lastModifiedTime 过滤)