es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 y pego la URL http://127.0.0.1:8000/items/35 en el navegador, mi servidor envía un mensaje:

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.

Tags:  ,

Answer

  1. Avatar for 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.

Comments are closed.