4、FastAPI 快速入门:安装、第一个 Hello World 接口、自动文档生成(Swagger/ReDoc)

FastAPI 是一个现代、高性能的 Python Web 框架,专为构建 API 而生。它基于 Starlette(网络部分)和 Pydantic(数据验证部分),天然支持异步编程,并自动生成符合 OpenAPI 规范的交互式文档。本章将带你从零搭建 FastAPI 环境,编写第一个接口,并体验其标志性的自动文档生成能力。

4.1 环境准备与安装

FastAPI 要求 Python 3.8 及以上版本。建议在虚拟环境中进行安装,避免依赖冲突。

推荐环境:Python 3.10+,使用 venv 或 conda 创建隔离环境。

安装核心库与 ASGI 服务器:

# 安装 FastAPI 核心
pip install fastapi

# 安装 ASGI 服务器(推荐 uvicorn,性能优异)
pip install uvicorn[standard]

安装完成后,可通过以下命令验证版本:

python -c "import fastapi; print(fastapi.__version__)"

4.2 第一个 Hello World 接口

创建一个名为 main.py 的文件,写入以下代码:

from fastapi import FastAPI

# 创建 FastAPI 应用实例
app = FastAPI()

# 定义根路径的 GET 请求处理器
@app.get("/")
async def read_root():
    return {"message": "Hello World"}

# 定义带路径参数的 GET 请求处理器
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

启动服务:

# 启动命令:uvicorn 文件名:应用实例名 --reload
# --reload 表示热重载,代码修改后自动重启
uvicorn main:app --reload

终端输出类似如下信息,表示服务已成功运行:

INFO:     Uvicorn running on http://127.0.0.1:8000
INFO:     Started reloader process [12345] using WatchFiles
INFO:     Started server process [12346]
INFO:     Waiting for application startup.

此时,在浏览器中访问 http://127.0.0.1:8000,即可看到 JSON 响应:

{"message":"Hello World"}

访问 http://127.0.0.1:8000/items/42?q=test,将返回:

{"item_id":42,"q":"test"}

4.3 自动文档生成:Swagger UI 与 ReDoc

FastAPI 最受好评的特性之一,是无需额外配置即可自动生成两套交互式 API 文档。它们基于 OpenAPI 规范,所有路由、参数、返回类型都会被自动解析并展示。

文档类型 访问路径 特点
Swagger UI /docs 交互式界面,可直接在浏览器中测试接口,支持参数填写与发送请求
ReDoc /redoc 更侧重文档阅读体验,左侧导航清晰,适合团队查阅与分享

启动服务后,直接访问以下地址即可查看:

  • Swagger UI:http://127.0.0.1:8000/docs
  • ReDoc:http://127.0.0.1:8000/redoc
核心优势:文档与代码同步。当你修改代码中的参数类型、添加描述或调整路由时,文档会自动更新,无需手动维护。

4.4 FastAPI 请求处理流程

下图展示了 FastAPI 从接收 HTTP 请求到返回 JSON 响应的核心流程:

FastAPI 请求处理流程 HTTP 请求 路由匹配 参数验证 业务逻辑 JSON 响应 说明: FastAPI 自动完成路由匹配、参数类型校验与数据转换,开发者只需关注业务逻辑实现。

4.5 核心概念速览

下表对比了 FastAPI 与传统 Flask 在关键特性上的差异,帮助你快速理解 FastAPI 的设计优势:

特性 FastAPI Flask
异步支持 原生支持 async/await 需额外安装扩展
数据验证 基于 Pydantic,自动校验请求体 需手动校验或使用第三方库
自动文档 内置 Swagger UI 与 ReDoc 需集成 flasgger 等扩展
性能 接近 Node.js 和 Go 的高性能 同步框架,性能相对较低
类型提示 深度利用 Python 类型注解 不强制使用类型注解

4.6 常见问题与避坑指南

端口冲突:如果默认的 8000 端口被占用,启动时会报错 Address already in use。可通过 --port 参数指定其他端口,例如 uvicorn main:app --reload --port 8080。
  • 热重载失效:确保启动命令中包含了 --reload 参数,且代码文件位于当前工作目录下。
  • 路径参数类型错误:如果访问 /items/abc 而 item_id 声明为 int,FastAPI 会自动返回 422 验证错误,并给出详细的错误信息。
  • 文档无法访问:检查是否在 app = FastAPI() 时传入了 docs_url=None 或 redoc_url=None,这会禁用文档路由。

4.7 本章小结