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 ?
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!