Как сделать переменные родительской модели необязательными в дочерней модели, если все родительские переменные помечены как обязательные? - PullRequest
0 голосов
/ 07 января 2019

У меня есть родительское определение, которое расширяется дочерним определением с использованием ключевого слова allOf. Поскольку я пометил все переменные, как требуется в родительской модели, он помечен, как требуется в дочерней модели, модель тоже. Но мне нужно, чтобы родительская переменная была помечена как не обязательная . Есть идеи?

definitions: 
  Parent:
    type: "object"
    required:
      - "id"
    properties:
      id:
        type: "integer"
        format: "int64"
        minimum: 1
        example: "123456"        

  Child:
    allOf:
      - $ref: "#/definitions/Parent"
    type: "object"
    required: 
      - "sample"
    properties:
      sample:
        type: "string"
        format: "full-date"
        example: "2001/12/31"

1 Ответ

0 голосов
/ 12 января 2019

Вы не можете не требовать поля родительской модели в дочерних моделях. Обходной путь должен определить базовую модель, скажем, ParentBase, с необязательными свойствами и наследовать Parent и Child от этой модели.

definitions:
  ParentBase:
    type: object
    properties:
      id:
        type: integer
        format: int64
        minimum: 1
        example: 123456

  Parent:
    allOf:
      - $ref: "#/definitions/ParentBase"
      - required:
          - id

  Child:
    allOf:
      - $ref: "#/definitions/ParentBase"
      - type: object
        required: 
          - sample
        properties:
          sample:
            type: string
            format: full-date
            example: "2001/12/31"


На несвязанной ноте свойство id определяется как целое число, но его примерное значение является строкой. Это неправильно - пример типа данных должен соответствовать типу свойства. Вам нужно использовать 123456 без кавычек.

id:
  type: integer
  #example: "123456"  # Wrong
  example: 123456     # Correct
...