Python API: FastAPI(3)

#코드관리 #Optional #Query #Deprecated

by 유윤식

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로 만들려고 사용하는 방법임.

스크린샷 2020-10-04 22.18.31.png



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


바로 스웨거 먼저!

스크린샷 2020-10-04 22.26.13.png

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 되었다고 표시됨.


스크린샷 2020-10-04 22.35.33.png

요청은 이상없이 작동함.


이 외에도 다양한 기능, 옵션이 있음.


참조 : https://fastapi.tiangolo.com/tutorial/query-params-str-validations/


keyword
작가의 이전글Python API: FastAPI(2)