개발하자
Pydantic 모델(FastAPI)을 사용하여 Swagger 문서에서 쿼리 매개변수에 대한 설명 설정
Cuire
2023. 7. 23. 16:56
반응형
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에 반영되지 않습니다
그러나 요청 본문에 동일한 모델이 사용되는 경우 설명이 스웨거로 표시됩니다
스웨거 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
그래서 당신은 서류를 갖게 될 것입니다,
레퍼런스
- GET 매개 변수의 유효성을 확인하는 데 관심이 적은 것 같습니다
- 종속성으로 클래스--(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)
또한 더 복잡한 기능이 필요한 경우 데이터 클래스의 장점도 추가할 수 있습니다.
하지만 내가 그것을 만들고 싶지 않다면 어떻게 그것이 선택사항이 될 수 있는가?
반응형