본문 바로가기
Web/Python

FastAPI 기초(4) - 쿼리 매개변수

by SeleniumBindingProtein 2023. 1. 30.
728x90
반응형
  • 쿼리는 URL에서 ? 후에 나오고 &으로 구분되는 키-값 쌍의 집합
  • 경로 매개변수의 일부가 아닌 다른 함수 매개변수를 선언할 때, "쿼리" 매개변수로 자동 해석함
    • skip: 값 0을 가집니다.
    • limit: 값 10을 가집니다.
from fastapi import FastAPI

app = FastAPI()

fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]


@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]

1. 선택적 매개변수

  • 기본값을 None으로 설정하여 선택적 매개변수를 선언할 수 있음
  • 함수 매개변수 q는 선택적이며 기본값으로 None 값이 됨
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None):
    if q:
        return {"item_id": item_id, "q": q}
    return {"item_id": item_id}

 

2. 쿼리 매개변수 형변환

  • bool 형으로 선언
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None, short: bool = False):
    item = {"item_id": item_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update(
            {"description": "This is an amazing item that has a long description"}
        )
    return item

 

3. 여러 경로/쿼리 매개변수

  • 여러 경로 매개변수와 쿼리 매개변수를 동시에 선언할 수 있으며, 특정 순서로 선언할 필요가 없음
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(
    user_id: int, item_id: str, q: Union[str, None] = None, short: bool = False
):
    item = {"item_id": item_id, "owner_id": user_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update(
            {"description": "This is an amazing item that has a long description"}
        )
    return item

 

4. 필수 쿼리 매개변수

  • 경로가 아닌 매개변수에 대한 기본값을 선언할 때, 해당 매개변수는 필수적(Required)이지 않았음
  • 특정값을 추가하지 않고 선택적으로 만들기 위해선 기본값을 None으로 설정하면 됨
  • 쿼리 매개변수를 필수로 만들려면 기본값을 선언할 수 없음
  • needy, 필수적인 str.
  • skip, 기본값이 0인 int.
  • limit, 선택적인 int.
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_user_item(
    item_id: str, needy: str, skip: int = 0, limit: Union[int, None] = None
):
    item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
    return item
728x90
반응형

'Web > Python' 카테고리의 다른 글

FastAPI 기초(3) - 경로 매개변수  (0) 2023.01.30
FastAPI 기초(2) - Python coding style  (1) 2023.01.26
FastAPI 기초(1) - 기본 개념  (0) 2023.01.26

댓글