I am trying to design an endpoint of our API and the payload is an object 
which (in Java) is represented by a base class and several sub classes.

definitions:
  AnimalType:
    type: string
    enum: &animal_type_values
    - dog
    - cat
    - pig
    - horse

  EntityType:
    description: An enumeration of the supported entity types
    type: string
    enum:
    - Animal
    - Crop
    - Person
    - Building

  Entity:
    discriminator: entity_type
    required:
      - entity_type
      - id
    properties:
      id:
        type: integer
        format: int64
        readOnly: true
        description: The internal entity id for this entity representation
        example: 1438752
      entity_type:
        $ref: '#/definitions/EntityType'

  AnimalPayload:
    discriminator: animal_type
    allOf:
      - $ref: '#/definitions/Dog'
      - $ref: '#/definitions/Cat'
      - $ref: '#/definitions/Pig'
      - $ref: '#/definitions/Horse'

  Animal:
    discriminator: animal_type
    allOf:
      - $ref: '#/definitions/Entity'
      - type: object
        required:
          - animal_type
        properties:
          animal_type:
            $ref: '#/definitions/AnimalType'
          name:
            type: string
            readOnly: true    
          birth_date:
            type: string
            format: date
          gender:
            type: string
            enum:
            - male
            - female

  Dog:
    allOf:
      - $ref: '#/definitions/Animal'
      - type: object
        properties:
          breed:
            type: string
            
  Cat:
    allOf:
      - $ref: '#/definitions/Animal'
      - type: object
        properties:
          num_lives:
            type: integer
            format: int32

  Pig:
    allOf:
      - $ref: '#/definitions/Animal'
      - type: object
        properties:
          color:
            type: string

  Horse:
    allOf:
      - $ref: '#/definitions/Animal'
      - type: object
        properties:
          breed:
            type: string
            tamed:
              type: boolean
paths:
  /animals:

    post:
      parameters:
        animal:
          name: animal
          in: body
          schema:
            - $ref: '#/parameters/Dog'
            - $ref: '#/parameters/Cat'
            - $ref: '#/parameters/Pig'
            - $ref: '#/parameters/Horse'


I know this is not valid, but how do I get this to work in some form? I 
would like to simply use a Dog, Cat, Pig, or Horse object as the payload.

The only way I can think of is to create the AnimalPayload object. That is 
messy and confusing. Am I missing something? Can I model this differently 
to make this work more intuitively?

-- 
You received this message because you are subscribed to the Google Groups 
"Swagger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to