尝试时出现错误,但是我想创建一个接受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:正文部分。所以我知道2个参数都很好。似乎我在向python发送json数组时遇到问题。
明确返回的错误是:
connexion.exceptions.InvalidSpecification:{'in':'body','name': 'device_names','required':True,'type':'array','items':{'type': 'string'},'description':'设备名称列表'}在下面无效 任何给定的模式
无法验证中的“ oneOf” schema ['properties'] ['paths'] ['patternProperties'] ['^ /'] ['properties'] ['post'] ['properties'] ['parameters'] ['items']: {'oneOf':[{'$ ref':'#/ definitions / parameter'}, {'$ ref':'#/ definitions / jsonReference'}]}
在instance ['paths'] ['/ devices / list'] ['post'] ['parameters'] [2]: {'description':“设备名称列表”, 'in':'body', 'items':{'type':'string'}, '名称':'设备名称', “必填”:是的, '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
答案 0 :(得分: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