Maison  >  Article  >  développement back-end  >  Comment définir plusieurs points de terminaison d'API avec le même paramètre de chemin dans FastAPI ?

Comment définir plusieurs points de terminaison d'API avec le même paramètre de chemin dans FastAPI ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 17:08:02410parcourir

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

Définition de plusieurs points de terminaison d'API avec le même paramètre de chemin dans FastAPI

Dans FastAPI, définition de plusieurs points de terminaison d'API avec le même paramètre de chemin mais différent les chemins ne sont pas simples. Comme l'ordre d'évaluation des points de terminaison est important, le point de terminaison défini en premier sera toujours déclenché, quel que soit le chemin spécifique de la requête.

Problem

Considérez le fichier de routeur suivant où trois points de terminaison sont définis, chacun avec un chemin différent mais partageant le paramètre de chemin "project_id" :

</p>
<h1>GET API Endpoint 1</h1>
<p>@router.get("/project/{project_id}/{employee_id}")<br>async def method_one(project_id : str, organisation_id : str, session : AsyncSession = Depends(get_db)) :</p> <pre class="brush:php;toolbar:false"># ...

GET API Endpoint 2

@router.get("/project/details/{project_id}")
async def method_two(project_id: str, session: AsyncSession = Depends(get_db )):

# ...

GET API Endpoint 3

@router.get("/project/metadata/{project_id}")
async def method_two(project_id : str, session : AsyncSession = Depends(get_db)) :

# ...

Ce code présente un comportement inattendu lorsque les points de terminaison de l'API 2 et 3 appellent la méthode du contrôleur définie dans le point de terminaison 1 (method_one ()).

Reason

Dans FastAPI, l'évaluation des points de terminaison se produit de manière séquentielle. Par conséquent, le point de terminaison 1 ("/project/{project_id}/{employee_id}") est évalué en premier. Lorsqu'une requête ultérieure est adressée au point de terminaison 2 ou au point de terminaison 3, FastAPI interprète la partie "/project/{project_id}" du chemin comme paramètre project_id pour le point de terminaison 1. Cela entraîne l'appel de la méthode du contrôleur pour le point de terminaison 1.

Solution

Pour résoudre ce problème, l'ordre de définition du point de terminaison doit être inversé afin que les points de terminaison avec le même paramètre de chemin soient définis avant le point de terminaison qui inclut un chemin supplémentaire paramètres :

</p>
<h1>GET API Endpoint 2</h1>
<p>@router.get("/project/details/{project_id} ")</p>
<pre class="brush:php;toolbar:false"># ...

GET API Endpoint 3

@router.get("/project/metadata/{project_id}")

# ...

GET API Endpoint 1

@router.get("/project/{project_id}/{employee_id}")

# ...

En effectuant cette modification, FastAPI évaluera d'abord les points de terminaison 2 et 3, en s'assurant que les méthodes de contrôleur appropriées sont exécutées lorsque des demandes sont adressées à ces points de terminaison.

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