Currently, neither tool will show those fields. And since neither of them 
performs validation on responses, sub types are irrelevant.

 

 

 

From: <[email protected]> on behalf of Jeff Haynes 
<[email protected]>
Reply-To: "[email protected]" 
<[email protected]>
Date: Friday, 12 August 2016 at 15:22
To: "[email protected]" 
<[email protected]>
Subject: Re: How do I specify a payload that allows different sub types?

 

Does that show all the fields for each type through swagger-ui and 
swagger-editor? 

And does that allow validation of the sub types?

 

Thanks

 

 

On Aug 12, 2016, at 5:14 PM, Ron Ratovsky <[email protected]> wrote:

 

You just set the body parameter to be Animal. The rest inherit from it, and are 
valid as input.

 

 

 

From: <[email protected]> on behalf of Jeff Haynes 
<[email protected]>
Reply-To: "[email protected]" 
<[email protected]>
Date: Friday, 12 August 2016 at 15:10
To: Swagger <[email protected]>
Subject: How do I specify a payload that allows different sub types?

 

 

 

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.

 

-- 
You received this message because you are subscribed to a topic in the Google 
Groups "Swagger" group.
To unsubscribe from this topic, visit 
https://groups.google.com/d/topic/swagger-swaggersocket/Jkz8lvE4s5A/unsubscribe.
To unsubscribe from this group and all its topics, send an email to 
[email protected].
For more options, visit https://groups.google.com/d/optout.

 

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

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