Swagger: как представить свойство, тип которого является одним из списка типов?

У меня есть объект со свойством, которое является объектом, тип которого будет одним из списка типов. Все мои попытки были отклонены редактором Swagger со следующей ошибкой:

Data does not match any schemas from 'anyOf'
Jump to line 43
Details
Object
code: "ANY_OF_MISSING"
message: "Data does not match any schemas from 'anyOf'"
path: Array [7]
inner: Array [2]
level: 900
type: "Swagger Error"
description: "Data does not match any schemas from 'anyOf'"
lineNumber: 43

Полный файл спецификации swagger выглядит следующим образом (рассматриваемое поле — DataSetsInquiryRsp.dataSets.dataSet):

swagger: '2.0'
info:
  title: My API
  description: My Awesome API
  version: 1.0.0
paths:
  /dataSetsInquiry:
    get:
      description: Retrieve one or more data-sets.
      parameters:
        - name: ids
          in: query
          description: List of identifiers of requested data-sets.
          required: true
          type: array
          items:
            type: string
      responses:
        '200':
          description: Requested data-sets.
          schema:
            $ref: '#/definitions/DataSetsInquiryRsp'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
definitions:
  DataSetsInquiryRsp:
    type: object
    additionalProperties: false
    properties:
      sessionIdentifier:
        description: Identifier of the secure session with the server.
        type: number
      dataSets:
        type: object
        additionalProperties: false
        properties:
          id:
            type: string
          dataSet:
            type: array
            items:
              oneOf:
              - $ref: '#/definitions/Customer'
              - $ref: '#/definitions/Merchant'
  Customer:
    type: object
    additionalProperties: false
    properties:
      firstName:
        description: First name of the customer
        type: string
      lastName:
        description: Last name of the customer
        type: string
  Merchant:
    type: object
    additionalProperties: false
    properties:
      code:
        description: Code the Merchant.
        type: string
      name:
        description: Name of the Merchant.
        type: string

person Younes    schedule 09.10.2015    source источник
comment
Возможный дубликат oneOf в схеме Swagger не работает   -  person Helen    schedule 18.04.2019
comment
Мой вопрос был в 2015 году, вопрос, который вы указали как дублированный моим, был задан в 2016 году. Что является дубликатом чего? Кроме того, я уже ответил на вопрос и объяснил источник ошибки, с которой столкнулся!   -  person Younes    schedule 18.04.2019
comment
В этом вопросе и ответах есть некоторые подробности, в частности, что oneOf/anyOf теперь поддерживается в OpenAPI 3.0. Просто связать его здесь для будущих посетителей.   -  person Helen    schedule 18.04.2019
comment
Пометка моего вопроса как дубликата более нового вопроса неверна. Было бы лучше либо обновить мой ответ, либо сослаться на ответ на новый вопрос. Или используйте другой механизм, который является точным.   -  person Younes    schedule 18.04.2019


Ответы (1)


Ну, проблема просто в том, что Swagger не поддерживает oneOff. Фактически, Swagger поддерживает подмножество Json-Schema и добавляет несколько вещей (например, тип данных file).

Что здесь плохо, так это ошибка, возвращаемая Swagger. Это не помогает соответствовать. И это относится ко всем Json-Schema валидаторам, с которыми я работал до сих пор: is-my-json-valid , jsen.

person Younes    schedule 11.10.2015