如何使用 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

我会像上面那样做,但你也可以让它与你的转换器一起工作。

文档说解析器正在被弃用,但不会很快,我个人找不到替代方案。