mcpField
A
api-rate-limiting

api-rate-limiting

github.com/aj-geddes安全373642 次安装34 周前更新
代码仓库

关于 api-rate-limiting

用于保护 API 并管理流量的限流技能,涵盖按用户、IP 和端点设置限制,以及算法和实现参考。

主要功能

  1. 01按用户、IP 和端点限流
  2. 02令牌桶与滑动窗口指南
  3. 03基于 Redis 的限流
  4. 04分层限制与配额
  5. 05限流响应标头

适用场景

  1. 01保护 API 免受暴力尝试
  2. 02管理流量高峰和 DoS 风险
  3. 03为服务计划应用使用配额
  4. 04公平分配 API 资源

安装

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

$npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill api-rate-limiting

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
python-rate-limiting-flask.md
redis-based-rate-limiting.md
response-headers.md
sliding-window-algorithm.md
tiered-rate-limiting.md
token-bucket-algorithm.md
scripts/
validate-api.sh
templates/
api-scaffold.yaml

详细介绍

API 速率限制

目录

概述

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

适用场景

  • 保护 API 免受暴力破解攻击
  • 管理流量高峰
  • 实施分级服务计划
  • 防止 DoS 攻击
  • 确保资源分配公平
  • 强制执行配额和使用限制

快速开始

最简可运行示例:

// Token Bucket Rate Limiter
class TokenBucket {
  constructor(capacity, refillRate) {
    this.capacity = capacity;
    this.tokens = capacity;
    this.refillRate = refillRate; // tokens per second
    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;
    }
// ... (see reference guides for full implementation)

参考指南

references/ 目录中的详细实现:

指南内容
令牌桶算法令牌桶算法
滑动窗口算法滑动窗口算法
基于 Redis 的速率限制基于 Redis 的速率限制
分级速率限制分级速率限制
Python 速率限制(Flask)Python 速率限制(Flask)
响应头响应头

最佳实践

✅ 应该做
  • 在响应中包含速率限制标头
  • 使用 Redis 实现分布式速率限制
  • 为不同用户计划实施分级限制
  • 设置适当的窗口大小和限制
  • 监控速率限制指标
  • 提供清晰的重试指引
  • 在 API 文档中说明速率限制
  • 在高负载下进行测试
❌ 不应该做
  • 在生产环境中使用内存存储
  • 将限制设置得过于严格
  • 忘记包含 Retry-After 标头
  • 忽略分布式场景
  • 公开速率限制(安全风险)
  • 在分布式系统中使用简单计数器
  • 忘记清理旧数据

评论

支持 Markdown