如何在 FastAPI 中生成响应描述
How to generate response decriptions in FastAPI
我想生成所有可用响应的描述(以及代码 200 示例),它们在代码中表示,如下所示。
from typing import Any
import uvicorn
from fastapi import FastAPI, HTTPException
router = FastAPI()
from pydantic import BaseModel
class FileItemBase(BaseModel):
current_project: str = "Test project"
class FileItemInDBBase(FileItemBase):
id: int
folder_path: str
class Config:
orm_mode = True
class FileResponse(FileItemInDBBase):
pass
@router.get("/", response_model=FileResponse)
def example_code() -> Any:
"""
# beautiful description
to demonstrate functionality
"""
demo=True
if demo:
raise HTTPException(418, "That is a teapot.")
if __name__ =="__main__":
uvicorn.run(router)
得到的就是这样的描述
当我尝试这个时 - 我收到了错误响应(如预期的那样)。
我想要的是示例响应中包含的错误描述,就像这里一样。前端开发人员可以查看此描述并以正确的方式处理此类情况,而无需测试 API.
我知道如何在 Open 中制作API specs.
有没有办法用 FastAPI 生成此描述?
您可以将响应参数添加到您的路径操作。
然后您可以将您的模型传递到那里。它将为该模型创建一个架构。
class FileItemBase(BaseModel):
current_project: str = "Test project"
@app.get("/", response_model=FileItemBase, responses={418: {"model": FileItemBase}})
def example_code():
"""
# beautiful description
to demonstrate functionality
"""
demo = True
if demo:
raise HTTPException(418, "That is a teapot.")
我想生成所有可用响应的描述(以及代码 200 示例),它们在代码中表示,如下所示。
from typing import Any
import uvicorn
from fastapi import FastAPI, HTTPException
router = FastAPI()
from pydantic import BaseModel
class FileItemBase(BaseModel):
current_project: str = "Test project"
class FileItemInDBBase(FileItemBase):
id: int
folder_path: str
class Config:
orm_mode = True
class FileResponse(FileItemInDBBase):
pass
@router.get("/", response_model=FileResponse)
def example_code() -> Any:
"""
# beautiful description
to demonstrate functionality
"""
demo=True
if demo:
raise HTTPException(418, "That is a teapot.")
if __name__ =="__main__":
uvicorn.run(router)
得到的就是这样的描述
当我尝试这个时 - 我收到了错误响应(如预期的那样)。
我想要的是示例响应中包含的错误描述,就像这里一样。前端开发人员可以查看此描述并以正确的方式处理此类情况,而无需测试 API.
我知道如何在 Open 中制作API specs.
有没有办法用 FastAPI 生成此描述?
您可以将响应参数添加到您的路径操作。
然后您可以将您的模型传递到那里。它将为该模型创建一个架构。
class FileItemBase(BaseModel):
current_project: str = "Test project"
@app.get("/", response_model=FileItemBase, responses={418: {"model": FileItemBase}})
def example_code():
"""
# beautiful description
to demonstrate functionality
"""
demo = True
if demo:
raise HTTPException(418, "That is a teapot.")