Open API 3-如何描述一个查询参数,该查询参数是一个整数数组,但可以是单个项目?

时间:2020-05-11 18:27:18

标签: swagger jsonschema openapi ajv

使用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: formexplode: 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。但是我仍然无法使用单个元素数组!

1 个答案:

答案 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服务器一起使用。