适合:小白入门 / 老程序员快速掌握 / 企业级团队文档
FastAPI 是一个现代、高性能的 Python Web 框架,基于 Starlette(异步 Web 框架) 和 Pydantic(数据验证) 构建,拥有自动文档、强类型、异步支持等特性。 它的性能接近 Node.js 和 Go,非常适合构建高并发 API 服务。
1. FastAPI 的核心优势(企业级视角)
| 特性 | 说明 |
|---|---|
| 高性能 | 基于 async/await,性能接近 Node.js/Go |
| 自动文档 | 自动生成 Swagger UI / ReDoc(官方教程强调) |
| 强类型 | 基于 Python 类型提示,自动校验请求数据 |
| 异步支持 | 原生 async/await |
| 依赖注入(DI) | 内置 DI 系统,适合大型项目 |
| 可扩展性强 | 基于 Starlette,可用中间件、事件、WebSocket |
2. 快速上手(Hello World)
创建 main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def index():
return {"message": "Hello FastAPI"}
运行(官方教程示例):
fastapi dev main.py
自动文档:
-
Swagger UI:
http://127.0.0.1:8000/docs -
ReDoc:
http://127.0.0.1:8000/redoc
3. 路由(API 构建基础)
3.1 基础路由
@app.get("/users")
def get_users():
return ["Tom", "Jerry"]
3.2 路径参数
@app.get("/users/{user_id}")
def get_user(user_id: int):
return {"id": user_id}
3.3 查询参数
@app.get("/search")
def search(keyword: str, limit: int = 10):
return {"keyword": keyword, "limit": limit}
4. Pydantic 模型(FastAPI 的灵魂)
Pydantic 用于 数据验证 + 自动文档 + 自动类型转换。
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
用于 POST 请求:
@app.post("/users")
def create_user(user: User):
return user
5. 异步支持(async/await)
FastAPI 原生支持异步(官方教程强调 async/await 支持):
@app.get("/items")
async def get_items():
return ["a", "b", "c"]
适合:
-
高并发
-
I/O 密集型(数据库、HTTP 调用)
-
WebSocket
6. 依赖注入(DI)------企业级必备
FastAPI 内置 DI 系统,非常适合大型项目(GitHub 完整课程也包含 DI 章节)。
from fastapi import Depends
def get_db():
db = "db connection"
return db
@app.get("/items")
def read_items(db = Depends(get_db)):
return {"db": db}
用途:
-
数据库连接
-
权限校验
-
配置管理
-
业务服务注入
7. 中间件(Middleware)
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
用途:
-
CORS
-
日志
-
鉴权
-
限流
8. 异常处理(企业级)
from fastapi import HTTPException
@app.get("/error")
def error():
raise HTTPException(status_code=404, detail="Not Found")
自定义异常:
from fastapi.responses import JSONResponse
@app.exception_handler(ValueError)
def value_error_handler(request, exc):
return JSONResponse(status_code=400, content={"error": str(exc)})
9. 数据库集成(SQLAlchemy)
GitHub 完整课程包含数据库集成章节。
from sqlalchemy.orm import Session
from fastapi import Depends
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
10. 项目结构(企业级)
app/
│── main.py
│── api/
│ ├── users.py
│ ├── auth.py
│── models/
│── schemas/
│── services/
│── core/
│ ├── config.py
│ ├── security.py
│── db/
│ ├── session.py
│ ├── base.py
特点:
-
路由模块化
-
数据模型与 Pydantic schema 分离
-
业务逻辑放在 service 层
-
配置集中管理
11. 自动文档(Swagger / ReDoc)
FastAPI 自动生成文档(官方教程强调自动文档能力)。
你可以自定义:
app = FastAPI(
title="My API",
description="企业级 API 文档",
version="1.0.0"
)
12. 安全(OAuth2 / JWT)
FastAPI 内置 OAuth2 支持。
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.get("/me")
def read_me(token: str = Depends(oauth2_scheme)):
return {"token": token}
13. 性能优化(企业级)
GitHub 完整课程包含性能优化章节。
-
使用 Uvicorn + Gunicorn(多 worker)
-
使用 async/await
-
数据库连接池
-
缓存(Redis)
-
中间件限流
-
Pydantic v2(更快)
14. 部署(生产环境)
推荐架构:
Nginx → Gunicorn → UvicornWorker → FastAPI
启动:
gunicorn main:app -k uvicorn.workers.UvicornWorker -w 4 -b 0.0.0.0:8000
15. 测试(pytest)
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)
def test_index():
r = client.get("/")
assert r.status_code == 200
16. 高级功能(官方教程包含大量进阶内容)
-
WebSocket
-
Background Tasks
-
Events(startup/shutdown)
-
Streaming Response
-
File Upload
-
CORS
-
自定义中间件
-
异步数据库(SQLModel / Tortoise ORM)
17. 学习路线(结合 GitHub 完整课程笔记)
-
API 基础
-
FastAPI 基础
-
构建 REST API
-
数据库集成
-
JWT 鉴权
-
异步编程
-
高级特性(WebSocket、依赖注入)
-
测试与调试
-
性能优化
-
部署(Docker + Nginx + Gunicorn)