Rate Limiting
速率限制(限流)
01你是不是遇到這個 / THE SYMPTOM
我想防止有人狂按、狂打我的 API,或一支 script 一秒鐘戳我幾百次把伺服器或我付費的第三方額度打爆,想讓「同一個人在一段時間內只能呼叫幾次」
↑ 如果你點頭了,你要的關鍵字就是 Rate Limiting。
02這是什麼 / DEFINITION
Rate Limiting 是限制「同一個用戶/IP/API Key 在單位時間內能呼叫幾次」的機制,超過就回 429 Too Many Requests,用來保護後端不被洪水請求或濫用拖垮。
03什麼時候用 / WHEN TO USE
公開 API、登入/註冊/發驗證碼端點(防暴力破解)、會消耗成本的 AI/簡訊/金流端點、或任何怕被爬蟲與濫用打爆的地方。
04怎麼跟 AI 說 / HOW TO ASK
直接複製這句、貼進 Claude Code / Cursor / Copilot / ChatGPT:
幫我在登入 API 加上 rate limiting,同一個 IP 每分鐘最多 5 次,超過就回 429 並附上 Retry-After 標頭
05常見坑 / WATCH OUT
⚠ 別跟 throttling 完全混為一談:rate limiting 通常是「超過就拒絕(回 429)」,throttling 比較像「放慢/排隊處理」。另一個常被忽略的點:用 IP 限流在有 NAT、代理或 Cloudflare 時可能誤傷一票人,敏感操作最好用帳號或 API Key 當限流維度。
06相關的詞 / RELATED
Idempotency Key冪等鍵
使用者付款時手抖點兩下、或網路逾時重送,結果被扣了兩次款 / 建立了兩筆一樣的訂單;我想確保「同一個操作就算被送很多次,也只會真的執行一次」
Webhook網路鉤子(事件回呼)
我希望「別人那邊一發生某件事,我的系統就立刻知道」——例如有人付款成功、表單被填了、訂單狀態變了,我不想自己每隔幾秒去問一次「好了沒?好了沒?」
Exponential Backoff指數退避
我的 API 偶爾會失敗(網路抖動、對方伺服器忙、被限速 429),我想自動重試。但如果失敗了就馬上一直重試、瘋狂連打,反而把對方打得更死。我想讓「重試的間隔越來越長」,第一次等 1 秒、再來 2 秒、4 秒…不知道這招叫什麼。