В 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.



Это должно работать:
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'