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
Libérer: 2024-11-03 16:47:03
original
695 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal