python / / 2024. 8. 16. 06:59

[fastapi] path parameter가 중복될 때 어느것이 우선일까?

요구사항

예를 들어 사용자 정보 요청 시 아래의 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으로 출력이 된다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유