使用Open API 3.0.1,我试图描述类型为“整数”的 query 参数,可以说我们称之为ids
,它可以是单独的也可以是数组。
例如:
/my-endpoint?ids=111
或
/my-endpoint?ids=111&ids=222
我确实尝试过:
- name: ids
in: query
required: false
schema:
type: array
items:
type: integer
我知道style: form
和explode: true
are the default。
但是当我用实际的请求验证这一点时(我使用express-openapi-validate,它是Ajv的包装),我得到了这些错误:
/ my-endpoint?ids = 111
"Error while validating request: request.query.ids should be array"
/ my-endpoint?ids = 111&ids = 222&ids = 333
"Error while validating request: request.query.ids[0] should be integer"
如果我使用“字符串”而不是“整数”:
- name: ids
in: query
required: false
schema:
type: array
items:
type: string
/ my-endpoint?ids = 111
"Error while validating request: request.query.ids should be array"
/ my-endpoint?ids = 111&ids = 222&ids = 333
Valid!
我应该如何描述这个ids
参数,该参数必须是整数值?
更新:我现在了解到,当由Express服务器(我使用)反序列化时,任何查询参数都将是string
。但是我仍然无法使用单个元素数组!
答案 0 :(得分:0)
@Helen发表评论后,我确实尝试了另一个验证库express-openapi-validator,现在它可以很好地与以下程序配合使用:
- name: ids
in: query
required: false
style: form
explode: true
schema:
type: array
items:
type: integer
使用express-openapi-validate,我唯一能够使其正常工作的方法是使用:
- name: ids
in: query
required: false
schema:
anyOf:
- type: array
items:
type: string
pattern: '^\d+$'
- type: string
pattern: '^\d+$'
因此,我建议您将express-openapi-validator与Express服务器一起使用。