首页 > 解决方案 > OpenAPI 规范使用 allOf 覆盖继承的属性

问题描述

我正在尝试通过Open API Enforcer运行现有的 OpenAPI 模式,并且在使用 allOf 时遇到各种验证错误。下面描述了一种这样的用法:

考虑架构中的以下属性:

queryVersion:
    allOf:
      - $ref: 'VersionDefinition.yaml'
      - description: >-
          This is my overriding version

VersionDefinition.yaml 定义如下:

description: >-
  Some default version description.
type: string
default: '5.2'

上面的定义有两个问题:

  1. OpenAPI Enforcer 期望在 allOf 或类似关键字中定义的所有模式都以类型定义开头。所以,它吐出的错误是:

    在:queryVersion > allOf > 1 缺少必需的属性:类型

我通过如下修改 allOf 定义来解决这个问题:

 queryVersion:
    allOf:
    - $ref: 'VersionDefinition.yaml'
    - type : object
      properties:
      - description: >- 
           This is my overriding version

这消除了错误,但我应该在生成的模式中看到什么?原始作者表示他正在使用 allOf 来覆盖属性描述。但是,生成的模式包括以下结果:

                "queryVersion": {
                    "allOf": [
                      {
                        "description": "Some default version description",
                        "type": "string",
                        "default": "5.2"
                      },
                      {
                        "type": "object",
                        "properties": [
                          {
                            "description": "This is my overriding version"
                          }
                        ]
                      }
                    ]
                  }

我期望看到的是:

      "queryVersion": {
                        "description": "This is my overriding version",
                        "type": "string",
                        "default": "5.2"
                      }

我会继续挖掘,但有什么想法吗?

标签: jsonschemaopenapijson-schema-validator

解决方案


推荐阅读