跳到正文
Joeplover
学习笔记·2025-12-26·约 2 分钟阅读

FastAPI 入门:Python 高性能 Web

Python 异步 Web 框架的学习,类型安全、自动文档生成和异步支持。

API 代码

FastAPI 入门:Python 高性能 Web 框架实战

在 U3W-AI 实习期间,我用 FastAPI 搭建了 MCP Server 的后端,通过 SSE(Server-Sent Events)协议与 AI 客户端通信。这段经历让我体会到 FastAPI 相比 Flask 在性能和现代化方面的巨大优势。

为什么 FastAPI 是 Python Web 首选

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    description: str | None = None

@app.post("/items/")
async def create_item(item: Item):
    # Pydantic 自动校验请求参数
    # 自动生成 Swagger 文档
    return {"id": 1, **item.model_dump()}

与 Flask 对比:

特性FastAPIFlask
自动 API 文档内置 Swagger + ReDoc需要 flasgger 扩展
参数校验Pydantic 类型注解手动校验或 marshmallow
异步支持原生 async/await需要安装 async 扩展
性能接近 Node.js/Go同步 WSGI 模型
类型提示贯穿全框架无强制要求

关键特性

  1. 自动 API 文档:访问 /docs 就能看到交互式的 Swagger UI 文档,前端对接 API 时不再需要额外的接口文档。

  2. Pydantic 校验:通过 Python 类型注解自动验证请求参数。传入非法类型(如字符串 "abc" 给 int 字段)会自动返回 422 错误,不需要自己写校验代码。

  3. 性能:基于 Starlette(异步 ASGI 框架),性能比 Flask 高 3-5 倍。在实际项目中,单节点处理 1000+ QPS 没有问题。

SSE 协议实现

在 U3W-AI 项目中,FastAPI 通过 SSE 实现 AI 流式响应:

from fastapi import FastAPI, Request
from sse_starlette.sse import EventSourceResponse

@app.post("/chat/stream")
async def chat_stream(request: Request, prompt: str):
    async def event_generator():
        # 模拟 AI 逐步生成响应
        for chunk in ai_service.generate_stream(prompt):
            if await request.is_disconnected():
                break
            yield {"event": "message", "data": json.dumps({"text": chunk})}
    
    return EventSourceResponse(event_generator())

与项目结合

FastAPI 目前是我做 Python 后端的默认选择。Flask 只在极简单的场景下考虑。