Python FastAPI 快速入门教程 – 构建高性能 API 服务

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。

☁️
阿里云 推荐

想要稳定快速的服务器?推荐使用阿里云 ECS,新用户首年仅需百余元。

💰 佣金比例:7-15%
立即查看 →

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注