轮询 Microsoft Graph API 以免我受到限制的好策略是什么?

What is a good strategy for polling Microsoft Graph API so that I don't get throttled?

我的目标是维护 "real-time"(或尽可能接近)有关一组用户发送的电子邮件的信息。

我理想的解决方案是定期查询 API 以获取组中所有用户的消息。此功能尚未(尚未?)实施。

我的第二个选择是创建订阅 (https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/subscription_post_subscriptions) for every member in the group and then request message information after I become aware of an event. The problem is, in practice, I am only allowed to create 20-30 simultaneous subscriptions (Issues to use Webhook for Microsoft Graph API),这可能还不够。

所以我坚持在一个周期内轮询所有用户。这种方法的主要问题是我找不到任何信息有多少请求 "too many",即我受到限制。我想最大化请求的数量,以最小化完成一个周期所需的时间。

我想到的一个解决方案是开发一个自适应程序,慢慢减少请求之间的时间直到被限制,然后突然增加一些时间直到找到并保持一个很好的平衡。不过,这似乎需要做很多工作。现在我正在假设 1/秒大约是我可以安全到达的最高速度(每次往返平均 0.5 秒,然后再冷却 0.5 秒)。

通常处理未知限制的最佳方法是什么,尤其是 Microsoft Graph?

编辑:

虽然我认为接受的答案是一个很好的回应,但它可能并不适合所有情况。例如,如果您不想使用 365 API,并且您不介意使用测试版功能,也许您可​​以查看 this(delta 令牌),它似乎是为与数据实时同步。

接受答案的唯一潜在缺点是您仍然需要为每个要跟踪的用户订阅(我认为......),并且这些有限制。很好奇其他人是怎么解决这个问题的。

虽然仍在预览中,但您可能想看看 Outlook Streaming Notifications。这些 API 提供了比简单的网络挂钩更强大的通知模型。您仍然需要建立多个订阅,但我希望您会看到更少的延迟。