如何在快速 api 视图中将文档添加到 post body 模型?
How to add docs to post body model on fast api view?
例如假设我们有两个端点:
class FooRequest(BaseModel):
data: str
@router.post("/foo/", response_model=FooRequest)
async def foo_view(data: FooRequest) -> FooRequest:
...
@router.get("/bar/", response_model=FooRequest)
async def bar_view(data: str = Query(..., description="Data param")) -> FooRequest:
...
In swagger UI /bar/
端点将有适当记录的查询参数,/foo/
将有一些 post body 的抽象示例,没有任何描述。
那么我如何记录 post body 模型?
您可以使用 Config
和 schema_extra
为 Pydantic 模型声明示例。
class FooRequest(BaseModel):
data: str
class Config:
schema_extra = {
"FooRequest": {
"name": "Foo Request",
"description": "Data param",
}
}
还可以使用 Field
为 JSON 架构声明额外信息。
from pydantic import Field
...
class FooRequest(BaseModel):
data: str = Field(..., example="Data param for Foo Request")
description: Optional[str] = Field(None, example="Description for Foo")
与您可以将额外信息传递给 Field
的方式相同,您可以对 Path
、Query
、Body
等执行相同的操作
例如,您可以将正文请求的示例传递给 Body
:
from fastapi import Body
...
class FooRequest(BaseModel):
data: str
@router.post("/foo/", response_model=FooRequest)
async def foo_view(data: FooRequest = Body(
...,
example={
"name": "Foo Request",
"description": "data param",
},
),
) -> FooRequest:
例如假设我们有两个端点:
class FooRequest(BaseModel):
data: str
@router.post("/foo/", response_model=FooRequest)
async def foo_view(data: FooRequest) -> FooRequest:
...
@router.get("/bar/", response_model=FooRequest)
async def bar_view(data: str = Query(..., description="Data param")) -> FooRequest:
...
In swagger UI /bar/
端点将有适当记录的查询参数,/foo/
将有一些 post body 的抽象示例,没有任何描述。
那么我如何记录 post body 模型?
您可以使用 Config
和 schema_extra
为 Pydantic 模型声明示例。
class FooRequest(BaseModel):
data: str
class Config:
schema_extra = {
"FooRequest": {
"name": "Foo Request",
"description": "Data param",
}
}
还可以使用 Field
为 JSON 架构声明额外信息。
from pydantic import Field
...
class FooRequest(BaseModel):
data: str = Field(..., example="Data param for Foo Request")
description: Optional[str] = Field(None, example="Description for Foo")
与您可以将额外信息传递给 Field
的方式相同,您可以对 Path
、Query
、Body
等执行相同的操作
例如,您可以将正文请求的示例传递给 Body
:
from fastapi import Body
...
class FooRequest(BaseModel):
data: str
@router.post("/foo/", response_model=FooRequest)
async def foo_view(data: FooRequest = Body(
...,
example={
"name": "Foo Request",
"description": "data param",
},
),
) -> FooRequest: