J'ai un REST à documenter, certains d'entre eux acceptent un tableau simple comme:
[
{ "name":"a" },
{ "name":"b" },
{ "name":"c" }
]
Comment puis-je décrire ceci dans la section modèle de Swagger? Je ne peux créer que 'tableau nommé' comme
model {
properties: { "arr": { "type":"array", ......
mais il décrit des données comme ceci:
"arr": [
{ "name":"a" },
{ "name":"b" },
{ "name":"c" }
]
Tony YUEN était proche, mais pas de cigare. Voici la définition appropriée utilisant YAML dans OpenAPI/Swagger:
/test:
post:
summary: test 123
description: test 123
parameters:
- name: param1
in: body
required: true
description: test param1
schema:
$ref: '#/definitions/stackoverflow'
responses:
200:
description: OK
Cela produit:
stackoverflow2[
{
name: string
}
]
L'exemple de Tony produit:
[
stackoverflow {
name: string
}
]
Remplissez Swagger/OpenAPI en tant que YAML (copier/coller)
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/stackoverflow'
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/stackoverflow2'
responses:
200:
description: OK
definitions:
stackoverflow:
type: object
properties:
name:
type: string
description: name of the object
stackoverflow2:
type: array
items:
type: object
properties:
name:
type: string
description: name of the object
Voici une version 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/stackoverflow"
}
}
} ],
"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/stackoverflow2"
}
} ],
"responses" : {
"200" : {
"description" : "OK"
}
}
}
}
},
"definitions" : {
"stackoverflow" : {
"type" : "object",
"properties" : {
"name" : {
"type" : "string",
"description" : "name of the object"
}
}
},
"stackoverflow2" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/stackoverflow2_inner"
}
},
"stackoverflow2_inner" : {
"properties" : {
"name" : {
"type" : "string",
"description" : "name of the object"
}
}
}
}
}
Collez ceci à http://editor.swagger.io/#/ et cliquez sur "essayer cette opération"
{
"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"
}
}
}
}
}
}
Cela ressemble probablement à ceci:
...
"parameters" : [{
"name" : "whatEverThatArrayCalled",
"type" : "array",
"items" : {
"$ref" : "whatEverThatArrayCalled"
}
...
}],
"models" : {
{
"id" : "whatEverThatArrayCalled",
"properties":
{
"whatEverThatArrayCalled" :
{
"type" : "array",
"items":{"name":"a",
"name":"b",
"name":"c"
},
}
}
}
}
...
Considérant le format du tableau que vous avez mentionné
[
{ "name":"a" },
{ "name":"b" },
{ "name":"c" }
]
Je suppose que le format suivant peut être utilisé:
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
J'ai essayé le suivant dans le editor.swagger.io, il répond à la demande de cette question et fonctionne. Le corps de la requête POST attend un tableau. Le tableau est composé d'éléments 'stackoverflow'. Chaque élément est un objet doté de la propriété name.
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
parameters:
- name: "items"
in: "formData"
description: "description"
required: "true"
type: "array"
items:
type: "object"
additionalProperties:
properties:
name:
type: "string"
Selon leurs documents https://swagger.io/docs/specification/data-models/dictionaries/ , cela devrait donner lieu à un tableau avec des objets ayant une propriété appelée name et datatype est string.
On peut y accéder via le corps de la requête, quelque chose comme request.body.items
Mise à jour:
il semble qu'il suffise de faire (sans les propriétés supplémentaires):
items:
type: object
properties:
name:
type: string
Maintenant, vous avez les éléments où chacun a une clé appelée nom et une valeur correspondante.
Si tel est le cas, ce que demandait le TO ...