200字
FastAPI路径参数
2025-10-04
2025-10-04

什么是路径参数?

路径参数是 URL 路径中的变量部分,用于捕获特定的值并传递给请求处理函数。它们使得我们能够创建动态的路由,根据不同的参数值返回不同的内容。

基础用法

1. 固定路径路由

from fastapi import FastAPI
​
app = FastAPI()
​
@app.get("/args1/1")
def path_args1():
    return {"message": "id1"}

这是最简单的路由形式,路径是固定的,不包含任何参数。访问 /args1/1 将始终返回相同的响应。

2. 带参数路径的基本定义

@app.get("/args2/{id}")
def path_args2():
    return {"message": "id2"}

注意:这个例子实际上有一个问题!我们在路径中定义了 {id} 参数,但在函数参数中没有接收它。虽然语法上不会报错,但这通常不是我们想要的行为。

3. 正确的参数接收

@app.get("/args3/{id}")
def path_args3(id):
    '''函数的顺序就是路由的顺序'''
    return {"message": id}

这是正确的用法。路径中的 {id} 会被捕获并作为参数传递给函数。访问 /args3/123 将返回 {"message": "123"}

类型注解的重要性

4. 使用类型提示

@app.get("/args4/{id}")
def path_args4(id: int):
    '''函数的顺序就是路由的顺序'''
    return {"message": id}

通过添加 : int 类型注解,FastAPI 会自动进行以下操作:

  • 数据验证:确保传入的值可以转换为整数

  • 数据转换:将字符串参数自动转换为整数类型

  • API 文档:在自动生成的文档中显示参数类型

如果访问 /args4/abc,FastAPI 会自动返回一个错误响应,说明参数类型不匹配。

多参数路由

5. 多个路径参数

@app.get("/args5/{id}/{name}")
def path_args5(id: str, name: str):
    '''函数的顺序就是路由的顺序'''
    return {"id": id, "name": name}

可以定义包含多个参数的路由。参数在函数中的顺序应该与它们在路径中出现的顺序一致,但 FastAPI 实际上会根据参数名称进行匹配,所以顺序不是强制性的。

访问 /args5/123/john 将返回:

{
  "id": "123",
  "name": "john"
}

路径参数的高级特性

类型支持的丰富性

FastAPI 支持丰富的 Python 类型:

from datetime import datetime
from typing import List, Optional
​
@app.get("/users/{user_id}/posts/{post_id}")
def get_user_post(
    user_id: int,
    post_id: int,
    category: Optional[str] = None
):
    return {
        "user_id": user_id,
        "post_id": post_id,
        "category": category
    }

使用枚举限制参数值

from enum import Enum
​
class UserType(str, Enum):
    ADMIN = "admin"
    USER = "user"
    GUEST = "guest"
​
@app.get("/users/{user_type}/{user_id}")
def get_user_by_type(user_type: UserType, user_id: int):
    return {
        "user_type": user_type,
        "user_id": user_id
    }

文件路径作为参数

@app.get("/files/{file_path:path}")
def read_file(file_path: str):
    return {"file_path": file_path}

使用 :path 转换器可以匹配包含斜杠的路径。

最佳实践

  1. 始终使用类型注解:这不仅能提供自动验证,还能改善代码的可读性和 IDE 支持。

  2. 参数命名要有意义:使用清晰的参数名称,如 user_id 而不是简单的 id

  3. 考虑参数顺序:虽然 FastAPI 按名称匹配,但保持路径中参数顺序与函数参数顺序一致可以提高代码可读性。

  4. 合理使用默认值和可选参数:对于非必需的参数,使用 Optional 类型和默认值。

  5. 文档字符串:为你的路由函数添加文档字符串,这些会自动显示在 API 文档中。


FastAPI路径参数
作者
Shisuiyi
发表于
2025-10-04
License
CC BY-NC-SA 4.0

评论