#코드관리 #Optional #Query #Deprecated
API 서버를 관리한다. 라는 말을 많이 들어봤을 듯.
어떻게 관리하는지는 각자 스타일로 관리를 하겠지.
내 API 서버 Query 스펙이 YAML or JSON 으로 관리된다. 라고 칩시다.
보통 관리하는 방식이죠?
FastAPI 에서 Query 구문을 통해서 손쉽게 관리 할 수 있음.
우선 코드를 보면,
@app.get('/item/6/')
async def read_items(q: Optional[str] = Query(..., max_length=10)):
result = {
'items': [
{
'item_id': 'Apple',
},
{
'item_id': 'Google'
}
]
}
if q:
result.update({
'q': q
})
return result
... ?
이건 자바를 사용 할 때에도 모든 파라미터를 받겠다는 의미!
FastAPI 에서는 q 파라미터를 required로 만들려고 사용하는 방법임.
Query 구문을 통해서 요청으로 들어오는 query에 validation 조건을 추가 할 수 있음.
max_length 조건을 통해서 q 파라미터 값의 길이가 10 이하여야 함.
Query를 list 타입으로 변경하면 신기한 스웨거 화면을 볼 수 있음.
@app.get('/item/7/')
async def read_items(q: list = Query([])):
result = {
'items': [
{
'item_id': 'Apple',
},
{
'item_id': 'Google'
}
]
}
if q:
result.update({
'q': q
})
return result
바로 스웨거 먼저!
Add item 버튼을 눌러서 list 형태로 여러 파라미터를 받을 수 있음.
마지막으로,
예를 들어 YAML or JSON 으로 위 /item/7/ path parameter 스펙이 'deprecated' 되었다고 하자.
{'item': {'7': {'deprecated': true} } }
위 스펙 정보를 query 에 전달하면,
@app.get("/item/8")
async def read_items(
q: Optional[str] = Query(
None,
alias="item-query",
title="Query string",
description="Deprecated, No available",
deprecated=True,
)
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
이제 위 path parameter 를 통해서 접근하는 요청이 deprecated 되었다고 표시됨.
요청은 이상없이 작동함.
이 외에도 다양한 기능, 옵션이 있음.
참조 : https://fastapi.tiangolo.com/tutorial/query-params-str-validations/