Maison >développement back-end >Tutoriel Python >Pourquoi mon point de terminaison FastAPI est-il appelé lorsqu'un point de terminaison différent avec des paramètres de chemin identiques est défini ultérieurement ?

Pourquoi mon point de terminaison FastAPI est-il appelé lorsqu'un point de terminaison différent avec des paramètres de chemin identiques est défini ultérieurement ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 16:47:03661parcourir

Why is my FastAPI endpoint being called when a different endpoint with identical path parameters is defined later?

Plusieurs points de terminaison d'API avec un paramètre de chemin identique

Lors de la conception d'API RESTful à l'aide de FastAPI, il est possible de définir plusieurs points de terminaison avec des chemins différents mais un chemin partagé paramètre de chemin. Cependant, dans les cas où l'exécution des points de terminaison devient incohérente, il est crucial de résoudre les problèmes de configuration potentiels.

Considérez le fichier de routeur suivant dans FastAPI :

<code class="python"># GET API Endpoint 1
@router.get("/project/{project_id}/{employee_id}")
async def method_one(
    project_id: str, organization_id: str, session: AsyncSession = Depends(get_db)
):
    # Controller method execution

# GET API Endpoint 2
@router.get("/project/details/{project_id}")
async def method_two(
    project_id: str, session: AsyncSession = Depends(get_db)
):
    # Controller method execution

# GET API Endpoint 3
@router.get("/project/metadata/{project_id}")
async def method_three(
    project_id: str, session: AsyncSession = Depends(get_db)
):
    # Controller method execution</code>

Lors de l'appel des points de terminaison d'API 2 et 3, de manière inattendue , le contrôleur de method_one est exécuté à la place des method_two et method_trois attendus. Cette anomalie nécessite un examen attentif de la configuration.

FastAPI évalue les points de terminaison dans l'ordre dans lequel ils sont définis. Par conséquent, project/{project_id}/{employee_id} sera évalué en premier. Par la suite, toute requête adressée aux points de terminaison 2 et 3 déclenchera le point de terminaison 1.

Solution :

Pour résoudre ce problème, réorganisez les définitions de point de terminaison dans le fichier du routeur, en vous assurant que les points de terminaison 2 et 3 sont définis avant le point de terminaison 1 :

<code class="python"># GET API Endpoint 2
@router.get("/project/details/{project_id}")
    # ...

# GET API Endpoint 3
@router.get("/project/metadata/{project_id}")
    # ...

# GET API Endpoint 1
@router.get("/project/{project_id}/{employee_id}")
    # ...</code>

En réorganisant les points de terminaison, les méthodes de contrôleur appropriées seront exécutées lors de l'invocation du point de terminaison de l'API.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn