How do you create a swagger schema that includes an array of varying types How do you create a swagger schema that includes an array of varying types arrays arrays

How do you create a swagger schema that includes an array of varying types


OpenAPI 3.0 supports oneOf and anyOf:

      schema:        type: array        items:          oneOf:            - $ref: '#/components/schemas/directiveRequire'            - $ref: '#/components/schemas/directiveReplace'            - ...

In OpenAPI 2.0, you can define an object with varying properties as just type: object (free-form object). For your case, you may want to do this:

      schema:        type: array        items:          type: object


You can set the items: reference to the base type. The inheritance model will vary by language during export from swagger specifically, but in practice method definitions specify the acceptable parameter types using the base model if you want to be able to accept multiple subclasses that inherit the same base model.

Swagger snippet -

definitions:  template:    type: object    properties:      collection:        type: string      ...      directives:        type: array        items:          $ref: '#/definitions/directive'  directive:    type: object    discriminator: type    properties:      type:        type: integer      softFail:        type: boolean    required:      - type  directiveRequire:    allOf:    - $ref: '#/definitions/directive'    - type: object      properties:        tags:          type: array          items:            type: string  directiveReplace:    allOf:    - $ref: '#/definitions/directive'    - type: object      properties:        description:          type: string        from:          type: string        to:          type: string

pseudocode -

class template {  // all the other properties  directive[] directives;  function addDirective(directive newDirective) {    this.directives.push(newDirective);  }}class directive {  int type;  boolean softFail;}class directiveRequire inherits directive { //inherits type, softFail string[] tags;}class directiveReplace {  //inherits type, softFail  string description;  string from;  string to;}template templateOne = new template();directiveReplace directiveOne = new directiveReplace();directiveOne.type = "replace";directiveOne.softFail = false;directiveOne.description = "first directive replace";directiveOne.from = "first";directiveOne.to = "one";directiveRequire directiveTwo = new directiveRequire();directiveTwo.type = "require";directiveTwo.softFail = true;directiveTwo.tags = ["second","directive"];templateOne.addDirective(directiveOne);templateOne.addDirective(directiveTwo);


Sample API response that returns an array of videos

  responses:    '200':      description: An array of videos      schema:        type: array        items:          $ref: '#/definitions/Video' 

Reference

https://swagger.io/docs/specification/adding-examples/