경로 매개변수란?
경로 매개변수(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 반환
'Python > FastAPI' 카테고리의 다른 글
[FastAPI] (6) 보일러 플레이트 (Boiler Plate) (0) | 2022.10.27 |
---|---|
[FastAPI] (5) FastAPI Validation - Path, Query, Field (0) | 2022.10.26 |
[FastAPI] (4) FastAPI POST 작성법 (0) | 2022.10.26 |
[FastAPI] (3) FastAPI 열거형 enum - GET (0) | 2022.10.05 |
[FastAPI] (1) FastAPI란? (+Setting) (0) | 2022.10.04 |