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

时间:2017-11-11 14:38:45

标签: swagger swagger-2.0 openapi

我使用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 个答案:

答案 0 :(得分: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"]
          }
        }
      }
    ]
  }
}