首页 文章

如何从另一个模式继承模式属性?

提问于
浏览
0

我正在使用ReDoc使用OpenAPI 2(Swagger)JSON文件可视化API文档 . 我试图通过将第一个模式包含在第二个模式中来声明两个请求输入参数,如下所示:

...
"definitions": {
    "list-request": {
        "type": "object",
        "properties": {
            "token":{
                "type": "string",
                "format": "access-token",
                "required": true
            },
            "userId":{
                "type": "integer",
                "required": true,
                "format": "int32"
            },
            "mode": {
                "type": "string",
                "required": false,
                "default": "lite",
                "enum": [
                    "lite",
                    "detailed"
                ]
            },
            ... // other peroperties
        },
        "xml": {
            "name": "list-request"
        }
    },
    "list-request-lite":{
        "$ref": "#/definitions/list-request",
        "properties":{
            "mode": {
                "type": "string",
                "required": false,
                "enum": ["lite"]
            }
        }
    },
    ...
}

但它不起作用 - list-request-lite 架构只显示 mode 属性,并且不包含任何 list-request 架构属性 . 我究竟做错了什么?

1 回答

  • 1

    您需要 allOf$ref 与其他属性组合在一起 .

    此外,需要在架构级别的 required 数组中列出所需的属性 . 单个属性没有 required 属性 .

    "definitions": {
      "list-request": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "format": "access-token"
          },
          "userId": {
            "type": "integer",
            "format": "int32"
          },
          "mode": {
            "type": "string",
            "default": "lite",
            "enum": [
              "lite",
              "detailed"
            ]
          }
        },
        "xml": {
          "name": "list-request"
        },
        "required": [     // <---- required properties for this schema
          "token",
          "userId"
        ]
      },
    
      "list-request-lite": {
        "allOf": [        // <---------
          {
            "$ref": "#/definitions/list-request"
          },
          {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": ["lite"]
              }
            }
          }
        ]
      }
    }
    

相关问题