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 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ámetro | Significado | Término en inglés |
|---|---|---|
gt | Mayor que | greater than |
ge | Mayor o igual que | greater than or equal |
lt | Menor que | less than |
le | Menor o igual que | less than or equal |
Mayor o igual que (ge)
Restricciónitem_idDebe ser >= 1:
Ejemplo
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 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 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 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:
- Usar
Annotated+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