Backend Beginner Python

FastAPI - Python 现代 Web 框架

高性能 Python Web 框架,基于类型提示构建 API,与 NodeJS/Go 性能相当,被 Microsoft/Uber/Netflix 等大厂用于生产

pythonapirest

什么是 FastAPI?

FastAPI 是一个现代、快速的 Python Web 框架,基于标准 Python 类型提示构建 API。Star 接近 10 万,是 Python 生态最热门的 API 框架。

核心特点:

  • 高性能:与 NodeJS 和 Go 相当(基于 Starlette + Pydantic)
  • 开发速度快:提升约 200%-300% 的功能开发速度
  • 更少 bug:减少约 40% 的人为错误
  • 自动交互文档:生产级代码,即时文档

被 Microsoft、Uber、Netflix 等大厂用于生产环境。

安装

pip install "fastapi[standard]"

第一个应用

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}

启动:

fastapi dev        # 开发模式(自动重载)
fastapi run       # 生产模式

访问 http://127.0.0.1:8000/docs 查看自动生成的交互文档。

请求参数与类型验证

路径参数

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}

请求体

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tags: list[str] = []

@app.post("/items/")
def create_item(item: Item):
    return item

依赖注入

from fastapi import Depends

def get_db():
    db = connect_to_db()
    try:
        yield db
    finally:
        db.close()

@app.get("/items/")
def list_items(db=Depends(get_db)):
    return db.query(Item).all()

异步支持

@app.get("/async")
async def async_view():
    result = await some_async_operation()
    return result

数据库集成

from sqlalchemy.orm import Session

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.post("/items/", response_model=ItemOut)
def create_item(item: Item, db: Session = Depends(get_db)):
    db_item = ItemModel(**item.model_dump())
    db.add(db_item)
    db.commit()
    return db_item

最佳实践

  1. 使用 Pydantic BaseModel:所有请求体和响应模型都用 Pydantic
  2. 异步优先:使用 async def 获得最佳性能
  3. 依赖注入做数据库连接:每个请求创建新的 DB session
  4. 使用 response_model:明确指定返回数据结构,过滤敏感字段

参考