我试过engage with the API team via Twitter但我没有得到回应,而且发展在这里停滞不前......
总之,在针对OneNote API进行开发时,我一直得到429,我知道this suggests I'm hitting the API too hard,但我不是。
最糟糕的是,我每分钟要做1或2个请求,在我开发时由我手动调用。有时我会在通话之间留出10-15分钟,有时候这种方式有效,有时候不行。
过去几天我一直在研究一个特定的问题。 在我的代码中,我打电话来获取所有笔记本,部分和单个查询中的节组(过滤为仅返回某些笔记本中的数据)
然后,我再次拨打电话,获取这些笔记本的所有更新页面。我一直在摆弄过滤器字符串以使第二次调用工作(我现在认为我有),但是在10次中有9次我在第二次API调用时得到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“代理请求超时”。这是因为我在笔记本谓词周围添加了括号。
所以我几乎无法继续开发,请如何解决这个问题?
答案 0 :(得分:0)
只是预感:您是否可以尝试将第二个调用(用于获取更新的页面)拆分为单独的http请求(每个笔记本ID一个)?
此外,如果你想要的是更新通知,webhooks可能是更好的方式。
最后为Twitter上的沉默道歉。
答案 1 :(得分:0)
作为短期解决方法,请尝试以下操作:
而不是一个查询:
/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}'
答案 2 :(得分:0)
不幸的是,你在我们的GET Pages API中遇到了一个错误的错误(当使用过滤器和其他查询参数调用时)。实际上,我们在调用索引服务时应用过滤器的工作很糟糕(这反过来限制了我们)。我们已经发现这是一个持续存在的问题,它开始限制呼叫者,特别是在负载很重的情况下。
短期解决方法:我们正在摆弄我们的容量,并在我们处理长期修复工作时暂时提升我们的合作伙伴索引服务设置的限制限制。希望这将为您提供更少的429。
作为一个面向未来的解决方案,我也鼓励您研究@Jorge建议的答案。 (删除count = true查询参数并仅过滤1个parentNotebookId(没有lastModifiedTime过滤)