FastAPI detail validation2(string validaition)

생각하는 마리오네트·2023년 10월 30일
0

삽지니어링

목록 보기
9/10

이전게시글 에 이어서 바로 진행해보자

from typing import List, Union

from fastapi import FastAPI, Query
from typing_extensions import Annotated

app = FastAPI()


@app.get("/items/")
async def read_items(q: Annotated[Union[List[str], None], Query()] = None):
    query_items = {"q": q}
    return query_items

쿼리파라미터안에 Annotated를 활용하여 LIST를 받는것을 해보았다.

하지만 더 간단하게 list 메서드만을 사용해서 아래와 같이 사용할 수 있다.

from fastapi import FastAPI, Query
from typing_extensions import Annotated

app = FastAPI()


@app.get("/items/")
async def read_items(q: Annotated[list, Query()] = []):
    query_items = {"q": q}
    return query_items

단순히 list를 사용해서 표현해주는 간단한 방식을 취해볼수도 있다.

더 다양한 메타데이터 선언하기(Declare more metadata)

title & description

from typing import Union

from fastapi import FastAPI, Query
from typing_extensions import Annotated

app = FastAPI()


@app.get("/items/")
async def read_items(
    q: Annotated[
        Union[str, None],
        Query(
            title="Query string",
            description="Query string for the items to search in the database that have a good match",
            min_length=3,
        ),
    ] = None,
):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

별칭 사용(alias)

from typing import Union

from fastapi import FastAPI, Query
from typing_extensions import Annotated

app = FastAPI()


@app.get("/items/")
async def read_items(q: Annotated[Union[str, None], Query(alias="item-query")] = None):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

이렇게 Query안에 alias를 사용해주면 아래와 같이 변합니다.

매개변수 사용 중단(Deprecating parameters)

deprecated를 명시해서 기능을 사용하지 않는다고 명시할 수 있습니다.

from typing import Union

from fastapi import FastAPI, Query
from typing_extensions import Annotated

app = FastAPI()


@app.get("/items/")
async def read_items(
    q: Annotated[
        Union[str, None],
        Query(
            alias="item-query",
            title="Query string",
            description="Query string for the items to search in the database that have a good match",
            min_length=3,
            max_length=50,
            pattern="^fixedquery$",
            deprecated=True,
        ),
    ] = None,
):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

생성된 OpenAPI에서 제외시키는 방법


from typing import Union

from fastapi import FastAPI, Query
from typing_extensions import Annotated

app = FastAPI()


@app.get("/items/")
async def read_items(
    hidden_query: Annotated[Union[str, None], Query(include_in_schema=False)] = None
):
    if hidden_query:
        return {"hidden_query": hidden_query}
    else:
        return {"hidden_query": "Not found"}

요약(Recap)

매개변수에 대한 추가 유효성 검사 및 메타 데이터를 선언할 수 있다.

  1. validation and meadata
  • alias
  • title
  • description
  • deprecated
  1. Validation specific for strings
  • min_length
  • max_length
  • pattern
profile
문제를해결하는도구로서의"데이터"

0개의 댓글