본문 바로가기

개발하자

Pydantic 모델(FastAPI)을 사용하여 Swagger 문서에서 쿼리 매개변수에 대한 설명 설정

반응형

Pydantic 모델(FastAPI)을 사용하여 Swagger 문서에서 쿼리 매개변수에 대한 설명 설정

이것은 여기까지 계속된다.

나는 pydantic 모델에 쿼리 매개 변수를 가져오기 위해 모델을 추가했다

class QueryParams(BaseModel):
    x: str = Field(description="query x")
    y: str = Field(description="query y")
    z: str = Field(description="query z")


@app.get("/test-query-url/{test_id}")
async def get_by_query(test_id: int, query_params: QueryParams = Depends()):
    print(test_id)
    print(query_params.dict(by_alias=True))
    return True

예상대로 작동하지만 설명(모델에 추가)이 스웨거 UI에 반영되지 않습니다

enter image description here

그러나 요청 본문에 동일한 모델이 사용되는 경우 설명이 스웨거로 표시됩니다

enter image description here

스웨거 UI에서 쿼리 매개 변수(모델)에 대한 설명을 얻을 수 있는 누락된 것이 있습니까?




이것은 Pydantic 모델에서는 불가능합니다

원하는 결과를 얻기 위한 해결 방법은 Pydantic 모델이 아닌

from fastapi import Depends, FastAPI, Query

app = FastAPI()


클래스 사용자 지정 쿼리 매개 변수:
    def __init__(
        자신,
        foo: str = 쿼리(..., 설명="foo에 대한 멋진 설명"),
        막대: str = 쿼리(..., 설명="바에 대한 시원한 설명"),
    ):
        자신.foo = foo
        self.bar = 막대


@app.get("/test-query/")
async def get_by_query(매개 변수: 사용자 지정 쿼리 매개 변수 = 종속()):
    return params

그래서 당신은 서류를 갖게 될 것입니다,

screenshot


레퍼런스

  1. GET 매개 변수의 유효성을 확인하는 데 관심이 적은 것 같습니다
  2. 종속성으로 클래스--(FastAPI Doc)



이것은 나에게 효과가 있었다


from fastapi import Depends, FastAPI, Query

@app.post("/route")
def some_api(
        self,
        query_param_1: float = Query(None, description="description goes here", ),
        query_param_2: float = Query(None, description="Param 2 does xyz"),
):
    
return "hello world"





허용된 답변은 Fast를 사용한 사용자 지정 종속성 사용을 나타냅니다쿼리 매개 변수를 대량으로 정의하는 API가 잘 작동한다고 생각하지만, 이 경우 사용하는 것이 더 나을 것 같고 자동으로 생성되므로 코드 중복이 줄어듭니다.

종속성으로서의 정상 클래스

class QueryParams:
    def __init__(self, 
    x:  Query(
            None, description="Arg1", example=10),
    y:  Query(
            None, description="Arg2", example=20)
    ):
        self.x = x
        self.y = y

적은 수의 쿼리 매개 변수에 대해서는 이러한 방식으로 수행하는 것이 괜찮지만, 만약 내 API 끝점 중 하나에 대한 것처럼 인수의 수가 많다면, 이것은 빠르게 번거로워진다.

데이터 클래스를 종속성으로 사용

@dataclass
class QueryParams:
    x:  Query(None, description="Arg1", example=10)
    y:  Query(None, description="Arg2", example=20)

또한 더 복잡한 기능이 필요한 경우 데이터 클래스의 장점도 추가할 수 있습니다.




하지만 내가 그것을 만들고 싶지 않다면 어떻게 그것이 선택사항이 될 수 있는가?


반응형