SuperAPI AI 工具集

api-rate-limiting

安全与审计

查看项目

更新于 10-15 12:35

技能介绍

API 限流(API Rate Limiting)

概述

使用多种限流算法,通过按用户、按 IP 和按接口端点的策略,保护 API 免受滥用并管理流量。

适用场景

  • 保护 API 免受暴力破解攻击
  • 管理流量峰值
  • 实现分级服务方案
  • 防止 DoS 攻击
  • 实现资源分配的公平性
  • 执行配额与使用限制

快速开始

最小可用示例:

// 令牌桶限流器
class TokenBucket {
  constructor(capacity, refillRate) {
    this.capacity = capacity;
    this.tokens = capacity;
    this.refillRate = refillRate; // 每秒补充的令牌数
    this.lastRefillTime = Date.now();
  }

  refill() {
    const now = Date.now();
    const timePassed = (now - this.lastRefillTime) / 1000;
    const tokensToAdd = timePassed * this.refillRate;

    this.tokens = Math.min(this.capacity, this.tokens + tokensToAdd);
    this.lastRefillTime = now;
  }

  consume(tokens = 1) {
    this.refill();

    if (this.tokens >= tokens) {
      this.tokens -= tokens;
      return true;
    }
// ...(完整实现见参考指南)

参考指南

references/ 目录下的详细实现:

指南 内容
Token Bucket Algorithm 令牌桶算法
Sliding Window Algorithm 滑动窗口算法
Redis-Based Rate Limiting 基于 Redis 的限流
Tiered Rate Limiting 分级限流
Python Rate Limiting (Flask) Python 限流(Flask)
Response Headers 响应头

最佳实践

✅ 建议

  • 在响应中包含限流响应头
  • 使用 Redis 进行分布式限流
  • 为不同用户方案实现分级限制
  • 设置合适的窗口大小与限制值
  • 监控限流指标
  • 提供清晰的重试指引
  • 在 API 文档中说明限流规则
  • 在高负载下进行测试

❌ 避免

  • 在生产环境中使用内存存储
  • 将限制设置得过于严格
  • 忘记包含 Retry-After 响应头
  • 忽略分布式场景
  • 将限流规则公开(安全考虑)
  • 在分布式系统中使用简单计数器
  • 忘记清理旧数据