mcpField
A
api-rate-limiting

api-rate-limiting

github.com/secondsky安全240497 次安装5 周前更新
代码仓库

关于 api-rate-limiting

面向 API 开发者的限流指南,介绍按用户和端点设置策略,并示范多种算法、Express 中间件及响应头配置。

主要功能

  1. 01令牌桶、滑动窗口和固定窗口算法
  2. 02Express 限流中间件示例
  3. 03限流响应头说明
  4. 04分层请求限制策略
  5. 05分布式限流最佳实践

适用场景

  1. 01限制单个用户的 API 请求频率
  2. 02为不同 API 端点设置限额
  3. 03向限流响应添加标准头信息
  4. 04为不同订阅层级配置请求上限

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/secondsky/claude-skills --skill api-rate-limiting

安装后在 Claude Code 中输入/api-rate-limiting确认已加载。

详细介绍

API 速率限制

使用按用户和按端点的策略,通过速率限制算法保护 API 免遭滥用。

算法

算法优点缺点
令牌桶可处理突发请求,速率平稳每个用户都占用内存
滑动窗口精确占用大量内存
固定窗口简单窗口边界处可能出现流量峰值

令牌桶(Node.js)

class TokenBucket {
  constructor(capacity, refillRate) {
    this.capacity = capacity;
    this.tokens = capacity;
    this.refillRate = refillRate; // tokens per second
    this.lastRefill = Date.now();
  }

  consume() {
    this.refill();
    if (this.tokens >= 1) {
      this.tokens--;
      return true;
    }
    return false;
  }

  refill() {
    const now = Date.now();
    const elapsed = (now - this.lastRefill) / 1000;
    this.tokens = Math.min(this.capacity, this.tokens + elapsed * this.refillRate);
    this.lastRefill = now;
  }
}

Express 中间件

const rateLimit = require('express-rate-limit');

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100,
  standardHeaders: true,
  message: { error: 'Too many requests, try again later' }
});

app.use('/api/', limiter);

响应头

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1705320000
Retry-After: 60

分级限制

等级每小时请求数
免费100
Pro1,000
企业版10,000

最佳实践

  • 使用 Redis 实现分布式速率限制
  • 在响应中包含适当的响应头
  • 返回 429 状态码并设置 Retry-After
  • 为不同套餐实施分级限制
  • 监控速率限制指标
  • 在负载下进行测试

评论

支持 Markdown