如何在swagger ui

时间:2017-08-17 13:38:31

标签: swagger swagger-ui swagger-2.0 swagger-editor

我正在使用asp.net webapi 2构建一个web api,对于我的文档,我选择了大摇大摆。

我遇到的问题是我的一个api方法采用嵌套数组(另一个数组中的字符串数组)。当在邮递员中手动测试时,当我键入以下内容时,它会很有效:

http:/localhost:port/setup?array[0]=key1&array[0]=value1&array[1]=key2&array[1]=value2

但是在swagger-ui我输入一个字段,每行只有一个参数。这使我无法为每个嵌套数组输入两个值。

结果应如下所示(json):

[["key1","value1"],["key2","value2"]]

我已经能够通过上面的查询参数实现。虽然我只能在swagger-ui文本字段中实现以下功能:

[["key1"],["value1"],["key2"],["value2"]]

我已经为互联网吸尘了1-2个小时,但是只能找到询问如何在yaml文件中定义嵌套数组的帖子。我在swagger github上读过的一些差事让我觉得根本不可能。虽然它不是一个关键特性,但如果所有测试都按预期工作,那将是非常好的。

所以问题是,如果可能的话,我如何在swagger-ui的嵌套数组中键入两个单独的字符串。

我不是这方面的专业人士。我本周学会了如何使用json api和swagger,所以请在回顾这一点时考虑到这一点。

提前致谢!

1 个答案:

答案 0 :(得分:0)

嵌套数组很简单:

type: array
items:
  type: array
  items: 
    type: string

但OpenAPI / Swagger没有办法像查询一样在查询字符串中序列化嵌套数组。

如果数组具有固定数量的项,则可能的解决方法是将每个嵌套数组定义为单独的查询参数:

paths:
  /setup:
    get:
      parameters:
        - in: query
          name: array[0]
          required: true
          type: array
          items:
            type: string
          collectionFormat: multi   # array[0]=key1&array[0]=value1
        - in: query
          name: array[1]
          required: true
          type: array
          items:
            type: string
          collectionFormat: multi   # array[1]=key2&array[1]=value2

更好的方法是使用POST请求并在请求正文中传递数组:

paths:
  /setup:
    post:
      consumes:
        - application/json
      parameters:
        - in: body
          name: body
          required: true
          schema:
            type: array
            items:
              type: array
              items: 
                type: string