json rest api swagger openapi

Publicar un cuerpo de json con swagger.



rest api (1)

Necesitas usar el parámetro del body :

"parameters": [ { "in": "body", "name": "body", "description": "Pet object that needs to be added to the store", "required": false, "schema": { "$ref": "#/definitions/Pet" } } ],

y #/definitions/Pet se define como un modelo:

"Pet": { "required": [ "name", "photoUrls" ], "properties": { "id": { "type": "integer", "format": "int64" }, "category": { "$ref": "#/definitions/Category" }, "name": { "type": "string", "example": "doggie" }, "photoUrls": { "type": "array", "xml": { "name": "photoUrl", "wrapped": true }, "items": { "type": "string" } }, "tags": { "type": "array", "xml": { "name": "tag", "wrapped": true }, "items": { "$ref": "#/definitions/Tag" } }, "status": { "type": "string", "description": "pet status in the store", "enum": [ "available", "pending", "sold" ] } }, "xml": { "name": "Pet" } },

Ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/2_0/petstore.json#L35-L43

OpenAPI / Swagger v2 spec: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameter-object

Para la especificación de OpenAPI v3, body parámetro del body ha sido desaprobado. Para definir la carga útil de HTTP, uno necesita usar requestBody en requestBody lugar, por ejemplo, https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/petstore.json#L39-L41

OpenAPI v3 spec: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#requestBodyObject

Me gustaría publicar un cuerpo de json con Swagger, así:

curl -H "Content-Type: application/json" -X POST -d {"username":"foobar","password":"xxxxxxxxxxxxxxxxx", "email": "[email protected]"}'' http://localhost/user/register

Actualmente, tengo esta definición:

"/auth/register": { "post": { "tags": [ "auth" ], "summary": "Create a new user account", "parameters": [ { "name": "username", "in": "query", "description": "The username of the user", "required": true, "type": "string" }, { "name": "password", "in": "query", "description": "The password of the user", "required": true, "type": "string", "format": "password" }, { "name": "email", "in": "query", "description": "The email of the user", "required": true, "type": "string", "format": "email" } ], "responses": { "201": { "description": "The user account has been created", "schema": { "$ref": "#/definitions/User" } }, "default": { "description": "Unexpected error", "schema": { "$ref": "#/definitions/Errors" } } } } }

Pero los datos se envían en la URL. Aquí el rizo generado proporcionado por Swagger:

curl -X POST --header ''Content-Type: application/json'' --header ''Accept: application/json'' ''http://localhost/user/register?username=foobar&password=password&email=foo%40bar.com''

Entiendo que el trabajo de query no es bueno, pero no encontré la manera de POSTAR un cuerpo JSON. Traté de formData pero no funcionó.