速率限制
Shoplazza API 速率限制
为确保平台对所有人保持稳定和公平,所有 Shoplazza API 均设有速率限制。建议开发者采用行业标准技术来限制调用频率、缓存结果并负责任地重试请求。
各 API 速率限制对比
| API | 限速方法 | 标准限制 |
|---|---|---|
| Admin API (REST) | 基于请求数限制 | 每秒 2 个请求 |
Token Bucket 算法
所有 Shoplazza API 均使用 token bucket 算法来管理请求。该算法允许您的应用在一段时间内以不频繁的突发方式发出无限数量的请求。
关于漏桶模型,需要理解的要点如下:
- 每个应用都有一个可容纳(例如)60 个"弹珠"的"桶"。
- 每秒从桶中移除一个弹珠,确保持续有空间可用。
- 每个 API 请求需要向桶中投入一个弹珠。
- 如果桶满了,您将收到错误,必须等待桶中有空间后再重试。
限速方法
基于请求数的限制
应用每分钟可发出的最大请求数有上限。例如,您可以在 60 秒内发出 40 个 API 请求,每个请求计数相同,与返回的数据量无关。
此方法适用于 REST Admin API。
REST Admin API 速率限制
REST Admin API 基于两个维度执行速率限制:应用/店铺维度和店铺维度。这确保来自一个应用的调用不会影响另一个应用的速率限制,即使在同一店铺内也如此。同样,对一个店铺的调用不会影响另一个店铺的速率限制,无论调用是否来自同一应用。
限制使用漏桶算法计算。超出速率限制后的所有请求都会被节流,并返回 HTTP 429 Too Many Requests 错误。当足够多的请求从桶中流出后,请求将重新成功。您可以通过速率限制 header 查看店铺当前的节流状态。
桶大小和泄漏速率属性决定了 API 的突发行为和请求速率。
应用/店铺维度的默认设置如下:
- 桶大小:每个应用/店铺 40 个请求
- 泄漏速率:每秒 2 个请求
店铺维度的默认设置如下:
- 桶大小:每个店铺 80 个请求
- 泄漏速率:每秒 20 个请求
速率限制 Header
您可以通过 Shoplazza 在 API 请求响应中发送的 X-Shoplazza-Shop-Api-Call-Limit header 查看已发出的请求数。该 header 列出了您针对特定店铺已发出的请求数。例如:
X-Shoplazza-Shop-Api-Call-Limit: 32/40
- 32:当前请求计数。
- 40:最大桶容量。
随着请求的发出,计数按泄漏速率递减。例如,如果 header 最初显示 39/40,等待 10 秒后,header 可能显示 19/40。
Retry-After Header
当请求超过速率限制时,将返回 429 Too Many Requests 错误和 Retry-After header。该 header 指定您在重新提交请求前必须等待的秒数。在此期间发出的任何请求都将被节流。
X-Shoplazza-Shop-Api-Call-Limit: 40/40
Retry-After: 2.0