当前位置: 首页 > 知识库问答 >
问题:

在swagger doc中使用Pyd的模型(FastAPI)设置查询参数的描述

谢烨烨
2023-03-14

这是继续这个问题。

我添加了一个模型来获取查询参数到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

它按预期工作,但描述(在模型中添加)没有反映在 Swagger UI 中

但是,如果请求正文使用相同的模型,则描述将以大摇大摆的方式显示

为了在swagger ui中获得对QueryParams(model)的描述,我是否遗漏了什么?

共有3个答案

长孙哲
2023-03-14

公认的答案是使用自定义依赖项,使用FastAPI类作为依赖项来批量定义查询参数,虽然我认为这样做很好,但我觉得在这种情况下使用dataclasses会更好,并减少代码重复,因为< code>__init__会自动生成。

作为依赖项的普通类

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

虽然对于较少数量的查询参数,这样做很好,但如果参数数量像我的一个apiendpoint那样多,这很快就会变得麻烦。

使用数据类作为依赖项

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

此外,如果您需要更复杂的功能,您还将添加数据类的好东西。

宓毅庵
2023-03-14

这对我有用


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"


周奇文
2023-03-14

这在Pydantic模型中是不可能的

获得期望结果的解决方法是拥有一个定制的依赖类(或函数),而不是Pydantic模型

from fastapi import Depends, FastAPI, Query

app = FastAPI()


class CustomQueryParams: def __init__( self, foo: str = Query(..., description="Cool Description for foo"), bar: str = Query(..., description="Cool Description for bar"), ): self.foo = foo self.bar = bar


@app.get("/test-query/")
async def get_by_query(params: CustomQueryParams = Depends()):
    return params

因此,您将拥有文档作为,

    < li >在FastAPI中验证GET参数- (FastAPI GitHub)似乎对扩展Pydantic模型来验证GET参数不太感兴趣 < li >作为依赖项的类- (FastAPI Doc)
 类似资料:
  • 我不明白 FastAPI 中的可选查询参数。它与默认值为 的默认查询参数有何不同? 在下面的示例中,arg1和arg2有什么区别?在该示例中,arg2是一个可选的查询参数,如上面的链接所述。

  • 我正在编写一个Fast API服务器,它接受请求,检查用户是否被授权,如果成功,则将其重定向到另一个URL。 我需要携带URL参数,例如

  • 我通过compojure-api使用ring-swagger。我有几个查询参数,我正在努力寻找一种方法来向单个查询参数添加描述。我可以添加整个endpoint的摘要,但这还不够。 是否可以使用ing-swagger/compojure-api向单个查询参数添加swagger描述?

  • 我正试图弄清楚如何在OpenAPI中记录我的两个查询参数。 null 键是一个关联数组,可以包含API中的资源名称集合列表。分配给每个筛选项的值是单个id或逗号分隔的id列表。 排序 For排序也遵循JSON:API建议,因此如下所示: null 例如,我不确定是否可以指定过滤器键是一个关联数组,或者它接受逗号分隔的ID列表。对于排序几乎同样的问题:如何表示逗号分隔的排序字段列表?

  • 注意:这个问题与这里的问题不同,因为我需要它来处理Swagger。 给定一个 FastAPI endpoint,我想允许任意一组 URL 参数,同时保持 Swagger 支持。 我的用例是,我想支持一组类似JSON API的查询参数,例如: 方括号的使用阻止了我使用传统的类来建模查询参数,所以我直接使用对象来代替。但是,我想使用Swagger来测试endpoint。我找不到提供任意URL参数的方法

  • Mybatis抛出一个错误,该错误表示设置参数有问题。会出什么问题?我测试了SQL查询,它很好。我在用graddle和Spring。 控制器 表