0

我在尝试时遇到错误,但我想创建一个接受 2 个查询参数和 1 个正文项目的端点,一个名称列表。当我在连接中运行它但说它是无效的规范时。

/devices/list:
  post:
    tags: [Devices]
    operationId: app.get_devices
    summary: Gets a complete list of devices.
    parameters:
      - $ref: '#/parameters/foo-t'
      - $ref: '#/parameters/bar-t'
      - in: body
        name: device_names
        required: true
        type: array
        items:
          type: string
        description: a list of devices
...

它在没有 - in: body 部分的情况下编译和运行。所以我知道这两个参数都很好。似乎我在将 json 数组发送到 python 时遇到问题。

显式返回的错误是:

connexion.exceptions.InvalidSpecification: {'in': 'body', 'name': 'device_names', 'required': True, 'type': 'array', 'items': {'type': 'string'} , 'description': 'A list of Device Names'} 在任何给定架构下均无效

无法验证架构中的“oneOf”['properties']['paths']['patternProperties']['^/']['properties']['post']['properties']['parameters'][' items']: {'oneOf': [{'$ref': '#/definitions/parameter'}, {'$ref': '#/definitions/jsonReference'}]}

On instance['paths']['/devices/list']['post']['parameters'][2]: {'description': 'A list of Device Names', 'in': 'body', 'items': {'type': 'string'}, 'name': 'device_names', 'required': True, 'type': 'array'}

我想要的最终状态是我可以说:

//In javascript
$.post("devices/list", {device_names: ["a","b","c"]}, {params:{foo:1, bar:42}}).success( x => {
  //...
});

# In Python3
def get_devices(foo, bar, device_names):
  pass
4

1 回答 1

1

是的,您可以混合使用查询和正文参数。

该错误是由于 body 参数的语法不正确引起的。将其更改为type并被items包裹到schema中,如下所示:

      - in: body
        name: device_names
        required: true
        schema:   # <-------
          type: array
          items:
            type: string
        description: a list of devices

在 OpenAPI 2.0 中,非正文参数(路径、查询、标题、表单参数)type直接使用关键字,但正文参数必须将其类型包装到schema.


上面的示例匹配一个包含字符串数组的请求正文,即 - ["a", "b", "c"]

如果应该将数组包装到 JSON 对象中

{
   "device_names": ["a", "b", "c"]
}

你需要改变body参数如下:

      - in: body
        name: device_names
        required: true
        schema:
          type: object
          required: [device_names]
          properties:
            device_names:
              type: array
              items:
                type: string
        description: a list of devices
于 2019-10-11T17:26:21.080 回答