OpenAPI 3.0 – как объединить/развернуть элементы из одного массива в другой?

В OpenAPI 3.0, если у меня есть два компонента, которые представляют собой массивы похожих типов, например:

components:
  schemas:
    AquaticMammals:
      type: array
      items:
        anyOf:
          - $ref: '#/components/schemas/Dolphin'
          - $ref: '#/components/schemas/Otter'
          - $ref: '#/components/schemas/Seal'
          - $ref: '#/components/schemas/Beaver'
    LandMammals:
      type: array
      items:
        anyOf:
          - $ref: '#/components/schemas/Elephant'
          - $ref: '#/components/schemas/Bear'
          - $ref: '#/components/schemas/Monkey'
          - $ref: '#/components/schemas/Camel'

Есть ли хороший способ создать массив, содержащий все элементы из обоих списков, без необходимости хранить копии обоих списков в третьем компоненте?

Я попробовал несколько вариантов anyOf и allOf, включая этот, но в итоге получил массив массивов, а не один массив, содержащий элементы обоих массивов.

components:
  schemas:
    Mammals:
      type: array
      items:
        anyOf:
          - allOf:
            - $ref: '#/components/schemas/AquaticMammals'
          - allOf:
            - $ref: '#/components/schemas/LandMammalsMammals'

По сути, я ищу эквивалент OpenAPI 3.0 оператора распространения javascript.

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это должно работать:

components:
  schemas:
    Mammals:
      type: array
      items:
        anyOf:
          - $ref: '#/components/schemas/AquaticMammals/items'
          - $ref: '#/components/schemas/LandMammals/items'

Альтернативно вы можете создать именованные схемы для исходных списков anyOf, это немного облегчит создание ссылок.

components:
  schemas:
    AquaticMammal:
      anyOf:
       - $ref: '#/components/schemas/Dolphin'
       - $ref: '#/components/schemas/Otter'
       - $ref: '#/components/schemas/Seal'
       - $ref: '#/components/schemas/Beaver'
    AquaticMammals:
      type: array
      items:
        $ref: '#/components/schemas/AquaticMammal'

    LandMammal:
      anyOf:
        - $ref: '#/components/schemas/Elephant'
        - $ref: '#/components/schemas/Bear'
        - $ref: '#/components/schemas/Monkey'
        - $ref: '#/components/schemas/Camel'
    LandMammals:
      type: array
      items:
        $ref: '#/components/schemas/LandMammal'

    Mammals:
      type: array
      items:
        anyOf:
          - $ref: '#/components/schemas/AquaticMammal'
          - $ref: '#/components/schemas/LandMammal'

Другие вопросы по теме