Также будет не мало важным рассмотреть следующую ситуацию. У нас есть код нашего приложения, включающий функцию user(), которая принимает имя пользователя, и функцию profile()она ничего не принимает. Но их пути находятся в одном каталоге адресного пути (user).
from fastapi import FastAPI
app = FastAPI()
@app.get("/user/{user_name}")
async def user(user_name: str) -> dict:
return {"user": user_name}
@app.get("/user/profile")
async def profile() -> dict:
return {"profile": "View profile user"}
В результате, если мы перейдем по адресу http://127.0.0.1:8000/user/ilya, то увидим следующий вывод функции user():
Но если мы перейдем по адресу http://127.0.0.1:8000/user/profile, то вывод будет не правильный, а именно вместо функции profile(), отработает функция user().
В этом случае произошло то, что каталог пути(profile) рассматривался как значение параметра имени пользователя для функции user.
Чтобы решить эту проблему, все фиксированные пути должны быть объявлены первыми перед URL-адресами динамических конечных точек с параметрами пути. Таким образом, функция profile() должна быть объявлена первой перед функцией user().
from fastapi import FastAPI
app = FastAPI()
@app.get("/user/profile")
async def profile() -> dict:
return {"profile": "View profile user"}
@app.get("/user/{user_name}")
async def user(user_name: str) -> dict:
return {"user": user_name}
В результате мы получим правильный вывод: