FastAPI 入门:Python 高性能 Web
Python 异步 Web 框架的学习,类型安全、自动文档生成和异步支持。
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 对比:
| 特性 | FastAPI | Flask |
|---|---|---|
| 自动 API 文档 | 内置 Swagger + ReDoc | 需要 flasgger 扩展 |
| 参数校验 | Pydantic 类型注解 | 手动校验或 marshmallow |
| 异步支持 | 原生 async/await | 需要安装 async 扩展 |
| 性能 | 接近 Node.js/Go | 同步 WSGI 模型 |
| 类型提示 | 贯穿全框架 | 无强制要求 |
关键特性
-
自动 API 文档:访问
/docs就能看到交互式的 Swagger UI 文档,前端对接 API 时不再需要额外的接口文档。 -
Pydantic 校验:通过 Python 类型注解自动验证请求参数。传入非法类型(如字符串
"abc"给int字段)会自动返回 422 错误,不需要自己写校验代码。 -
性能:基于 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 只在极简单的场景下考虑。