brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Oct 04. 2020

Python API: FastAPI(3)

#코드관리 #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/


작가의 이전글 Python API: FastAPI(2)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari