요구사항
예를 들어 사용자 정보 요청 시 아래의 2가지 api가 필요하다고 하자.
특정 사용자의 정보 요청
- /users/{user_id}
나의 정보 요청
- /users/me
이 기능을 위해 아래와 같이 fastapi로 api 만들었다.
@app.get("/users/{user_id}")
def find_user(user_id):
return f"find user: {user_id}"
@app.get("/users/me")
def find_me():
return "me"
그리고 /users/me를 호출해봤다.
GET /users/me
어느것이 호출이 될까?
결론은 위의 /users/{user_id}
가 먼저 호출이 된다. 호출결과는 아래와 같다.
find user: me
java의 스프링에서는 정적매핑이 있는 경우 api 정의 순서와 상관없이 먼저 매핑이 되지만 fastapi는 api 순서와 관련이 있는 것 같다. 위에서 먼저 정의된 api가 먼저 실행이 된다.
즉 find_user가 먼저 정의되어 있어서 먼저실행이 되고 find_me가 그 다음 실행이 된다. 여기서는 find_me가 실행이 되지 않는다.
그래서 정상적으로 호출을 하려면 아래와 같이 순서를 바꿔줘야 한다.
@app.get("/users/me")
def find_me():
return "me"
@app.get("/users/{user_id}")
def find_path_parameter(user_id):
return f"path parameter: {user_id}"
이렇게 하면 /users/me
의 실행결과는 me
로 출력이 된다. 그리고 /users/hong으로 실행을 하면 find user: hong
으로 출력이 된다.
반응형