Plusieurs points de terminaison d'API avec des chemins différents mais le même paramètre de chemin dans FastAPI
Dans FastAPI, définition de points de terminaison d'API avec des chemins différents mais le même paramètre de chemin peut être réalisé en déclarant les points finaux dans l'ordre. Cependant, un problème courant survient lorsque le premier point de terminaison déclaré dans le routeur est appelé à la place du point de terminaison prévu lorsque d'autres points de terminaison avec un paramètre de chemin partagé sont déclenchés.
Ce problème se produit car FastAPI évalue les points de terminaison dans l'ordre dans lequel ils apparaissent. dans le routeur. Par conséquent, si le point de terminaison avec un paramètre de chemin partagé (/project/{project_id}/...) est défini en premier, il sera évalué en premier et traitera toutes les requêtes vers ce chemin, quel que soit le paramètre de chemin supplémentaire.
Solution :
Pour résoudre ce problème, assurez-vous que les points de terminaison avec des paramètres de chemin distincts sont déclarés avant le point de terminaison avec un paramètre de chemin partagé. Cela garantit que le point de terminaison correct est déclenché en fonction du chemin spécifique fourni.
Par exemple, considérons le routeur révisé suivant :
<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>
Dans ce routeur mis à jour, les points de terminaison avec le chemin unique les paramètres (/project/details/{project_id} et /project/metadata/{project_id}) sont déclarés en premier. En conséquence, lorsque ces points de terminaison sont déclenchés, la méthode du contrôleur correspondante sera correctement exécutée et le problème d'exécution du contrôleur incompatible est résolu.
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!