OpenAPI:可选属性的强制属性

问题描述 投票:0回答:1

几乎是标题所说的。我在请求正文中有一个可选对象。但是,如果给出了该对象,则它必须包含一些子属性。

我的OpenAPI组件配置如下:

UserDetails:
  type: object
  properties:
    surname:
      type: string
    givenName:
      type: string
    dob:
      type: string
      format: date
    gender:
      type: string
      enum:
        - male
        - female
        - others
    partner:
      type: object
      properties:
        name:
          type: string
        phone:
          type: string
          maxLength: 10
          minLength: 10
          pattern: ^[1-9]+[0-9]{9}$
      required: [name, phone]
  required:
    - surname
    - givenName
    - dob

我正在使用express-openapi-validator对此进行验证。现在,我不知道这是否是express-openapi-validator软件包的问题,​​但是可选字段(合作伙伴)的必填字段(名称,电话)从未得到验证。我只提供partner: {},它就可以直接插入,甚至是partner: { name: 'some name', phone: '123' }。应验证电话号码的长度和正则表达式。

我在定义中缺少任何内容吗?

node.js express swagger openapi
1个回答
0
投票

似乎没有解决办法,但我想关闭这只是为了我的和平。

就像@Helen回答的那样,这似乎是库本身的问题。在开发应用程序的过程中,我发现了更多的问题,这些问题使我使用的库express-openapi-validator和另一个库swagger-express-middleware甚至对验证请求的可靠性更低。

我发现的另一个问题是,只有将值作为数组提供时,才使用提供的枚举来验证值:

例如以下内容已正确验证:

UserLiabilities:
  type: object
  properties:
    liabilities:
      type: object
      properties:
        creditCards:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Provider'
              - type: object
                properties:
                  limit:
                    type: number
                    minimum: 0

这里提供者是:

Provider:
  type: object
  properties:
    provider:
      type: string
      enum: ['ABC', 'DEF', 'GHI', 'Others']

但是,如果我需要provider作为对象(而不是上面的数组)中的纯字符串,则不会对其进行验证。并且,它允许任何任意字符串:

homeLoan:
  allOf:
    - $ref: '#/components/schemas/Provider'
    - type: object
      properties:
        amount:
          type: number
          minimum: 0

此行为与我上面已经尝试并提到的至少两个库是一致的。我不确定我在这里做错了什么,但是我已经失去了足够的时间来调试它,最终不得不在服务器本身中解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.