validator objects example array rest swagger swagger-ui

rest - objects - ¿Cómo describir un modelo en Swagger para una matriz con objetos simples?



swagger validator (7)

Intenté el siguiente en el editor.swagger.io, satisface la solicitud de esta pregunta y funciona. El cuerpo de la solicitud POST espera una matriz. La matriz se compone de elementos ''stackoverflow''. Cada elemento es un objeto, que tiene propiedad de nombre.

paths: /test: post: summary: test 123 description: test 123 parameters: - name: param1 in: body required: true description: test param1 schema: type: array items: $ref: ''#/definitions/stackoverflow'' responses: 200: description: OK definitions: stackoverflow: type: object properties: name: type: string description: name of the object

Tengo un servicio REST para documentar, algunos de ellos aceptan una matriz simple como:

[ { "name":"a" }, { "name":"b" }, { "name":"c" } ]

¿Cómo describo esto en la sección de modelos de Swagger? Solo puedo crear ''named array'' como

model { properties: { "arr": { "type":"array", ......

pero describe datos como este:

"arr": [ { "name":"a" }, { "name":"b" }, { "name":"c" } ]


Pegue esto en http://editor.swagger.io/#/ y haga clic en "try this operation"

{ "swagger": "2.0", "info": { "version": "1.0.0", "title": "Privacy-Service API" }, "paths": { "/allNames": { "post": { "consumes": [ "application/json", "application/xml" ], "produces": [ "application/json", "application/xml" ], "parameters": [ { "name": "request", "in": "body", "schema": { "$ref": "#/definitions/ArrayOfNames" } } ], "responses": { "200": { "description": "List of names", "schema": { "type": "array", "items": { "type": "string" } } } } } } }, "definitions": { "ArrayOfNames": { "type": "array", "items": { "minItems": 1, "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string" } } } } } }


Probablemente se ve así:

... "parameters" : [{ "name" : "whatEverThatArrayCalled", "type" : "array", "items" : { "$ref" : "whatEverThatArrayCalled" } ... }], "models" : { { "id" : "whatEverThatArrayCalled", "properties": { "whatEverThatArrayCalled" : { "type" : "array", "items":{"name":"a", "name":"b", "name":"c" }, } } } }

...


Si mi comprensión es correcta, creo que lo siguiente puede ser lo que quieras.

Como lo mencionaste,

algunos de ellos aceptan una matriz simple

Entonces se pasaría a través de un parámetro.

"parameters" : [{ "name" : "param_name", "type" : "array", "items" : { "$ref" : "M" } ... }] ...

Para la sección de modelo:

"models" : { "M": { "id" : "M", "properties": { "name" : { "type" : "string" } } }


Teniendo en cuenta el formato de la matriz que mencionaste

[ { "name":"a" }, { "name":"b" }, { "name":"c" } ]

Supongo que se puede usar el siguiente formato:

paths: /test: post: description: Test request operationId: test parameters: - in: body name: requestParameter required: true schema: type: array items: properties: name: type: string responses: ''200'': description: Success response


Tony YUEN estaba cerca, pero no cigarro. Esta es la definición correcta usando YAML en OpenAPI / Swagger:

/test: post: summary: test 123 description: test 123 parameters: - name: param1 in: body required: true description: test param1 schema: $ref: ''#/definitions/'' responses: 200: description: OK

Esto produce:

2[ { name: string } ]

El ejemplo de Tony produce:

[ { name: string } ]

Completa Swagger / OpenAPI como YAML (copiar y pegar)

swagger: ''2.0'' ################################################################################ # API Information # ################################################################################ info: version: "Two-point-Oh!" title: Simple objects in array test description: | Simple objects in array test ################################################################################ # Parameters # ################################################################################ paths: /test: post: summary: Array with named objects description: Array with named objects parameters: - name: param1 in: body required: true description: test param1 schema: type: array items: $ref: ''#/definitions/'' responses: 200: description: OK /test2: post: summary: Array with simpel (nameless) objects description: Array with simpel (nameless) objects parameters: - name: param1 in: body required: true description: test param1 schema: $ref: ''#/definitions/2'' responses: 200: description: OK definitions: : type: object properties: name: type: string description: name of the object 2: type: array items: type: object properties: name: type: string description: name of the object

Aquí hay una versión JSON de Swagger / OpenAPI

{ "swagger" : "2.0", "info" : { "description" : "Simple objects in array test/n", "version" : "Two-point-Oh!", "title" : "Simple objects in array test" }, "paths" : { "/test" : { "post" : { "summary" : "Array with named objects", "description" : "Array with named objects", "parameters" : [ { "in" : "body", "name" : "param1", "description" : "test param1", "required" : true, "schema" : { "type" : "array", "items" : { "$ref" : "#/definitions/" } } } ], "responses" : { "200" : { "description" : "OK" } } } }, "/test2" : { "post" : { "summary" : "Array with simpel (nameless) objects", "description" : "Array with simpel (nameless) objects", "parameters" : [ { "in" : "body", "name" : "param1", "description" : "test param1", "required" : true, "schema" : { "$ref" : "#/definitions/2" } } ], "responses" : { "200" : { "description" : "OK" } } } } }, "definitions" : { "" : { "type" : "object", "properties" : { "name" : { "type" : "string", "description" : "name of the object" } } }, "2" : { "type" : "array", "items" : { "$ref" : "#/definitions/2_inner" } }, "2_inner" : { "properties" : { "name" : { "type" : "string", "description" : "name of the object" } } } } }


parameters: - name: "items" in: "formData" description: "description" required: "true" type: "array" items: type: "object" additionalProperties: properties: name: type: "string"

Según sus documentos https://swagger.io/docs/specification/data-models/dictionaries/ , esto debería dar como resultado una matriz con objetos que tienen una propiedad llamada name y datatype es string.
Se puede acceder a través del cuerpo de solicitudes, algo así como request.body.items

Actualizar:

parece que es suficiente hacer (sin las propiedades adicionales):

items: type: object properties: name: type: string

Ahora tienes los elementos donde cada uno tiene una clave llamada nombre y un valor correspondiente.

Si es esto, lo que el TO estaba pidiendo ...