FastAPI 简介
FastAPI 是一个现代、快速的 Python Web 框架,用于构建 API。它的性能接近 Node.js 和 Go,支持自动文档生成、Pydantic 数据验证、异步支持。
安装
pip install fastapi pip install uvicorn[standard] # ASGI 服务器
快速开始
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
# 运行服务器 uvicorn main:app --reload
访问 http://127.0.0.1:8000 查看 JSON 响应。
访问 http://127.0.0.1:8000/docs 查看自动生成的 API 文档(Swagger UI)。
路由和 HTTP 方法
@app.get("/items")
def get_items():
return ["item1", "item2"]
@app.post("/items")
def create_item(item: dict):
return {"created": item}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: dict):
return {"item_id": item_id, "updated": item}
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
return {"deleted": item_id}
请求体和 Pydantic 模型
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items")
def create_item(item: Item):
item_dict = item.dict()
if item.tax:
item_dict["price_with_tax"] = item.price + item.tax
return item_dict
查询参数和路径参数
@app.get("/items")
def get_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
@app.get("/items/{item_id}")
def get_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
响应模型
class User(BaseModel):
username: str
email: str
@app.get("/user/{user_id}", response_model=User)
def get_user(user_id: int):
return {"username": "john", "email": "john@example.com"}
错误处理
from fastapi import HTTPException
@app.get("/items/{item_id}")
def get_item(item_id: int):
if item_id > 1000:
raise HTTPException(status_code=404, detail="Item not found")
return {"item_id": item_id}
依赖注入
from fastapi import Depends
def get_db():
db = connect_to_database()
try:
yield db
finally:
db.close()
@app.get("/items")
def get_items(db = Depends(get_db)):
return db.query("SELECT * FROM items")
CORS 跨域配置
app.add_middleware(
CORSMiddleware,
allow_origins=["https://example.com"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
部署
使用 Uvicorn
uvicorn main:app --host 0.0.0.0 --port 8000
使用 Docker
FROM python:3.11 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]
总结
FastAPI 是 Python 中最现代、最高性能的 Web 框架。它的自动文档、数据验证、异步支持等功能让 API 开发变得简单高效。建议所有新的 Python API 项目都使用 FastAPI。