Как объединить две схемы openapi/swagger в одну единую схему

#swagger #openapi #swagger-editor

Вопрос:

У меня есть две схемы в файле openapi:

 SchemaA:
  type: object
  properties:
    property_a1: 
      type: string
    property_a2: 
      type: string

SchemaB:
  type: object
  properties:
    property_b1: 
      type: string
    property_b2: 
      type: string
 

Я хочу, чтобы результирующая схема была:

 ResultantSchema:
  type: object
  properties:
    property_a1: 
      type: string
    property_a2: 
      type: string
    property_b1: 
      type: string
    property_b2: 
      type: string
 

Я пробовал использовать оператор allOf для объединения следующим образом:

 ResultantSchema:
  type: object
  properties:
    - $ref: '#/SchemaA'
    - $ref: '#/SchemaB'
 

Но это приводит к результату в виде схемы с двумя объектами внутри:

 WrongResultantSchema:
 - type: object
    properties:
     property_a1: 
      type: string
     property_a2: 
      type: string
 - type: object
    properties:
     property_b1: 
       type: string
     property_b2: 
       type: string
 

Что неверно… Есть ли какой-либо способ получить результирующую схему с одним объектом вместо двух вложенных объектов?

Ответ №1:

Вот как объединить несколько схем в OpenAPI 3.0:

 ResultantSchema:
  allOf:
    - $ref: '#/components/schemas/SchemaA'
    - $ref: '#/components/schemas/SchemaB'
 

В OpenAPI 2.0 ( swagger: '2.0' ):

 ResultantSchema:
  allOf:
    - $ref: '#/definitions/SchemaA'
    - $ref: '#/definitions/SchemaB'
 

Комментарии:

1. Нет, это не работает, он по-прежнему показывает два объекта в одной схеме.

2. Можете ли вы добавить скриншот того, что не так?