什么是限流?

限制是云 API 用来限制在特定时间段内发出的请求数的技术。 限制可确保 API 保持可用并响应所有用户。 它还会阻止任何单个用户消耗过多的资源。

可以通过多种方式体验限制。 一种常见方法是使用 HTTP 状态代码。 例如,当超过允许的请求数时,API 可能会返回 429 Too Many Requests 状态代码。 此响应表明在特定时间段内发出了过多请求,并且应放慢请求频率。 并非每个 API 都使用429:GitHub 也可以返回403,并且当整个 API 过载时,Anthropic 使用529。

除了状态代码,某些 API 还提供响应标头或正文中的详细信息。 例如,他们可能会使用 Retry-After 标头来指示应在发出另一个请求之前等待多长时间。

你需要了解你使用的 API 的节流限制,并知道如何在应用中处理节流,以便在 API 负载过大时保持响应和可靠。

节流如何影响应用

当 API 对应用进行限流而应用未对此进行处理时,应用会崩溃、显示一般性错误、重试速度过快而导致应用持续被限流,或静默丢弃数据。 开发时很少看到这一点,因为 API 很快,你是唯一的用户,并且测试数据很小。

如何测试应用处理限流

Approach 你找到的内容 您错过的内容
等待生产环境 实际限制 一切,直到用户点击它
模拟测试中的 API,或让编码代理编写模拟 重试分支是否运行 API 的实际状态代码、 Retry-After 标头和错误正文,以及 SDK 的重试策略。 你的应用还需要一个仅限测试的开关才能访问 mock 服务。
调用真正的 API,直到它限制你 实际行为 不能按需触发限制,并且会占用实际配额
截获应用的实际流量并模拟限制 实际 URL、实际 SDK 和重试策略,以及应用是否会按照 Retry-After 所述等待相应时长 单独看你的代码。 请把那个留给单元测试。

在你的应用中试用

Dev Proxy 返回所选 API 的限流响应,而应用会不断调用真正的 URL。 它还会告知应用何时在 Retry-After 时间结束前再次调用 API。

下载应用调用的 API 预设,并使用它启动开发代理:

devproxy config get microsoft-graph-rate-limiting
devproxy --config-file "~dataFolder/configs/microsoft-graph-rate-limiting/.devproxy/devproxyrc.json"
API Preset
Microsoft Graph(OneDrive和SharePoint:/drive、/shares、/sites) microsoft-graph-rate-limiting
GitHub github-rate-limiting
OpenAI openai-throttling
Anthropic anthropic-throttling

对于任何其他 API,请参阅 测试我的应用程序是否正确处理限制。 若要安装 Dev Proxy,请参阅 “设置 Dev Proxy”。

后续步骤