vectores una tablas tabla recorrer programacion matriz matrices llenar extraer elementos datos como almacenar arrays json yaml swagger

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