了解 Gmail api 配额

KSz*_*eto 6 google-api quota gmail-api

我已阅读此处的 gmail api 配额说明(https://developers.google.com/gmail/api/v1/reference/quota),但仍无法理解导致我们超出限制的原因。

问题 1:每用户配额中的用户是多少?我不确定该用户是个人 gmail 用户,还是使用 gmail api 的服务客户端。

问题 2:我们已经多次看到以下错误,但没有看到任何明显的限制。

"error": {
 "errors": [
  {
   "domain": "usageLimits",
   "reason": "rateLimitExceeded",
   "message": "Rate Limit Exceeded"
  }
 ],
 "code": 429,
 "message": "Rate Limit Exceeded"
}
Run Code Online (Sandbox Code Playgroud)

我们的速度低于 250 单位/秒和 25,000 单位/100 秒。我们只使用history.list和message.get调用,不发送或修改。
我还缺少其他配额吗?

DaI*_*mTo 3

  1. 用户配额取决于您正在访问的帐户。所以这就是 GMail 帐户。有时你可以通过发送随机的quotaUser来欺骗它,但这并不总是有效谷歌还使用你的IP地址来跟踪我怀疑的配额。

  2. 用户速率限制是您要快速进行的防洪措施。

每用户速率限制 每用户每秒 250 个配额单位,移动平均值(允许短突发)

超过速率限制将导致 HTTP 403 或 HTTP 429 Too Many Requests 响应,您的应用程序应通过指数退避重试来响应。

Google 的计算并不完美,您可能发送更多或更少,但仍然达到此配额。只需实施指数退避即可。

指数退避

简单指数退避的实现流程如下:

  1. 向 API 发出请求。
  2. 接收 HTTP 403 速率限制响应,这表明您应该重试该请求。
  3. 等待 1 + random_number_milliseconds 秒并重试请求。
  4. 接收 HTTP 403 速率限制响应,这表明您应该重试该请求。
  5. 等待 2 + random_number_milliseconds 秒,然后重试该请求。
  6. 接收 HTTP 403 速率限制响应,这表明您应该重试该请求。
  7. 等待 4 + random_number_milliseconds 秒,然后重试该请求。
  8. 接收 HTTP 403 速率限制响应,这表明您应该重试该请求。
  9. 等待 8 + random_number_milliseconds 秒,然后重试该请求。
  10. 接收 HTTP 403 速率限制响应,这表明您应该重试该请求。
  11. 等待 16 + random_number_milliseconds 秒,然后重试该请求。
  12. 停止。报告或记录错误。