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.