dans Fastapi, déclarant plusieurs points de terminaison API avec différents chemins mais le même paramètre de chemin peut conduire à un comportement de correspondance de route inattendu. Point de terminaison de l'API 1 @ router.get ("/ project / {project_id} / {employee_id}") Async Def Method_One (Project_id: Str, Employee_ID: Str, ...): # ... # Obtenez un point de terminaison de l'API 2 @ router.get ("/ project / de détails / {project_id}") Async Def Method_two (project_id: str, ...): # ... # Obtenez un point de terminaison de l'API 3 @ router.get ("/ project / métadata / {project_id}") Async Def Method_There (Project_id: Str, ...): # ...
Dans ce scénario, lorsque les points de terminaison API 2 et 3 sont appelés, ils exécutent la méthode du contrôleur définie dans Endpoint 1, à savoir méthode_one (). Cela est dû à la façon dont FastAPI évalue les points de terminaison dans la séquence.
# GET API Endpoint 1
@router.get("/project/{project_id}/{employee_id}")
async def method_one(project_id: str, employee_id: str, ...):
# ...
# GET API Endpoint 2
@router.get("/project/details/{project_id}")
async def method_two(project_id: str, ...):
# ...
# GET API Endpoint 3
@router.get("/project/metadata/{project_id}")
async def method_three(project_id: str, ...):
# ...
Pour assurer la correspondance appropriée de l'itinéraire, vous devez déclarer des points de terminaison dans l'ordre de leur spécificité de chemin. Étant donné que les points de terminaison sont évalués séquentiellement, les points de terminaison avec des chemins plus spécifiques doivent être déclarés en premier. Dans l'exemple ci-dessus, le point de terminaison pour / project / {project_id} / {employee_id} est plus spécifique que le point de terminaison pour / project / de détails / {project_id}. Par conséquent, l'ordre de déclaration correct est:
# Obtenez un point de terminaison de l'API 1 @ router.get ("/ project / de détails / {project_id}") Async Def Method_two (project_id: str, ...): # ... # Obtenez un point de terminaison de l'API 2 @ router.get ("/ project / métadata / {project_id}") Async Def Method_There (Project_id: Str, ...): # ... # Obtenez un point de terminaison de l'API 3 @ router.get ("/ project / {project_id} / {employee_id}") Async Def Method_One (Project_id: Str, Employee_ID: Str, ...): # ...
en suivant cet ordre, lorsque les points de terminaison 2 et 3 sont appelés, les méthodes correspondantes méthody_two () et méthody_three () seront exécutées comme prévu.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3