如何使用 swagger 和 flask restplus 正确渲染数组参数?
How to properly render array parameter with swagger and flask restplus?
我正在用 Flask RestPlus 实现一个 Flask 应用程序,它必须在 HTTP GET 端点上接收一个 id(整数)列表,这样应用程序客户端可以获得一个匹配这些标识符的结果列表,例如,与.. .
GET /resource/1,2,3,4
GET /resource?id=1,2,3
GET /resource?id=1&id=2&id=3
... none of werkzeug bultin converters, but following the steps in 默认不支持 url 解析工作正常,我可以使用此转换器接收 ID 列表...
class ListOfIntegerConverter(BaseConverter):
def __init__(self, url_map, randomify=False):
self.regex = r'\d+(?:,\d+)*,?'
def to_python(self, value):
return [int(x) for x in value.split(',')]
def to_url(self, value):
return ','.join(str(x) for x in value)
... 然后正确注册 as stated here ...
app.url_map.converters['list_of_int'] = ListOfIntegerConverter
... 并用于解析 url 参数 ...
@my_namespace.route('/<list_of_int:list_of_ids>/', methods=["GET"])
class MyResourceById(Resource):
def get(self, list_of_ids):
[print(id, type(id)) for id in list_of_ids]
...但是生成的 swagger 文档将字段呈现为纯字符串而不是数组或整数列表,应该像这样呈现...
我知道 swagger 支持 multi-value parameters,但我无法使 Flask RestPlus 相应地呈现此字段。有知道怎么做的人可以帮我出点建议吗?
提前致谢! :)
我认为你必须使用 arg parsers:
id_parser = api.parser()
id_parser.add_argument('id[]', type=int, action='append')
@api.route('/ids', methods=["GET"])
@api.doc(parser=id_parser)
class MyResourceById(Resource):
@staticmethod
def get():
ids = request.args.getlist('id[]')
print(ids)
return ids
我会像上面那样做,但你也可以让它与你的转换器一起工作。
文档说解析器正在被弃用,但不会很快,我个人找不到替代方案。
我正在用 Flask RestPlus 实现一个 Flask 应用程序,它必须在 HTTP GET 端点上接收一个 id(整数)列表,这样应用程序客户端可以获得一个匹配这些标识符的结果列表,例如,与.. .
GET /resource/1,2,3,4
GET /resource?id=1,2,3
GET /resource?id=1&id=2&id=3
... none of werkzeug bultin converters, but following the steps in
class ListOfIntegerConverter(BaseConverter):
def __init__(self, url_map, randomify=False):
self.regex = r'\d+(?:,\d+)*,?'
def to_python(self, value):
return [int(x) for x in value.split(',')]
def to_url(self, value):
return ','.join(str(x) for x in value)
... 然后正确注册 as stated here ...
app.url_map.converters['list_of_int'] = ListOfIntegerConverter
... 并用于解析 url 参数 ...
@my_namespace.route('/<list_of_int:list_of_ids>/', methods=["GET"])
class MyResourceById(Resource):
def get(self, list_of_ids):
[print(id, type(id)) for id in list_of_ids]
...但是生成的 swagger 文档将字段呈现为纯字符串而不是数组或整数列表,应该像这样呈现...
我知道 swagger 支持 multi-value parameters,但我无法使 Flask RestPlus 相应地呈现此字段。有知道怎么做的人可以帮我出点建议吗?
提前致谢! :)
我认为你必须使用 arg parsers:
id_parser = api.parser()
id_parser.add_argument('id[]', type=int, action='append')
@api.route('/ids', methods=["GET"])
@api.doc(parser=id_parser)
class MyResourceById(Resource):
@staticmethod
def get():
ids = request.args.getlist('id[]')
print(ids)
return ids
我会像上面那样做,但你也可以让它与你的转换器一起工作。
文档说解析器正在被弃用,但不会很快,我个人找不到替代方案。