FastAPI 基本路由(快速上手)

FastAPI 基本路由:从零开始构建你的第一个 API 接口

在现代 Web 开发中,后端服务的构建效率和稳定性越来越受到重视。FastAPI 作为一个基于 Python 的现代 Web 框架,凭借其高性能、自动生成文档和强大的类型提示支持,迅速成为许多开发者构建 RESTful API 的首选工具。而掌握 FastAPI 基本路由,是开启 FastAPI 之旅的第一步。

想象一下,你正在搭建一座城市交通网络。API 路由就像城市中的道路规划,每一个 URL 路径(如 /users/products)都是通往不同功能区域的入口。FastAPI 通过清晰的路由机制,让你能精准地将请求导向对应的处理函数,实现“按路走人”的高效运作。

本文将带你一步步理解 FastAPI 基本路由 的核心概念,通过实际代码示例,从最简单的路径定义到参数处理,手把手带你构建一个完整的 API 接口系统。


安装与环境准备

在开始之前,你需要确保本地环境已安装 Python 3.7 或更高版本。推荐使用虚拟环境来隔离项目依赖,避免冲突。

打开终端,执行以下命令安装 FastAPI 及其依赖的 ASGI 服务器(如 Uvicorn):

pip install fastapi uvicorn

安装完成后,你可以通过以下命令验证是否安装成功:

python -c "from fastapi import FastAPI; print(FastAPI())"

如果输出类似 <FastAPI> 的对象,说明安装成功。


创建第一个 FastAPI 应用

现在我们来创建一个最简单的 FastAPI 应用,它将返回一个欢迎消息。

新建一个文件,命名为 main.py,并输入以下代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    # 返回一个字典,FastAPI 会自动将其序列化为 JSON 格式
    return {"message": "欢迎来到 FastAPI 的世界!"}

代码详解

  • from fastapi import FastAPI:导入 FastAPI 框架的核心类。
  • app = FastAPI():创建一个 FastAPI 应用实例,后续所有路由都将绑定到这个实例上。
  • @app.get("/"):这是一个装饰器,用来定义一个 HTTP GET 请求的路由。/ 表示根路径。
  • def read_root()::这是一个普通的 Python 函数,当请求匹配该路径时,自动调用。
  • return {"message": "欢迎来到 FastAPI 的世界!"}:返回一个字典,FastAPI 会自动将其转换为 JSON 响应。

启动服务:

uvicorn main:app --reload
  • main:app:表示模块名(main.py)和应用对象名(app)。
  • --reload:开启热重载,代码修改后自动重启服务,开发时非常实用。

访问浏览器,打开 http://127.0.0.1:8000,你将看到:

{"message": "欢迎来到 FastAPI 的世界!"}

这就是你的第一个 FastAPI 接口,简洁而强大。


路由路径参数详解

在实际项目中,我们通常需要根据路径中的动态部分来获取数据。比如 /users/123 中的 123 是用户 ID。FastAPI 支持路径参数(Path Parameters),让你轻松提取这些信息。

示例:获取用户信息

修改 main.py 文件,添加一个获取用户详情的路由:

from fastapi import FastAPI, Path

app = FastAPI()

@app.get("/users/{user_id}")
def get_user(user_id: int = Path(..., description="用户的唯一标识 ID")):
    # user_id 是路径中的参数,FastAPI 会自动解析并类型检查
    # Path(...) 表示该参数是必填的
    # description 用于生成 API 文档的说明
    return {"user_id": user_id, "name": f"用户 {user_id}"}

代码说明

  • @app.get("/users/{user_id}"){user_id} 是一个路径参数占位符,匹配任意数字或字符串。
  • user_id: int:声明参数类型为整数,FastAPI 会自动验证输入是否为合法整数。
  • Path(..., description=...)Path 是 FastAPI 提供的类型提示工具,用于定义路径参数的元信息。... 表示必填,description 用于文档生成。

测试:访问 http://127.0.0.1:8000/users/101,返回:

{"user_id": 101, "name": "用户 101"}

如果访问 http://127.0.0.1:8000/users/abc,FastAPI 会立即返回错误提示,因为 abc 不是整数,无需手动写判断逻辑。


查询参数与请求体处理

除了路径参数,我们还经常需要通过查询字符串(Query String)或请求体(Request Body)传递数据。FastAPI 通过类型提示和依赖注入,让这些操作变得极其简单。

查询参数示例

from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items")
def get_items(q: str = Query(None, min_length=1, max_length=50, description="搜索关键词")):
    # q 是查询参数,如 ?q=apple
    # Query(None) 表示该参数可选
    # min_length 和 max_length 用于验证输入长度
    return {"search": q}

访问:http://127.0.0.1:8000/items?q=苹果

返回:

{"search": "苹果"}

请求体示例(POST 请求)

from fastapi import FastAPI, Body
from pydantic import BaseModel

app = FastAPI()

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

@app.post("/items")
def create_item(item: Item = Body(..., embed=True)):
    # item 是一个 Item 实例,FastAPI 会自动解析 JSON 并验证字段
    # embed=True 表示将数据嵌套在 JSON 对象中
    return {"item": item.dict()}

发送 POST 请求(使用 curl):

curl -X POST http://127.0.0.1:8000/items \
  -H "Content-Type: application/json" \
  -d '{"name": "笔记本电脑", "price": 5999.0, "description": "高性能轻薄本"}'

返回:

{"item": {"name": "笔记本电脑", "price": 5999.0, "description": "高性能轻薄本"}}

路由分组与模块化设计

随着项目规模扩大,将所有路由写在一个文件中会变得难以维护。FastAPI 支持路由分组,通过 APIRouter 实现模块化设计。

创建独立的路由模块

新建文件 routers/users.py

from fastapi import APIRouter

router = APIRouter()

@router.get("/users")
def list_users():
    return {"users": ["张三", "李四", "王五"]}

@router.get("/users/{user_id}")
def get_user(user_id: int):
    return {"user_id": user_id, "name": f"用户 {user_id}"}

在主应用中注册路由

修改 main.py

from fastapi import FastAPI
from routers.users import router

app = FastAPI()

app.include_router(router, prefix="/api/v1")

现在访问 http://127.0.0.1:8000/api/v1/users,即可获取用户列表。


自动文档生成:Swagger UI 与 ReDoc

FastAPI 最大的亮点之一是自动为你的 API 生成交互式文档。你无需手动编写文档,只需写代码,文档自动生成。

启动服务后,访问:

  • http://127.0.0.1:8000/docs:自动生成的 Swagger UI 文档,支持直接测试接口。
  • http://127.0.0.1:8000/redoc:ReDoc 风格的文档页面,更简洁美观。

这些文档会自动包含你定义的路径参数、查询参数、请求体结构和返回示例,极大提升开发协作效率。


总结:掌握 FastAPI 基本路由,开启高效开发之路

通过本文,你已经掌握了 FastAPI 基本路由 的核心能力:路径定义、路径参数、查询参数、请求体处理、模块化路由以及自动文档生成。这些功能共同构成了一个强大而灵活的 API 开发基础。

FastAPI 不仅让你写代码更简单,还通过类型提示和自动验证,提前发现潜在错误,减少运行时异常。它的设计理念是“少写代码,多做事情”,非常适合构建高可用、高效率的后端服务。

无论你是初学者还是有经验的开发者,只要掌握了这些基础,就能快速上手构建真实项目。接下来,你可以尝试集成数据库、添加认证机制、部署到服务器,逐步打造完整的应用系统。

记住:一个清晰的路由设计,是优秀 API 的起点。从今天开始,用 FastAPI 基本路由,为你的项目打下坚实基础。