Python/FastAPI

[FastAPI] (2) FastAPI 경로 매개변수, 쿼리 매개변수 - GET

yubi5050 2022. 10. 4. 17:58

경로 매개변수란?

경로 매개변수(Path Parameters)란 URL 경로에 들어가는 변수를 의미

아래 예시에서의 user_id를 뜻함 (매개 : 넘겨주는 + 변수 : 변하는 값)

 

Case 1

@app.get("/users/{user_id}")
def get_user(user_id:int):
    return {"user_id":user_id}

 

요청 1) curl localhost:8000/users/3 => { "user_id":3 } 반환

요청 2) curl localhost:8000/users/3.4 => 422 entity error 발생 (type 안맞아서 발생하는 error)

 

 

Case 2

@app.get("/users/{user_id}/{art_id}")
def get_user(user_id:int, art_id:float):
    return {
        "user_id":user_id,
        "art_id":art_id,
        }

요청 1) curl localhost:8000/users/3/4 => { "user_id":3, "art_id":4.0} 반환

 

 

Case 3 : Endpoint 충돌 (쿼리 매개변수 vs 기본 문자열 Endpoint )

@app.get("/users/{user_id}")
def get_user(user_id:int):
    return {"user_id":user_id}

@app.get("/users/hi")
def get_hi():
    return "hi"

요청 1) curl localhost:8000/users/4 => { "user_id":4} 반환

요청 2) curl localhost:8000/users/hi => 422 entity error 발생 (type 안맞아서 발생하는 error)

 

아래와 같이 수정이 필요함

@app.get("/users/hi")
def get_hi():
    return "hi"
    
@app.get("/users/{user_id}")
def get_user(user_id:int):
    return {"user_id":user_id}

요청 1) curl localhost:8000/users/4 => { "user_id":4} 반환

요청 2) curl localhost:8000/users/hi => "hi" 반환

 

쿼리 매개변수란?

쿼리 매개변수(Query parameters) 기본 주소 뒤 '?' 뒤에 오는 변수들을 지칭

각 매개변수는 '&' 기호로 구분되고, 'key=value' 형태를 가짐

 

Case 1

@app.get("/users")
def get_user(number: int):
    return {"number":number}

 

요청 1) curl localhost:8000/users?number=4 => {"number":4} 반환

요청 2) curl localhost:8000/users => 'field required' error 반환

 

Case 2

@app.get("/users")
def get_user(number: Optional[int]=None): # 기본값
    return {"number":number}

 

요청 1) curl localhost:8000/users?number=4 => {"number":4} 반환

요청 2) curl localhost:8000/users => {"number" : null} 반환

 

 

Case 3

@app.get("/add")
def get_sum(a:int, b:int): # 기본값
    return a+b

 

요청 1) curl http://127.0.0.1:8000/add?a=1&b=2 => 3 반환