Как наследовать свойства схемы от другой схемы?

Я использую ReDoc для визуализации документации API с использованием JSON-файла OpenAPI 2 (Swagger). Я пытаюсь объявить два входных параметра запроса, включив первую схему во вторую следующим образом:

...
"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 не включено. Что я делаю не так?


person MohaMad    schedule 11.11.2017    source источник


Ответы (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"]
          }
        }
      }
    ]
  }
}
person Helen    schedule 13.11.2017