Maison >développement back-end >Tutoriel Python >Pourquoi mon point de terminaison FastAPI `method_one` est-il toujours exécuté, quel que soit le chemin ?
Plusieurs points de terminaison d'API avec des paramètres de chemin dans FastAPI
La définition de plusieurs points de terminaison d'API dans FastAPI avec des variations dans la structure des chemins tout en partageant les paramètres de chemin peut conduire à comportement inattendu. Dans l'exemple de code fourni, vous rencontrez un problème où le contrôleur « method_one » est exécuté pour tous les points de terminaison de l'API, quels que soient leurs chemins spécifiés.
Comprendre la correspondance de chemin
Dans FastAPI, l'ordre des définitions des points de terminaison est crucial. La correspondance de chemin est évaluée à partir du premier point de terminaison déclaré dans votre application. Par conséquent, votre point de terminaison pour "/project/{project_id}/{employee_id}" est évalué en premier, et tous les autres paramètres de chemin de point de terminaison sont interprétés comme faisant partie du paramètre project_id.
Solution
Pour résoudre ce problème, vous devez vous assurer que les points de terminaison avec des chemins plus spécifiques sont définis avant les points de terminaison avec des chemins plus génériques. Cela garantit que FastAPI évalue d'abord le point de terminaison le plus spécifique et que les paramètres de chemin correspondent comme prévu.
L'exemple de code corrigé ressemblerait à ceci :
<code class="python"># 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_three( project_id: str, session: AsyncSession = Depends(get_db) ): # ... # GET API Endpoint 1 @router.get("/project/{project_id}/{employee_id}") async def method_one( project_id: str, employee_id: str, session: AsyncSession = Depends(get_db) ): # ...</code>
Avec cet ajustement, le plus spécifique les points de terminaison (/project/details/{project_id} et /project/metadata/{project_id}) seront évalués avant le point de terminaison plus générique (/project/{project_id}/{employee_id}), garantissant que les méthodes de contrôleur correctes sont exécutées pour chaque 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!