调用 API 前必须先获取 API Key
所有 API 请求均需通过 X-API-Key 请求头进行身份认证。没有有效的 API Key,任何端点都无法调用。
概述
为保障服务稳定性和公平性,ImgRoute API 对不同端点设置了独立的 QPS(每秒请求数)限制。超出限制时,API 会返回 429 Too Many Requests 错误。
限制一览
| 端点 | 限制 | 说明 |
|---|---|---|
| 上传图片 (POST /upload) | 10 次/秒 | 获取预签名和实际上传分开计数 |
| 列表查询 (GET /list) | 10 次/秒 | 专业版及以上可用 |
| 删除资源 (DELETE /delete) | 2 次/秒 | 专业版及以上可用 |
| 创建相册 (POST /create_album) | 5 次/秒 | 专业版及以上可用 |
日配额限制
除了 QPS 限制,还有每日上传配额限制:
- 免费用户:每日 50 张
- 专业版:每日 5000 张
- 旗舰版:每日 50000 张
超出日配额会返回 429 DAILY_LIMIT_REACHED 错误。
处理限流
当遇到限流错误时,建议采取以下策略:
1. 指数退避重试
import time
import requests
def upload_with_retry(file_path, max_retries=5):
for attempt in range(max_retries):
try:
response = upload_file(file_path)
return response
except requests.exceptions.HTTPError as e:
if e.response.status_code == 429:
wait_time = 2 ** attempt
time.sleep(wait_time)
else:
raise
raise Exception("Max retries exceeded")
2. 请求排队
import time
import threading
class RequestQueue:
def __init__(self, qps_limit=10):
self.qps_limit = qps_limit
self.interval = 1.0 / qps_limit
self.last_request = 0
self.lock = threading.Lock()
def execute(self, func):
with self.lock:
now = time.time()
elapsed = now - self.last_request
if elapsed < self.interval:
time.sleep(self.interval - elapsed)
self.last_request = time.time()
return func()
响应头信息
当请求被限流时,响应会包含以下头信息:
| 头信息 | 说明 |
|---|---|
Retry-After | 距离可以重试的秒数 |
X-RateLimit-Limit | 当前端点的 QPS 限制 |
X-RateLimit-Remaining | 当前窗口剩余请求数 |
最佳实践
- 批量操作时使用队列控制请求频率
- 对非实时性操作使用延迟重试
- 监控你的请求量,避免达到限制
- 考虑升级到更高套餐以获得更宽松的限制