FastAPI 是目前 Python 生态中发展最快、社区最活跃的新一代 Web 框架,以 类型提示驱动、自动文档、异步高性能 为核心特性,迅速成为构建 REST API、微服务的首选框架。
本文将从 环境搭建 → 启动服务 → 路由设计 → 参数校验 → 依赖注入 → 统一返回 → 并发 → API 文档 → 示例模板 一次讲清楚所有你需要掌握的 FastAPI 核心知识点。
整篇文章从基础到生产可用,适合作为 学习路径文章 / 团队内部培训文档 / 技术分享文档。
FastAPI 提供:
无需编写文档,自动生成:
/docs(Swagger UI)/redoc(Redoc)适合高并发 IO 场景。
支持:
优点 | 描述 |
|---|---|
🚀 高性能 | 内部使用 uvicorn + Starlette |
🧩 自动文档 | 你写代码 = 文档自动生成 |
🛡 强大的数据校验 | Pydantic 模型校验非常强 |
🧵 原生异步 | 完全支持 async/await |
♻ 易维护 | 类型提示 + 自动补全 |
🧱 适合微服务 | 易拆分、易扩展 |
缺点 | 描述 |
|---|---|
生态比 Django 小 | ORM / Admin 不如 Django 完整 |
Pydantic 学习成本 | 初学者需要适应 Model 模式 |
高度依赖类型提示 | 代码量相比 Flask 多 |
部分组件需要自行封装 | 如全局异常、中间件体系等 |
框架 | Star 数量 | 备注 |
|---|---|---|
FastAPI | 80k+ | 增长最快的 Python Web 框架 |
Flask | 65k+ | Python Web 老二 |
Django | 75k+ | 全家桶框架 |
Sanic | 18k+ | 高性能异步 |
Tornado | 22k+ | 实时框架 |
FastAPI 的增长速度是所有框架中 最快 的。
FastAPI 曲线一路向上,已经与 Flask 接近并逼近 Django。
结论:FastAPI 已成为 Python Web 开发的主流第一选择。
推荐使用 pyenv 或 conda:
brew install pyenv
pyenv install 3.11.5
pyenv global 3.11.5
mkdir fastapi-demo
cd fastapi-demo
pip install fastapi uvicorn[standard]
main.pyfrom fastapi import FastAPI
app = FastAPI()
@app.get("/hello")
async def hello():
return
{"message": "Hello FastAPI!"}
uvicorn main:app --reload
浏览器访问:
FastAPI 强烈建议用 APIRouter 进行路由拆分:
# routers/user.py
from fastapi import APIRouter
router = APIRouter(prefix="/user", tags=["User"])
@router.get("/info")
async def get_user():
return {"user": "Tom"}
主入口引用:
from fastapi import FastAPI
from routers.user import router as user_router
app = FastAPI()
app.include_router(user_router)
优势:
from fastapi import Query
@app.get("/items")
async def get_item(name: str = Query(...), size: int = Query(10)):
return {"name": name, "size": size}
name → 必传size → 默认值 = 非必传from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
city: str | None = None
@app.post("/add")
async defadd_user(user: User):
return user
自动完成:
除了 GET、POST,还支持:
方法 | 用法 |
|---|---|
PUT | 更新资源 |
DELETE | 删除资源 |
PATCH | 局部更新 |
OPTIONS | 预检请求 |
HEAD | 返回响应头 |
示例:
@app.delete("/item/{id}")
async def delete_item(id: int):
return {"deleted": id}
FastAPI 最强大的部分是依赖注入,可用于:
from fastapi import Depends, HTTPException
def verify_token(token: str):
if token != "123":
raise HTTPException(401, "Invalid token")
return True
@app.get("/secure")
async def secure_route(auth=Depends(verify_token)):
return {"ok": True}
def success(data=None):
return {"code": 0,"message": "success","data": data}
接口使用:
@app.get("/info")
async def info():
return success({"name": "Tom"})
from fastapi import HTTPException
@app.get("/error")
async def error():
raise
HTTPException(status_code=400, detail="Bad Request")
from fastapi.responses import JSONResponse
@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
return
JSONResponse(
status_code=500,
content={"code": 500, "message": str(exc)}
)
FastAPI 本身是异步框架,只需要:
async defawait IO 操作示例:
import asyncio
@app.get("/concurrent")
async def concurrent():
await asyncio.sleep(1)
return {"ok": True}
多个请求会自动并发执行,不阻塞。
FastAPI 自动支持两个文档:
文档 | 地址 | 用途 |
|---|---|---|
Swagger UI | /docs | 在线调试 + 文档 |
ReDoc | /redoc | 更适合阅读的文档 |
接口定义完成后即自动出现在文档中,无需额外处理。
以下模板包含:
from fastapi import FastAPI
from routers.user import router as user_router
from fastapi.responses import JSONResponse
app = FastAPI(title="FastAPI Demo")
# 全局异常
@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
return
JSONResponse(status_code=500, content={"code": 500, "message": str(exc)})
# 注册路由
app.include_router(user_router)
@app.get("/health")
async def health():
return {"status": "ok"}
from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel
router = APIRouter(prefix="/user", tags=["User"])
# 依赖:token 校验
def verify_token(token: str = Query(...)):
if token != "123":
raise
HTTPException(status_code=401, detail="Invalid Token")
return True
# 请求体模型
class User(BaseModel):
name: str
age: int
city: str | None = None
@router.post("/add")
async defadd_user(user: User, auth=Depends(verify_token)):
return {"code": 0, "data": user}
@router.get("/info")
async def get_info(name: str):
return
{"name": name}
FastAPI 的优势不是某一项功能,而是:
结合 Uvicorn + Pydantic + Starlette,成为 Python 现代 Web 框架中最均衡、最适合团队开发的选择。
如果你正在写 API、微服务、后台系统、网关层,FastAPI 都能提供极高的开发效率和生产可用性。