注意:这个问题与这里的问题不同,因为我需要它来处理Swagger。
给定一个 FastAPI GET
endpoint,我想允许任意一组 URL 参数,同时保持 Swagger 支持。
我的用例是,我想支持一组类似JSON API的查询参数,例如:
/api/books/?include=author&sort=name,zip&sort[author]=-lname&fields=name,phone,street
方括号的使用阻止了我使用传统的类来建模查询参数,所以我直接使用请求
对象来代替。但是,我想使用Swagger来测试endpoint。我找不到提供任意URL参数的方法。我很乐意将它们作为单个字符串输入。
人们可能会这样想:
def books(**params):
....
这给出了一个curl语句:
api/books?params=sort%5Bone%5D%3Dtwo'
我真正想要的是:
api/books?sort&one%5D%3Dtwo'
您可以使用可选字符串参数(book_params
在下面的情况下)通过OpenAPI(Swagger UI)将查询参数作为单个字符串传递,例如,包括=作者
下面的示例还使用了这里描述的方法,以修复
parse_qs
将单个值解析为列表的部分(例如,“foo=bar”
将解析为
用户在url中多次传递同一个键,即
'fo=2
您可以检查这个可选参数,即
book_params
是否为空,以决定是使用book_params
(意味着请求通过Swagger发送)还是直接使用请求
对象(意味着通过在浏览器的地址栏中键入URL发送请求,例如,http://127.0.0.1:8000/api/books?include=author
from fastapi import FastAPI, Request
from typing import Optional
from urllib.parse import parse_qs
app = FastAPI()
@app.get("/api/books")
def books(request: Request, book_params: Optional[str] = None):
q_params = {}
if book_params is not None:
q_params = parse_qs(book_params, keep_blank_values=True)
else:
q_params = parse_qs(request.url.query, keep_blank_values=True)
d = dict((k, v if len(v)>1 else v[0])
for k, v in q_params.items())
return d
我有一个用Swagger描述的POSTendpoint,我希望这个endpoint也有查询参数。我们使用1.2 swagger格式是因为传统原因。我们使用3scale,它托管文档,您可以在他们的web UI中编辑您的swagger。然而,当我试图保存文档时,它给我以下错误。 < code>JSON规范不能在同一方法上有paramType='body '和param type = ' query '
因此,我在Rails中的模型的ElasticSearch关注中有以下模块。 这是有效的,但是如何使每个bool查询(must、must_not、filter)接受或空参数呢? 假设我传递一个空的,它将获得所有文档。然后,当我传递一个空的参数时,它将返回所有大小。
我正在编写一个Fast API服务器,它接受请求,检查用户是否被授权,如果成功,则将其重定向到另一个URL。 我需要携带URL参数,例如
我有一个这样的endpoint: 在这里,是向用户公布的关键字。但是和是任意参数。对于另一个资源,如,任意参数可以是。 在 openapi 规范中,我有 我正在使用代码生成插件 ,在服务器控制器中,我想捕获所有任意参数。如何扩展我的 openapi 规范以使参数超出。如果有一种方法可以在单个数组中获取所有查询参数,那也将有所帮助。
我有一个基本配置,如下所示 所以基本上它允许/通过身份验证,但其他一切都需要token。我如何让它也绕过Swagger?这使得开发变得困难,因为团队依赖于Swagger来查看API文档。
我有一个功能正常的Rails 3应用程序,它使用has_many:通过关联,而不是,因为我将其重制为Rails 4应用程序,让我从Rails 4版本中的关联模型中保存id。 这两个版本的三个相关模型是相同的。 分类.rb Question.rb 类别.rb 在这两个应用程序中,类别id都像这样传递到创建操作中 在Rails 3应用程序中,当我创建一个新问题时,它会插入问题表,然后插入分类表 在ra