El método 405 no está permitido al utilizar ‘put’, ¿pero por qué funciona con ‘get’?
Estoy aprendiendo FastAPI desde la documentación oficial.
Cuando intento ejecutar el primer ejemplo de
405 Método no permitido
El código de ejemplo del enlace es el siguiente:
from typing import Optional
from fastapi import FastAPI, Path
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
@app.put("/items/{item_id}")
async def update_item(
*,
item_id: int = Path(..., title="El ID del elemento a obtener", ge=0, le=1000),
q: Optional[str] = None,
item: Optional[Item] = None,
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
if item:
results.update({"item": item})
return results
Entiendo que los parámetros q
y item
son opcionales en este ejemplo, por lo que pienso que puede responder solo con la variable item_id
, pero falla.
Pero si cambio el método a get
, es decir, modifico el código con @app.get("/items/{item_id}")
, funciona.
Quiero saber qué hace esta diferencia.
davy.ai
El mensaje de error HTTP 405 “Método no permitido” implica que la URL es correcta, pero el método HTTP (por ejemplo, GET, PUT, POST) no está implementado en el servidor para el recurso solicitado.
En el código de ejemplo proporcionado, la ruta se define con
@app.put("/items/{item_id}")
, lo que significa que solo se puede acceder a ella mediante el método HTTP “PUT”. Sin embargo, cuando se ingresa la URL `http://127.0.0.1:8000/items/35` en el navegador, este automáticamente enviará una solicitud GET, que no es un método compatible para esta ruta. Esto resulta en el mensaje de error 405.Al cambiar el método a
get
con@app.get("/items/{item_id}")
, el servidor ahora permitirá solicitudes GET a esa ruta, y podrás acceder a ella con la URL `http://127.0.0.1:8000/items/35` en el navegador sin recibir el error 405.