Multiple API Endpoints with Path Parameters in FastAPI
Defining multiple API endpoints in FastAPI with variations in path structure while sharing path parameters can lead to unexpected behavior. In the provided code example, you're encountering an issue where the "method_one" controller is being executed for all API endpoints, regardless of their specified paths.
Understanding Path Matching
In FastAPI, the order of endpoint definitions is crucial. Path matching is evaluated from the first endpoint declared in your app. Hence, your endpoint for "/project/{project_id}/{employee_id}" is being evaluated first, and every other endpoint's path parameters are interpreted as part of the project_id parameter.
Solution
To resolve this issue, you need to ensure that the endpoints with more specific paths are defined before the endpoints with more generic paths. This ensures that FastAPI evaluates the most specific endpoint first, and the path parameters match as expected.
The corrected code example would look like this:
<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>
With this adjustment, the most specific endpoints (/project/details/{project_id} and /project/metadata/{project_id}) will be evaluated before the more generic endpoint (/project/{project_id}/{employee_id}), ensuring that the correct controller methods are executed for each API endpoint.
The above is the detailed content of Why is my FastAPI Endpoint `method_one` Always Being Executed, Regardless of Path?. For more information, please follow other related articles on the PHP Chinese website!