固定字符串或任何有效整数的 FastAPI 路径参数验证

FastAPI path parameter validation for a fixed string or any valid integer

我需要从 FastAPI 端点的 URL 路径解析 version 参数。 version 参数的有效值是固定字符串,例如active 或任何整数,例如1.

是否有一种优雅的方法可以让 FastAPIpydantic 使用此类规则验证此路径参数,以便我不必手动执行验证?

@app.get("/{version}")
def endpoint(version):
    # version could be either 'active' or valid integer e.g. 1
    return {"version": version}

你要做的(有两种类型的选择)是 Union。

示例:

from typing import Union
from pydantic import BaseModel

class Version(BaseModel):
    version: Union[int, str]

警告! Union 尝试将参数类型与 Union 的给定顺序相匹配,并在第一次匹配时停止,即在下面的示例中,它将首先尝试找到一个 INT,然后再找到一个 STR。在某些情况下,这非常重要。

然后是想要有一个固定值的事实。这是文字。

因此,Union 和 Literal 一起给出:

from typing import Union, Literal
from pydantic import BaseModel

class Version(BaseModel):
    version: Union[Literal['active'], int]