FastAPI
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于基于标准 Python 类型提示构建 API。
安装
pip install fastapi uvicorn
第一个 FastAPI 应用
from fastapi import FastAPI
# 创建应用实例
app = FastAPI()
# 定义路由
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
# 运行命令: uvicorn main:app --reload
路径参数
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
# 带类型的路径参数
@app.get("/users/{user_id}")
def read_user(user_id: int):
return {"user_id": user_id, "is_valid": user_id > 0}
查询参数
from fastapi import FastAPI
from typing import Optional
app = FastAPI()
@app.get("/items/")
def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
# 可选查询参数
@app.get("/search/")
def search(q: Optional[str] = None):
return {"query": q}
请求体
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str
price: float
tax: Optional[float] = None
@app.post("/items/")
def create_item(item: Item):
return {"item": item, "total_price": item.price + (item.tax or 0)}
响应模型
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str
class UserOut(BaseModel):
username: str
email: str
@app.post("/users/", response_model=UserOut)
def create_user(user: UserIn):
# 创建用户逻辑
return {"username": user.username, "email": f"{user.username}@example.com"}
表单数据
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}
文件上传
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
contents = await file.read()
return {
"filename": file.filename,
"content_type": file.content_type,
"size": len(contents)
}
Cookie 和 Header
from fastapi import FastAPI, Cookie, Header
app = FastAPI()
@app.get("/items/")
def read_items(
ads_id: str = Cookie(None),
user_agent: str = Header(None)
):
return {"ads_id": ads_id, "User-Agent": user_agent}
响应状态码
from fastapi import FastAPI, status
app = FastAPI()
@app.post("/items/", status_code=status.HTTP_201_CREATED)
def create_item(name: str):
return {"name": name}
@app.get("/items/{item_id}", status_code=status.HTTP_200_OK)
def read_item(item_id: int):
return {"item_id": item_id}
异常处理
from fastapi import FastAPI, HTTPException
app = FastAPI()
items = {"foo": "The Foo Wrestlers"}
@app.get("/items/{item_id}")
def read_item(item_id: str):
if item_id not in items:
raise HTTPException(
status_code=404,
detail="Item not found"
)
return {"item": items[item_id]}
💡 提示:FastAPI 是构建现代 API 的最佳选择之一,特别适合微服务架构。