Однако, когда я отправляю запрос GET, в /users/signup, FastAPI вместо этого распознавал маршрут /users/{user_uuid и пытался проанализировать сегмент пути «регистрации» как UUID, что приводило к ошибке «Необрабатываемый объект».
Эта проблема возникла из-за того, что FastAPI пытается сопоставить входящий запрос с доступными маршрутами и соответствующими методами HTTP. Если ни один маршрут не соответствует методу HTTP, он возвращается к следующему доступному маршруту и пытается проанализировать параметры пути, что приводит к неожиданному поведению.
Чтобы решить эту проблему, я столкнулся с несколько различных подходов к проверке метода HTTP, и я хотел бы узнать мнение сообщества о лучших методах и компромиссах каждого подхода.
Подход 1: определение отдельных маршрутов для каждого запрещенный метод HTTP
Код: Выделить всё
@router.get("/signup", status_code=status.HTTP_405_METHOD_NOT_ALLOWED)
@router.delete("/signup", status_code=status.HTTP_405_METHOD_NOT_ALLOWED)
@router.patch("/signup", status_code=status.HTTP_405_METHOD_NOT_ALLOWED)
@router.post("/signup", response_model=UserPublic)
def register_user(session: SessionDep, user_in: UserRegister) -> Any:
# POST logic here
Код: Выделить всё
@router.api_route("/signup", methods=["GET", "DELETE", "PATCH", "POST"], response_model=UserPublic)
def register_user(
session: SessionDep,
user_in: UserRegister = Body(None),
method: str = Depends(get_request_method)
):
if method != "POST":
raise HTTPException(
status_code=status.HTTP_405_METHOD_NOT_ALLOWED,
detail="Method Not Allowed. Use POST to create a new user."
)
# POST logic here
Будем очень признательны за любую информацию или передовой опыт сообщества.
Подробнее здесь: https://stackoverflow.com/questions/791 ... in-fastapi
Мобильная версия