FastAPI 简介

FastAPI 是一个现代、快速(高性能)的 Python Web 框架,基于标准 Python 类型提示构建。它专为构建 API 设计,支持异步编程,并自动生成交互式 API 文档(Swagger/OpenAPI)。

安装 FastAPI

运行以下命令安装 FastAPI 及其依赖:

pip install fastapi uvicorn

  • uvicorn 是 ASGI 服务器,用于运行 FastAPI 应用。

创建第一个 FastAPI 应用

创建一个文件 main.py,编写以下代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"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

  • --reload 表示开发模式下自动重载代码变更。
  • 访问 http://127.0.0.1:8000 查看返回的 JSON 响应。

交互式 API 文档

FastAPI 自动生成文档:

  • Swagger UI: http://127.0.0.1:8000/docs
  • ReDoc: http://127.0.0.1:8000/redoc

路径参数与查询参数

路径参数通过 URL 路径传递,查询参数通过 ?key=value 形式传递:

@app.get("/users/{user_id}")
def read_user(user_id: int, limit: int = 10):
    return {"user_id": user_id, "limit": limit}

  • user_id 是路径参数,limit 是查询参数(默认值 10)。

请求体与 Pydantic 模型

使用 Pydantic 模型定义请求体的数据结构:

from pydantic import BaseModel

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

@app.post("/items/")
def create_item(item: Item):
    return {"item": item}

  • 发送 POST 请求时,请求体需符合 Item 模型的格式。

异步支持

FastAPI 支持异步函数:

@app.get("/async-example")
async def async_read():
    await some_async_function()
    return {"message": "Async works!"}

依赖注入

通过依赖注入管理共享逻辑(如数据库连接):

from fastapi import Depends

def common_parameters(q: str = None, skip: int = 0):
    return {"q": q, "skip": skip}

@app.get("/dependency/")
def read_commons(commons: dict = Depends(common_parameters)):
    return commons

错误处理

自定义 HTTP 异常:

from fastapi import HTTPException

@app.get("/error-example")
def raise_error():
    raise HTTPException(status_code=404, detail="Item not found")

中间件

添加中间件处理请求/响应:

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
)

测试 FastAPI

使用 TestClient 编写单元测试:

from fastapi.testclient import TestClient

client = TestClient(app)

def test_read_root():
    response = client.get("/")
    assert response.status_code == 200
    assert response.json() == {"Hello": "World"}

部署 FastAPI

生产环境建议使用:

  • Uvicorn + Gunicorn:多进程管理。
  • Docker:容器化部署。
  • 云服务:如 AWS、Google Cloud 或 Azure。

示例 Dockerfile:

FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

性能优化

  • 使用异步数据库驱动(如 asyncpg)。
  • 启用响应压缩:
    from fastapi.middleware.gzip import GZipMiddleware
    app.add_middleware(GZipMiddleware)
    

通过以上步骤,可以快速掌握 FastAPI 的核心功能并构建高性能 Web 应用。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐