关于 rate-limiting
面向 Symfony 的限流技能,用于为端点及其他调用行为设计和应用速率限制。它指导算法选择、调用方识别、响应处理与测试,并强调限流不能替代授权。
主要功能
- 01比较滑动窗口、令牌桶和固定窗口
- 02定义限流速率与突发量
- 03在控制器、服务或订阅器中应用限流
- 04返回带 Retry-After 的 429 响应
- 05测试放行、拒绝与重置
适用场景
- 01限制登录和密码重置尝试
- 02限制公共 API 或写入请求
- 03按流量模式选择限流算法
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill rate-limiting安装后在 Claude Code 中输入/rate-limiting确认已加载。
附带文件reference.md
详细介绍
速率限制(Symfony)
适用场景
- 限制调用方访问端点的频率:登录、密码重置、公共 API,以及任何公开的写入操作。
- 在滑动窗口、令牌桶和固定窗口之间进行选择。
- 通过控制器属性、服务或全局事件订阅器应用限流器。
- 返回正确的 429 响应并附带
Retry-After。 - 等待令牌释放,而不是直接拒绝请求。
默认工作流
- 明确限流对象,以及用于识别调用方的信息。
- 根据流量特征选择算法,并说明速率和突发容量。
- 在
framework.rate_limiter下声明策略,每个限流器对应一项。 - 在拒绝请求的位置应用限流器,并以 429 响应,同时附带
Retry-After。 - 通过测试验证限流:通过的调用、被拒绝的调用,以及重置。
防护措施
- 调用方身份决定计数对象。在代理后,如果客户端地址不可信,所有人都会被视为同一个调用方。
- 限流器不负责授权。它只限制速率,从不决定权限。
- 使用 429 和
Retry-After拒绝请求,绝不能静默丢弃请求或返回 500。 - 存储按进程隔离的限流器无法跨多个工作进程进行限流。
- 预留令牌会阻塞调用进程:绝不要在 Web 请求中这样做。
渐进式披露
- 使用此文件了解执行规范和风险控制。
- 需要深入了解实现细节时,打开参考资料。
输出约定
- 限流策略,包含每项策略所用的算法、速率和突发容量。
- 每个限流器的应用位置,以及所依据的调用方身份。
- 429 响应的结构,包括响应头。
- 覆盖请求通过、请求被拒绝和重置的测试。
参考资料
reference.md
评论
支持 Markdown