반응형
FastAPI/OpenAPI에서 여러 응답 모델을 사용할 수 있는 방법이 있습니까?
나는 논리에 따라 완전히 다른 두 개의 반응 구조를 가져야 하는 앱을 쓰고 있다.
두 개의 서로 다른 응답 모델을 직렬화, 검증 및 반환하고 OpenAPI JSON에 반영할 수 있도록 처리할 방법이 있습니까?
나는 모델을 쓰기 위해 pydantic을 사용하고 있다.
네, 가능합니다. 경로 장식기의 매개 변수에서 Union을 사용할 수 있습니다(아래의 새로운 python 3.10 스타일을 사용했습니다). 여기 완전한 예가 있습니다. 이것은 그대로 작동할 것입니다.
from typing import Union
from fastapi import FastAPI, Query
from pydantic import BaseModel
class responseA(BaseModel):
name: str
class responseB(BaseModel):
id: int
app = FastAPI()
@app.get("/", response_model=Union[responseA,responseB])
def base(q: int|str = Query(None)):
if q and isinstance(q, str):
return responseA(name=q)
if q and isinstance(q, int):
return responseB(id=q)
raise HTTPException(status_code=400, detail="No q param provided")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000, )
편집: 아래 주석에서 Tomásh Linhart가 지적한 것처럼 매개 변수는 다음을 사용해야 합니다. 원래 답변에서는 문서에 설명된 대로 모든 사람에게 적용되지 않는 3.10 스타일을 사용했습니다. 문서화 결과:
반응 예제가 여러 개 필요한 경우 다음을 시도할 수 있습니다:
@router.get(
'/{UserId}',
summary='get user',
responses={
200: {
"description": "",
"content": {
"application/json": {
"examples": {
"Corporate user": {
'value': {
'foo': 'bar',
},
},
"Standard user": {
'value': {
'doo': 'www',
},
},
}
}
}
}
}
)
반응형
'개발하자' 카테고리의 다른 글
push_notebook은 Google Colab Jupyter 노트북에서 작동하지 않습니다 (0) | 2023.06.02 |
---|---|
대응 유형 스크립트 통과 속성이 인터페이스에 선언되지 않았습니까? (0) | 2023.06.02 |
파이썬에서 작동하는 특성 모듈을 어떻게 얻을 수 있나요? (0) | 2023.06.01 |
FastAPI에서 파일을 가져올 때 브라우저 캐시를 사용하는 것은 어떻습니까? (0) | 2023.05.31 |
구글 클라우드 AI 플랫폼 주피터 노트북 인스턴스는 리셋 후에도 열리지 않고 실행 중입니다 (0) | 2023.05.31 |