注意:这个问题与这里的问题不同,因为我需要它与 Swagger 一起工作。
给定一个 FastAPIGET端点,我希望允许任意一组 URL 参数,同时保持 Swagger 支持。
我的用例是我想要支持一组类似于 JSON API 的查询参数,如下所示:
/api/books/?include=author&sort=name,zip&sort[author]=-lname&fields=name,phone,street
Run Code Online (Sandbox Code Playgroud)
使用方括号使我无法使用传统的类来对查询参数进行建模,因此我直接使用该Request对象。但是,我想使用 Swagger 来测试端点。我找不到提供任意 URL 参数的方法。我很高兴将它们作为单个字符串输入。
人们可能会这样想:
def books(**params):
....
Run Code Online (Sandbox Code Playgroud)
这给出了一个curl语句:
api/books?params=sort%5Bone%5D%3Dtwo'
Run Code Online (Sandbox Code Playgroud)
我真正想要的是:
api/books?sort&one%5D%3Dtwo'
Run Code Online (Sandbox Code Playgroud) 我有一个GET在路径中带有请求参数的方法:
@router.get('/users/{user_id}')
async def get_user_from_string(user_id: str):
return User(user_id)
Run Code Online (Sandbox Code Playgroud)
'/users/{user_id}'是否可以从请求中获取基本 url 原始路径(即)?
我尝试使用以下方式:
path = [route for route in request.scope['router'].routes if
route.endpoint == request.scope['endpoint']][0].path
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我得到:
属性错误:“安装”对象没有属性“端点”