讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 FastAPI 中使用 SlowAPI 统一配置全局速率限制

酷宇大大_7566

酷宇大大_7566

发布时间:2026-10-27 08:34:06

|

198人浏览过

|

来源于php中文网

原创

如何在 FastAPI 中使用 SlowAPI 统一配置全局速率限制

本文介绍如何借助 SlowAPI 的 SlowAPIMiddleware 为 FastAPI 所有路由自动应用统一的默认速率限制,无需逐个装饰器手动添加,并支持按需豁免特定接口及未来扩展(如基于用户角色的差异化限流)。

本文介绍如何借助 slowapi 的 `slowapimiddleware` 为 fastapi 所有路由自动应用统一的默认速率限制,无需逐个装饰器手动添加,并支持按需豁免特定接口及未来扩展(如基于用户角色的差异化限流)。

在构建高可用 API 服务时,防止滥用和保障系统稳定性至关重要。SlowAPI 是专为 FastAPI 设计的轻量级限流库,支持内存存储(无需 Redis),开箱即用。与其为每个 @app.get()、@app.post() 等路由重复添加 @limiter.limit("5/minute"),更优雅的方式是声明式地设置全局默认限流策略——这正是 SlowAPIMiddleware 的核心价值。

✅ 正确做法:启用全局中间件 + 默认限流

只需三步即可完成全局限流配置:

  1. 初始化 Limiter 并指定 default_limits(如 "1/minute");
  2. 将 limiter 挂载到 app.state,供中间件识别;
  3. 注册 SlowAPIMiddleware 和 RateLimitExceeded 异常处理器。

完整示例代码如下:

from fastapi import FastAPI, Request, Response
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.util import get_remote_address
from slowapi.middleware import SlowAPIMiddleware
from slowapi.errors import RateLimitExceeded

# 1. 创建限流器,设置全局默认规则(所有路由均受此约束)
limiter = Limiter(
    key_func=get_remote_address,  # 按客户端 IP 限流
    default_limits=["1/minute"]     # 每分钟最多 1 次请求
)

app = FastAPI(title="Global Rate Limited API")

# 2. 必须挂载到 app.state.limiter,否则中间件无法工作
app.state.limiter = limiter

# 3. 注册异常处理器与中间件
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
app.add_middleware(SlowAPIMiddleware)

# 示例路由 —— 自动受全局限流保护
@app.get("/")
async def home():
    return {"message": "You're rate-limited to 1 request per minute."}

@app.get("/health")
async def health():
    return {"status": "ok"}

✅ 此配置下,所有未显式豁免的路由均自动应用 1/minute 限流,无需任何装饰器。

? 如何豁免特定路由?

若某些接口(如健康检查 /health 或公开静态资源)不应受限,可使用 @limiter.exempt 装饰器:

FastAPI Flask Proxy
FastAPI Flask Proxy

FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。

下载
@app.get("/unlimited")
@limiter.exempt  # ✅ 完全跳过限流检查
async def unlimited_endpoint():
    return {"message": "No limits applied here."}

⚠️ 注意:确保使用 SlowAPI ≥ 0.1.9(v0.1.9+ 已修复 async def 支持问题)。旧版本中该装饰器对 async def 路由可能失效。

? 进阶:按用户身份动态限流(如免费/付费)

虽然 default_limits 是静态的,但 SlowAPI 支持基于请求上下文的动态键函数。你可以扩展 key_func 实现差异化限流,例如结合 request.state.user 或 JWT 解析结果:

def dynamic_key_func(request: Request) -> str:
    # 假设已通过中间件将用户信息注入 request.state.user
    user = getattr(request.state, "user", None)
    plan = user.plan if user else "free"
    ip = get_remote_address(request)
    return f"{ip}:{plan}"  # 不同 plan 使用独立计数器

limiter = Limiter(
    key_func=dynamic_key_func,
    default_limits=["10/minute"],  # 免费用户默认
    application_limits=["100/minute"]  # 可选:应用级兜底(需手动调用 limiter.limit)
)

再配合自定义依赖项解析用户权限,即可实现「免费用户 10 次/分钟,付费用户 100 次/分钟」的灵活策略。

✅ 总结

  • ✅ 使用 SlowAPIMiddleware + default_limits 是实现全局限流的标准、推荐方式;
  • ✅ @limiter.exempt 可精准豁免任意路由(请升级至最新 SlowAPI 版本);
  • ✅ 通过自定义 key_func,可轻松接入用户身份、API Key、订阅等级等业务维度;
  • ❌ 避免自行在 @app.middleware 中重复实现限流逻辑——不仅易出错,还会绕过 SlowAPI 的统计、日志与异常标准化机制。

全局限流不是“加一道防火墙”,而是以声明式方式建立 API 的健康契约。从今天起,让每一秒的请求都值得被计量。

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

119

2025.12.22

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

554

2026.02.06

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

656

2026.05.09

Python FastAPI异步微服务与高性能接口设计
Python FastAPI异步微服务与高性能接口设计

本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。

539

2026.06.16

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

100

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

60

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

60

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

20

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
FastAPI SQL数据库实战文档
FastAPI SQL数据库实战文档

共0课时 | 0人学习

FastAPI官方教程文档
FastAPI官方教程文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn