[FastAPI] 쿼리 매개변수

상준·2023년 9월 7일

FastAPI

목록 보기
3/3

경로 매개변수의 일부가 아닌 다른 함수 매개변수를 선언할 때, "쿼리" 매개변수로 자동 해석함

쿼리
URL에서 ? 후에 나오고 &으로 구분되는 키-값 쌍의 집합임

#서버를 만들기 위한 세팅
from fastapi import FastAPI

app = FastAPI()
fake_items_db = []

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

skip=0limit=10 기본값을 갖고 있음

http://127.0.0.1:8000/items/

http://127.0.0.1:8000/items/?skip=0&limit=10

  • skip: 값 0을 가짐

  • limit: 값 10을 가짐

    그러므로 둘은 같음

    http://127.0.0.1:8000/items/?skip=30

  • skip=30 // URL에서 지정했기 때문

  • limit=10 // 기본 값이기 때문

    선택적 매개변수

    기본값을 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}

q는 선택적이며 기본값으로 None값이 됨
q는 쿼리 매개변수
item_id는 경로 매개변수

쿼리 매개변수 형변환

bool 형으로 선언할 수도 있음

from fastapi import FastAPI
from typing import Union

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

http://127.0.0.1:8000/items/ssj?short=yes
http://127.0.0.1:8000/items/ssj?short=True
http://127.0.0.1:8000/items/ssj?short=true
http://127.0.0.1:8000/items/ssj?short=1
http://127.0.0.1:8000/items/ssj?short=on
이렇지 않은 경우 False

여러 경로/쿼리 매개변수

여러 경로 매개변수와 쿼리 매개변수를 동시에 선언할 수 있으며 특정 순서로 선언할 필요가 없음. 매개변수들은 이름으로 감지됨

from fastapi import FastAPI
from typing import Union

app = FastAPI()


@app.get("/users/{user_id}/items/{item_id}")
async def read_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

필수 쿼리 매개변수

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item( item_id: str, needy: str):
   item = {"item_id": item_id, "needy": needy}
   return item

쿼리 매개변수 needystr형인 필수 쿼리 매개변수임
needy는 필수 매개변수이므로 URL에 반드시 설정해줘야 함
http://127.0.0.1:8000/items/ssj?needy=ga

{"item_id":"ssj","needy":"ga"}

http://127.0.0.1:8000/items/ssj 처럼 연다면 필수 매개변수 needy를 넣지 않았기 때문에 오류가 나옴

needy str필수
skip 기본값이 0int
limit 선택적인 int

profile
컴공생 공부

0개의 댓글