경로 매개변수의 일부가 아닌 다른 함수 매개변수를 선언할 때, "쿼리" 매개변수로 자동 해석함
쿼리
URL에서 ? 후에 나오고 &으로 구분되는 키-값 쌍의 집합임
#서버를 만들기 위한 세팅
from fastapi import FastAPIapp = 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=0과 limit=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
쿼리 매개변수 needy는 str형인 필수 쿼리 매개변수임
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 기본값이 0인 int
limit 선택적인 int