Docs速率限制

速率限制

了解FreeFileTools API的速率限制以及如何在应用程序中处理它们。

免费套餐限制

限制
每小时请求数50
每次请求的最大文件大小25 MB
速率限制窗口Rolling 1 hour

速率限制按API Key应用。每个密钥有独立的计数器,在滚动的一小时周期内重置。

超出速率限制时

超出速率限制时,API返回429 Too Many Requests响应:

json
{
  "error": "Rate limit exceeded",
  "message": "You have exceeded the rate limit of 50 requests per hour. Please try again later.",
  "retryAfter": 1742
}

retryAfter字段指示在发送下一个请求之前需要等待的秒数。

速率限制响应头

每个API响应都包含帮助您跟踪速率限制使用情况的头:

描述
X-RateLimit-Limit每小时允许的最大请求数(50)
X-RateLimit-Remaining当前窗口中剩余的请求数
Retry-After重试前等待的秒数(仅在429响应时)

响应头示例

http
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42

保持在限制范围内的技巧

1.

检查剩余请求数

监控X-RateLimit-Remaining头以了解剩余请求数量。

2.

实现指数退避

收到429响应时,使用递增的延迟进行等待和重试,而不是频繁请求API。

3.

缓存结果

如果重复处理相同的文件,请在本地缓存结果以避免不必要的API调用。

4.

合理批量处理

进行批量处理时,将请求分散在时间上,而不是一次性全部发送。

示例:在JavaScript中处理速率限制

javascript
async function apiCall(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status === 429) {
      const retryAfter = parseInt(response.headers.get("Retry-After") || "60");
      console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
      await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
      continue;
    }

    return response;
  }

  throw new Error("Max retries exceeded");
}