끄적/FastAPI

Path Parameter와 Quert Parameter, 그리고 Optional Parameter

uvumbu 2024. 12. 15. 16:33

 

 

1. Path Parameter

Path Parameter에서 유저 정보에 접근하는 API를 만들어보자.

 

GET Method: 정보를 READ하기 위해 사용

 

이제 우리는 정보를 받을 것이다.

'@app.get("/users/{user_id}")' 로 할 것이다.

여기서 '{}'로 표현해주면 변수로 표현되는 것이다.

 

def get_data(user_id):
	return {"user_id": user_id}

 

위 함수에 '{user_id}'에 해당하는 내용이 함수의 인자로 들어가는 것이다.

 

이제 파일을 실행해주고, 'localhost:8000/users/vamba'로 웹주소를 열면

 

{"user_id":"vamba"}

 

위와 같이 나오는 걸 확인할 수 있을거다.

 

입력할 때 vamba로 입력했으므로 vamba로 반환한 것을 알 수 있다.

 

 

 

2. Query Parameter

Query Parameter에서 유저 정보에 접근하는 API를 만들어보자.

Path Parameter와의 차이점은 'temp_db'를 통해 db처럼 사용할 건데, 실제로 db를 구현하면 복잡해지므로 리스트에 dic형태로 저장해둔다.

 

temp_db = [{"item_name": "U"}, {"item_name": "vam"}, {"item_name": "ba"}]

 

 

그리고 아래 코드를 보면 함수의 파라미터가 쿼리의 파라미터로 사용되고 있다. 

 

def read_item(skip: int = 0, limit: int = 10):
	return temp_db[skip: skip+limit]

 

이전에는 우리가 GET에 URL두에 '{}' 형식으로 넣었었다.

하지만 Query Parameter에서는 인자 형태로 들어간다.

 

 

 

이제 파일을 실행해보자.

'localhostl:8000/items/'를 입력하면 

[{"item_name":"U"},{"item_name":"vam"},{"item_name":"ba"}]

위와 같이 보일거다.

 

items는 전체요소를 주겠다! 라는 의미다.

 

 

 

이제 여기서 인자를 줘보자.

인자를 주는 방법은 URL의 뒤에 ?를 붙이고 Key와 Value형태로 연결하는 것이다.

 

'localhostl:8000/items/?skip=1'를 입력하면

[{"item_name":"vam"},{"item_name":"ba"}]

 

'localhostl:8000/items/?skip=2'를 입력하면

[{"item_name":"ba"}]

 

'localhostl:8000/items/?skip=3'이나 3이상을 입력하면 아래처럼 빈 리스트가 나올거다.

[]

 

이는 우리가 아까 코드에서 정의한대로 

'temp_db[skip: skip+limit]' 를 반환한다고 되어 있기 때문이다.

 

 

3. Optional Parameter

특정 파라미터는 선택적으로 하고 싶은 경우가 있을 수 있다.

 

이럴 때는 우리가 'from typing import Optional'를 임포트 해주고, 인자를 넣을 때 Optinal[데이터 타입] = None 를 해주면 된다.

 

def read_item(item_id: str, optional_input: Optional[str] = None):
    if optional_input:
        return {"item_id": item_id, "optional_input": optional_input}
    return {"item_id": item_id}

위 코드를 보면 'optional_input'이 있다면 같이 반환하고, 없다면 'item_id'만 반환한다.

 

 

 

이제 파일을 실행해보고 'localhostl:8000/items/100' 를 입력해보자.

{"item_id":"100"}

 

optional_input이 없기 때문에 id만 반환됐다.

 

이제 optional_input도 같이 넣어주자.

'localhostl:8000/items/100?optional_input=uvamba'

라고 넣어주면

{"item_id":"100","optional_input":"uvamba"}

 

위와 같이 추가로 나오는 것을 확인할 수 있다.

 

 

 

 

 

 

 

'끄적 > FastAPI' 카테고리의 다른 글

Pydantic  (0) 2024.12.15
Form  (1) 2024.12.15
Request Body와 Response Body  (0) 2024.12.15
URL Parameters  (0) 2024.12.15
FastAPI 실습 1  (1) 2024.12.15