这是继续这个问题。
我添加了一个模型来获取查询参数到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)的描述,我是否遗漏了什么?
公认的答案是使用自定义依赖项,使用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)
此外,如果您需要更复杂的功能,您还将添加数据类的好东西。
这对我有用
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"
这在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
因此,您将拥有文档作为,
我不明白 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。 控制器 表