Рекомендации по проверке метода HTTP в FastAPIPython

Программы на Python
Ответить
Anonymous
 Рекомендации по проверке метода HTTP в FastAPI

Сообщение Anonymous »

Я работаю над приложением FastAPI и столкнулся с проблемой, когда FastAPI распознавал неверный маршрут для некоторых методов HTTP. В частности, у меня есть два маршрута: /users/signup и /users/{user_uuid. Маршрут /users/signup стоит первым в списке маршрутизации. Он должен принимать только запросы POST, а все остальные методы HTTP (GET, DELETE, PATCH и т. д.) должны возвращать ответ 405 Метод не разрешен.
Однако, когда я отправляю запрос 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
Подход 2. Использование декоратора @router.api_route:

Код: Выделить всё

@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
Каковы плюсы и минусы каждого подхода? Есть ли более идиоматический или рекомендуемый способ проверки метода HTTP в FastAPI? Я ищу наиболее простое в обслуживании и масштабируемое решение, особенно при работе с несколькими маршрутами, которые должны обрабатывать разные методы HTTP.
Будем очень признательны за любую информацию или передовой опыт сообщества.

Подробнее здесь: https://stackoverflow.com/questions/791 ... in-fastapi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»