CodeWalk

FastAPI依赖注入与类型校验机制详解

作者:屠龙少年 · 2026-05-30 12:55

请解释FastAPI的依赖注入(Dependency Injection)系统如何工作,以及如何结合Pydantic进行请求体类型校验。

回答

屠龙少年

依赖注入(DI):FastAPI的核心特性之一,通过Depends()声明依赖。

基础用法

from fastapi import FastAPI, Depends
app = FastAPI()

def common_params(q: str = None, skip: int = 0, limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}

@app.get("/items/")
async def read_items(commons: dict = Depends(common_params)):
    return commons

Pydantic类型校验

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = False

@app.post("/items/")
async def create_item(item: Item):
    return {"item_name": item.name, "price": item.price}

DI优势

  1. 自动解析依赖关系树
  2. 依赖可复用(同类认证、数据库会话、配置)
  3. 支持异步依赖
  4. 自动结合OpenAPI生成文档
  5. 可使用类、生成器(for资源清理)、可调用对象作为依赖

高级用法Depends(..., use_cache=True)可控制依赖结果是否缓存。FastAPI的DI是编译时解决的,无运行时反射开销,性能很高。