arrays - tablas - ¿Cómo se crea un esquema swagger que incluye una matriz de diferentes tipos?
tablas en matlab (3)
Estoy intentando definir una definición de esquema swagger para un objeto que contiene una matriz de objetos de diferentes tipos.
Aquí está el esquema json para un objeto de plantilla (y todos los tipos de objetos relacionados). Soy consciente de que swagger no admite el predicado oneOf, por lo que solo estoy tratando de averiguar cómo describir esta estructura de datos en swagger. He intentado muchas variaciones en esta sintaxis, pero ninguna ha funcionado y esto fue lo más cerca que pude en base a la especificación y algunos ejemplos que se encuentran aquí: http://json-schema.org/example2.html
swagger: ''2.0''
info:
version: 1.0.0
title: IDMU
paths:
definitions:
template:
type: object
properties:
collection:
type: string
name:
type: string
columnValue:
type: string
description:
type: string
outputFile:
type: string
content:
type: string
directives:
type: array
items:
type: object
oneOf:
-
$ref: ''#/definitions/directiveRequire''
-
$ref: ''#/definitions/directiveReplace''
-
$ref: ''#/definitions/directiveReplaceRowSql''
-
$ref: ''#/definitions/directiveReplaceRowCsv''
-
$ref: ''#/definitions/directiveReplaceColSql''
-
$ref: ''#/definitions/directiveReplaceColCsv''
-
$ref: ''#/definitions/directiveInsertTag''
-
$ref: ''#/definitions/directiveInsertCsv''
-
$ref: ''#/definitions/directiveInsertSql''
providerCsv:
type: object
properties:
type:
type: integer
maximum: 3
minimum: 3
tag:
type: string
url:
type: string
staticData:
type: string
providerTag:
type: object
properties:
type:
type: integer
maximum: 2
minimum: 2
tag:
type: string
condition:
type: integer
list:
type: boolean
value:
type: string
providerSql:
type: object
properties:
type:
type: integer
maximum: 1
minimum: 1
source:
type: string
columns:
type: string
from:
type: string
where:
type: string
directive:
type: object
discriminator: type
properties:
type:
type: integer
softFail:
type: boolean
required:
- type
directiveRequire:
type: object
allOf:
- $ref: ''#/definitions/directive''
- properties:
tags:
type: array
items:
type: string
directiveReplace:
type: object
allOf:
- $ref: ''#/definitions/directive''
- properties:
description:
type: string
from:
type: string
to:
type: string
directiveReplaceRowSql:
type: object
allOf:
- $ref: ''#/definitions/directive''
- properties:
description:
type: string
provider:
$ref: ''#/definitions/providerSql''
directiveReplaceRowCsv:
type: object
allOf:
- $ref: ''#/definitions/directive''
- properties:
description:
type: string
provider:
$ref: ''#/definitions/providerCsv''
directiveReplaceColCsv:
type: object
allOf:
- $ref: ''#/definitions/directive''
- properties:
description:
type: string
fromColumn:
type: string
toColumn:
type: string
provider:
$ref: ''#/definitions/providerCsv''
directiveReplaceColSql:
type: object
allOf:
- $ref: ''#/definitions/directive''
- properties:
description:
type: string
fromColumn:
type: string
toColumn:
type: string
provider:
$ref: ''#/definitions/providerSql''
directiveInsertTag:
type: object
allOf:
- $ref: ''#/definitions/directive''
- properties:
description:
type: string
notLast:
type: array
items:
type: string
onlyLast:
type: array
items:
type: string
provider:
$ref: ''#/definitions/providerTag''
directiveInsertSql:
type: object
allOf:
- $ref: ''#/definitions/directive''
- properties:
description:
type: string
notLast:
type: array
items:
type: string
onlyLast:
type: array
items:
type: string
provider:
$ref: ''#/definitions/providerSql''
directiveInsertCsv:
type: object
allOf:
- $ref: ''#/definitions/directive''
- properties:
description:
type: string
notLast:
type: array
items:
type: string
onlyLast:
type: array
items:
type: string
provider:
$ref: ''#/definitions/providerCsv''
OpenAPI Specification 3.0 admitirá oneOf
y anyOf
.
En 2.0, puede definir un objeto con diferentes propiedades como solo type: object
( type: object
de forma libre). Para su caso, puede querer hacer esto:
schema:
type: array
items:
type: object
Puede configurar los items:
referencia al tipo base. El modelo de herencia variará según el idioma durante la exportación desde Swagger específicamente, pero en la práctica las definiciones de métodos especifican los tipos de parámetros aceptables utilizando el modelo base si desea poder aceptar varias subclases que heredan el mismo modelo base.
Fragmento de Swagger -
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
pseudocódigo
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);
Ejemplo de respuesta API que devuelve una serie de videos
responses:
''200'':
description: An array of videos
schema:
type: array
items:
$ref: ''#/definitions/Video''
Referencia