FastAPI 概述与选型
FastAPI 是现代异步 Web 框架,定位是“类型驱动、自动文档、高性能”。面试主线:它由什么组成、和 Flask/Django 怎么选、性能凭什么。
架构:Starlette + Pydantic
FastAPI = Starlette + Pydantic + 胶水层
- Starlette:轻量 ASGI 框架,提供路由、中间件、WebSocket、SSE 等基础能力
- Pydantic:数据模型,请求校验和响应序列化
- FastAPI 胶水层:把两者接起来,加依赖注入、OpenAPI 自动文档、类型推断
- 运行在 uvicorn(ASGI 服务器)上
与 Flask/Django 对比
| 维度 | FastAPI | Flask | Django |
|---|---|---|---|
| 异步 | 原生 async | 同步为主(2.0+ 支持 async 视图) | 3.1+ 异步视图 |
| 类型 | 类型驱动 | 无 | 无 |
| 文档 | OpenAPI 自动生成 | 手动/插件 | 手动 |
| 数据校验 | Pydantic 内置 | 手动 | DRF 序列化器 |
| ORM | 自由(SQLAlchemy) | 自由 | 内置 ORM |
| 管理后台 | 无 | 无 | 内置 admin |
| 生态 | 年轻但活跃 | 插件多 | 全栈全家桶 |
选型逻辑:
- 新项目、API 优先、团队熟悉类型 → FastAPI
- 轻量同步服务、简单页面 → Flask
- 需要 admin、ORM、认证全家桶、模板渲染 → Django
面试加分观点:FastAPI 的自动文档和校验是“类型即契约”的收益,Django 的强项是约定完备的全栈,Flask 适合快速原型。
性能定位
- ASGI 异步模型,单进程可支撑数万并发连接(IO 密集)
- 框架层开销小(Starlette 极简),性能接近 Node/Go 的框架层水平
- 性能瓶颈通常在业务代码和数据库,不在框架
- 对比 Flask(WSGI 同步):FastAPI 的异步 IO 并发能力明显更强,但 CPU 密集任务两者都要靠多进程
面试追问
- FastAPI 由什么组成? Starlette(ASGI 基础)+ Pydantic(数据)+ 自身的依赖注入和文档层
- 和 Django 怎么选? API 优先选 FastAPI,全栈带 admin/ORM 选 Django。FastAPI 异步和类型是核心差异
- 为什么快? ASGI 异步 IO、框架开销小。IO 密集场景并发能力强,CPU 密集不受益
- 自动文档怎么来的? 类型注解驱动:参数和模型类型推导出 OpenAPI schema,Swagger UI 直接可用
- Flask 会被取代吗? 简单场景仍有生态优势,但新 API 项目 FastAPI 已是主流选择