当前位置: 首页 > 知识库问答 >
问题:

OpenAPI:可选属性的强制属性

龙才俊
2023-03-14

和标题差不多。我在请求正文中有一个可选对象。但是,如果给定了该对象,则它必须包含几个子属性。

我的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)的必填字段(名称、电话)从未验证过。我可以只提供合作伙伴:{},然后直接插入,或者甚至插入合作伙伴:{name:'some name',phone:'123}。应验证电话号码的长度和正则表达式。

我在定义中遗漏了什么吗?

共有1个答案

宋宏毅
2023-03-14

似乎没有解决办法,但我关闭它只是为了让我的心灵平静。

就像@Helen回答的那样,这似乎是库本身的问题。在开发我的应用程序的过程中,我发现了更多的问题,这使得我使用的库Expres-openapi-validator和另一个库swagger-Expres-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']

但是,如果我需要提供程序作为对象中的纯字符串(不是在上面的数组中),它不会经过验证。而且,它允许任何任意字符串:

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

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

 类似资料:
  • 以OpenAPI 3定义为例: 有没有办法重用,还是每次使用时都必须指定它?

  • 直接上代码看注释: <?php namespace Yurun\Util\YurunHttp; /** * 所有属性的常量定义 * * PRIVATE_ 开头的为内部属性,请勿使用 */ abstract class Attributes { /** * 客户端参数 */ const OPTIONS = 'options'; /**

  • 4.6.6 强制属性操作符 在程序中,我们有时需要对同一个存储单元以不同的属性来访问,或对一些不确定的存储属性需要显式指定等,这时,我们就需要强制属性操作符PTR。该操作符的作用有点象C语言中的类型强制方法。 对于指令:MOV [BX], 1H,其目标操作数[BX]是寄存器间接寻址方式,它指向一个存储单元。在作传送操作时,是把“1H”扩展成8位作字节传送,还是扩展成16位作字传送呢?这就使该指令具

  • 有大量属性能用来控制 Hibernate 在运行期的行为。它们都是可选的,并拥有适当的默认值。 警告 其中一些属性是"系统级(system-level)的"。系统级属性只能通过java -Dproperty=value 或 hibernate.properties 来设置,而不能用上面描述的其他方法来设置。 表 3.3. Hibernate 配置属性 属性名 用途 hibernate.dialec

  • 我正在VSCode中使用OpenAPI 3编写一个API文档,扩展为OpenAPI(Swagger)Editor v4.9.1。直到今天它都运行良好-突然我的文档在所有模式声明中充满了“属性”错误。错误是:

  • 不管怎样,都要强迫EMCALC在基础上运行。例如,我有这个代码。 sass simple不运行emCalc函数,就可以准确地生成该函数。是否需要强制sass处理器首先运行emCalc函数?