FastAPI 核心概念
FastAPI 核心概念全景图(2025 最新版)
一、FastAPI 是什么?
FastAPI = Fast(性能) + API(现代 Web 框架)
一个 现代、快速、高性能 的 Python Web 框架,用于构建 RESTful API。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"message": "Hello FastAPI!"}
二、核心优势(为什么选 FastAPI?)
| 特性 | 说明 |
|---|---|
| 极致性能 | 与 Node.js、Go 媲美(基于 Starlette + Uvicorn) |
| 自动文档 | 自动生成 Swagger UI + ReDoc |
| 类型安全 | 基于 Python 类型提示 + Pydantic |
| 异步支持 | 原生 async/await |
| 开发效率高 | 代码简洁,热重载,错误提示友好 |
| 生产就绪 | 依赖注入、验证、中间件、测试支持 |
三、核心概念速览(10 大支柱)
graph TD
A[FastAPI 应用] --> B[路由系统]
A --> C[依赖注入]
A --> D[Pydantic 模型]
A --> E[请求与响应]
A --> F[自动 API 文档]
A --> G[异步支持]
A --> H[中间件]
A --> I[安全与认证]
A --> J[测试支持]
1. FastAPI 应用实例
app = FastAPI(
title="我的 API",
version="1.0.0",
description="一个高性能用户管理系统"
)
2. 路由系统(Path Operations)
| HTTP 方法 | 装饰器 |
|---|---|
| GET | @app.get("/path") |
| POST | @app.post("/path") |
| PUT | @app.put("/path") |
| DELETE | @app.delete("/path") |
| PATCH | @app.patch("/path") |
@app.get("/users/{id}")
def get_user(id: int):
return {"id": id}
3. Pydantic 模型(数据验证与序列化)
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
age: int | None = None
- 自动验证
- 自动序列化
- 自动生成文档
4. 依赖注入(Dependency Injection)
def get_db():
db = Session()
try:
yield db
finally:
db.close()
@app.get("/items/")
def read_items(db = Depends(get_db)):
return db.query(Item).all()
优势:复用、测试、权限控制
5. 请求与响应
| 类型 | 说明 |
|---|---|
| 路径参数 | /users/{id} |
| 查询参数 | ?skip=0&limit=10 |
| 请求体 | user: User |
| 表单 | Form() |
| 文件 | UploadFile |
| 响应模型 | response_model=UserOut |
6. 自动 API 文档
| 地址 | 功能 |
|---|---|
/docs | Swagger UI(交互式测试) |
/redoc | ReDoc(美观文档) |
/openapi.json | OpenAPI 规范 |
代码即文档,改代码 = 改文档
7. 异步支持(async/await)
@app.get("/slow")
async def slow_endpoint():
await asyncio.sleep(2)
return {"message": "异步完成"}
支持高并发、IO 密集型任务
8. 中间件(Middleware)
@app.middleware("http")
async def add_process_time(request: Request, call_next):
start = time.time()
response = await call_next(request)
response.headers["X-Process-Time"] = str(time.time() - start)
return response
用途:日志、CORS、认证、压缩
9. 安全与认证
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.get("/profile")
def profile(token: str = Depends(oauth2_scheme)):
return {"token": token}
支持:JWT、OAuth2、API Key、HTTP Basic 等
10. 测试支持
from fastapi.testclient import TestClient
client = TestClient(app)
def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"message": "Hello FastAPI!"}
与生产代码 100% 一致
四、完整核心示例(10 行代码包含 8 大概念)
from fastapi import FastAPI, Depends, Form
from pydantic import BaseModel
app = FastAPI(title="核心概念演示")
class User(BaseModel):
name: str
age: int
def get_current_user():
return {"username": "alice"}
@app.post("/users/", response_model=User)
def create_user(
name: str = Form(...),
age: int = Form(...),
user = Depends(get_current_user)
):
return User(name=name, age=age)
包含:
- FastAPI 实例
- 路由
- Pydantic 模型
- 依赖注入
- 表单请求
- 响应模型
- 自动文档
- 类型安全
五、开发流程一览
flowchart TD
A[创建 app = FastAPI()] --> B[定义 Pydantic 模型]
B --> C[编写路由函数]
C --> D[使用 Depends() 注入依赖]
D --> E[运行 uvicorn main:app --reload]
E --> F[访问 /docs 测试 API]
六、核心文件结构(推荐)
myproject/
├── main.py # FastAPI 实例
├── routers/ # 路由模块
│ ├── users.py
│ └── items.py
├── models/ # Pydantic 模型
├── schemas/ # 请求/响应模型
├── database.py # 数据库连接
├── dependencies.py # 依赖项
├── crud/ # 业务逻辑
└── tests/ # 测试
七、性能对比(官方基准测试)
| 框架 | 请求/秒(RPS) |
|---|---|
| FastAPI (Uvicorn) | ~45,000 |
| Flask | ~4,000 |
| Django | ~3,000 |
| Node.js (Express) | ~40,000 |
| Go (Gin) | ~60,000 |
八、生态支持
| 工具 | 集成 |
|---|---|
| SQLAlchemy | 完美支持 |
| Tortoise ORM | 异步 ORM |
| MongoDB | Motor / Beanie |
| Redis | redis-py |
| Docker | 官方镜像 |
| Kubernetes | 原生支持 |
| OpenAPI | 自动生成 |
| GraphQL | Strawberry / Ariadne |
九、常见误区
| 误区 | 正确做法 |
|---|---|
把所有代码写在 main.py | 使用 APIRouter 分模块 |
| 直接返回数据库对象 | 使用 response_model 过滤 |
| 忽略依赖注入 | 所有可复用逻辑用 Depends |
| 不写测试 | 使用 TestClient 覆盖所有路由 |
十、学习路径(30 天掌握)
| 周 | 目标 |
|---|---|
| 第1周 | 安装 + 路由 + Pydantic |
| 第2周 | 依赖注入 + 数据库(SQLAlchemy) |
| 第3周 | 认证(JWT) + 权限 |
| 第4周 | 测试 + Docker 部署 + 文档 |
总结:FastAPI 核心公式
FastAPI = Starlette(异步) + Pydantic(验证) + OpenAPI(文档) + 类型提示(安全)
下一步行动
| 关键词 | 学习内容 |
|---|---|
hello | 第一个 API |
crud | 完整用户管理系统 |
auth | JWT 登录认证 |
docker | 容器化部署 |
test | 单元测试 |
template | 完整项目模板 |
现在就运行你的第一个 FastAPI 应用:
pip install fastapi uvicorn
uvicorn main:app --reload
打开浏览器:http://127.0.0.1:8000/docs
回复
完整模板获取一个包含所有核心概念的完整可运行项目!