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 文档

地址功能
/docsSwagger UI(交互式测试)
/redocReDoc(美观文档)
/openapi.jsonOpenAPI 规范

代码即文档,改代码 = 改文档


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
MongoDBMotor / Beanie
Redisredis-py
Docker官方镜像
Kubernetes原生支持
OpenAPI自动生成
GraphQLStrawberry / 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完整用户管理系统
authJWT 登录认证
docker容器化部署
test单元测试
template完整项目模板

现在就运行你的第一个 FastAPI 应用:

pip install fastapi uvicorn
uvicorn main:app --reload

打开浏览器:http://127.0.0.1:8000/docs


回复 完整模板 获取一个包含所有核心概念的完整可运行项目!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注