«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как определить несколько конечных точек API с разными путями и одним и тем же параметром пути в FastAPI?

Как определить несколько конечных точек API с разными путями и одним и тем же параметром пути в FastAPI?

Опубликовано в 2025-03-24
Просматривать:502

How to Define Multiple API Endpoints with Different Paths and the Same Path Parameter in FastAPI?

определение нескольких конечных точек API с разными путями и одним и тем же параметром пути в Fastapi

в Fastapi, объявляя несколько конечных точек API с разными путями, но один и тот же параметр может привести к неожиданному поведению. Пример:

# get API Endpoint 1 @router.get ("/project/{project_id}/{employee_id}") Async def method_one (project_id: str, employee_id: str, ...): # ... # Получить API Endpoint 2 @router.get ("/project/details/{project_id}") Async def method_two (project_id: str, ...): # ... # Получить API Endpoint 3 @router.get ("/project/metadata/{project_id}") Async def method_three (project_id: str, ...): # ...
# GET API Endpoint 1
@router.get("/project/{project_id}/{employee_id}")
async def method_one(project_id: str, employee_id: str, ...):

    # ...

# GET API Endpoint 2
@router.get("/project/details/{project_id}")
async def method_two(project_id: str, ...):

    # ...

# GET API Endpoint 3
@router.get("/project/metadata/{project_id}")
async def method_three(project_id: str, ...):

    # ...

Solution

Чтобы обеспечить правильное соответствие маршрута, вы должны объявить конечные точки в порядке их специфичности их пути. Поскольку конечные точки оцениваются последовательно, первыми должны быть объявлены конечные точки с более конкретными путями. Следовательно, правильный заказ объявления:

# get API конечная точка 1 @router.get ("/project/details/{project_id}") Async def method_two (project_id: str, ...): # ... # Получить API Endpoint 2 @router.get ("/project/metadata/{project_id}") Async def method_three (project_id: str, ...): # ... # Получить API Endpoint 3 @router.get ("/project/{project_id}/{employee_id}") Async def method_one (project_id: str, employee_id: str, ...): # ...

, следуя этому порядку, когда конечные точки 2 и 3 вызываются, будут выполнены соответствующие методы Method_two () и method_three ().
            
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3