限流
預設配額
| 維度 | 配額 |
|---|---|
每個 (AppID, 客戶端 IP) 每分鐘 | 600 次請求 |
| 視窗 | 60 秒(滾動) |
| 超出返回 | HTTP 429 |
實際配額可能根據賬號等級調整,請以你賬號實際值為準。
429 響應
json
{
"code": 429,
"message": "請求過於頻繁,請稍後再試",
"data": null
}部分情況下還會附帶 Retry-After 響應頭,單位秒。
客戶端建議
1. 退避重試(針對 429 / 5xx)
python
import time, random
def call_with_retry(fn, *args, max_attempts=4):
for attempt in range(max_attempts):
try:
resp = fn(*args)
if resp.get('code') == 429:
wait = (2 ** attempt) + random.random()
time.sleep(min(wait, 30))
continue
return resp
except Exception:
if attempt == max_attempts - 1:
raise
time.sleep(2 ** attempt)不要無限重試
對 4xx(除 429)不要重試 —— 是請求本身的問題,重試只會重複失敗。
2. 控制併發
如果你的業務側需要批次開卡,建議:
- 單 worker 順序請求(< 10 QPS)
- 多 worker 時透過佇列控制總併發,留出餘量給其他業務
3. 不要觸發限流來"測試"
每次 429 都計入限流計數,可能讓你後續真實請求被拒。用小流量手工驗證即可。
與冪等鍵的配合
如果你因 429 重試,請保持同一個 Idempotency-Key(針對寫介面)。這樣即使有一次請求實際到達後端但響應丟失,重試也不會重複開卡。