关于 api-rate-limiting
用于保护 API 并管理流量的限流技能,涵盖按用户、IP 和端点设置限制,以及算法和实现参考。
主要功能
- 01按用户、IP 和端点限流
- 02令牌桶与滑动窗口指南
- 03基于 Redis 的限流
- 04分层限制与配额
- 05限流响应标头
适用场景
- 01保护 API 免受暴力尝试
- 02管理流量高峰和 DoS 风险
- 03为服务计划应用使用配额
- 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.mdredis-based-rate-limiting.mdresponse-headers.mdsliding-window-algorithm.mdtiered-rate-limiting.mdtoken-bucket-algorithm.mdscripts/validate-api.shtemplates/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