Validación numérica de parámetros de ruta en FastAPI

Uso con parámetros de consultaQueryLa forma de agregar validación es la misma; puedes usarPathDeclarar validación numérica y metadatos para los parámetros de ruta.


Importar Path

desdefastapiImportarPath, desdetypingImportarAnnotated:

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Path

app = FastAPI()


@app.get("/items/{item_id}")
async def read_items(
    # Agregar metadatos y validación para el parámetro de ruta
    item_id: Annotated[int, Path(title="ID del producto", description="ID del producto a obtener", ge=1)],
):
    return {"item_id": item_id}

Los parámetros de ruta siempre son obligatorios, porque deben ser parte de la URL. Incluso si declaras un valor predeterminado para ellos, se seguirán tratando como parámetros obligatorios.


Validación numérica

PathyQueryTodos admiten los siguientes parámetros de validación numérica:

ParámetroSignificadoTérmino en inglés
gtMayor quegreater than
geMayor o igual quegreater than or equal
ltMenor queless than
leMenor o igual queless than or equal

Mayor o igual que (ge)

Restricciónitem_idDebe ser >= 1:

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Path

app = FastAPI()


@app.get("/items/{item_id}")
async def read_items(
    item_id: Annotated[int, Path(ge=1)],  # item_id debe ser >= 1
):
    return {"item_id": item_id}

Uso combinado de validación numérica

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Path, Query

app = FastAPI()


@app.get("/items/{item_id}")
async def read_items(
    # item_id debe ser > 0 y <= 1000
    item_id: Annotated[int, Path(gt=0, le=1000)],
    # Los parámetros de consulta también pueden usar validación numérica
    size: Annotated[float, Query(gt=0, lt=10.5)] = 5.0,
):
    return {"item_id": item_id, "size": size}

Validación de números de punto flotante

La validación numérica también se aplica a los números de punto flotante.gt(mayor que) ygela diferencia de (mayor o igual que) es importante en el contexto de los números de punto flotante:

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Path, Query

app = FastAPI()


@app.get("/items/{item_id}")
async def read_items(
    item_id: Annotated[int, Path(ge=1, le=1000)],
    # size debe ser > 0 y < 10.5
    # 0.5 es un valor válido; 0.0 y 0 no lo son (porque gt=0 es estrictamente mayor que 0)
    size: Annotated[float, Query(gt=0, lt=10.5)],
):
    return {"item_id": item_id, "size": size}

Uso mixto de parámetros de ruta y parámetros de consulta

Cuando usas simultáneamentePathyQuery, utilizaAnnotatedPuedes evitar problemas con el orden de los parámetros:

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Path, Query

app = FastAPI()


@app.get("/items/{item_id}")
async def read_items(
    # Después de usar Annotated, el orden de los parámetros no importa
    item_id: Annotated[int, Path(title="ID del producto", ge=1, le=1000)],
    q: Annotated[str | None, Query(max_length=50)] = None,
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

Resumen

Puntos clave de la validación numérica de parámetros de ruta:

  • UsarAnnotated + PathDeclarar las reglas de validación para parámetros de ruta
  • Validación numérica:gt(mayor que),ge(mayor o igual que),lt(menor que),le(menor o igual que)
  • PathyQueryComparten los mismos parámetros de validación, incluida la validación de cadenas (min_lengthetc.) y metadatos (title、descriptionetc.)
  • Los parámetros de ruta siempre son obligatorios, sin importar si se declara un valor predeterminado
Otras extensiones