webentwicklung-frage-antwort-db.com.de

Wie kann man in Swagger ein Modell für ein Array mit einfachen Objekten beschreiben?

Ich muss einen REST Service dokumentieren, einige von ihnen akzeptieren einfache Arrays wie:

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

Wie beschreibe ich das im Swagger-Modellabschnitt? Ich kann nur 'named array' wie erstellen

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

aber es beschreibt Daten wie diese:

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

Tony YUEN war in der Nähe, aber keine Zigarre. Dies ist die korrekte Definition unter Verwendung von YAML in 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

Dies erzeugt:

stackoverflow2[
  {
     name: string
  }
]

Tonys Beispiel ergibt:

[
  stackoverflow { 
                 name: string
  }
]

Komplette Swagger/OpenAPI als YAML (kopieren & einfügen)

    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

Hier ist eine JSON-Version von 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"
        }
      }
    }
  }
}
17
Asgair

Fügen Sie dies in http://editor.swagger.io/#/ ein und klicken Sie auf "Diesen Vorgang versuchen".

{
  "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"
          }
        }
      }
    }
  }
}
9
user1778602

Es sieht wahrscheinlich so aus:

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

             }
         }
    }
 }        

...

6
Meruemu

In Anbetracht des Formats des von Ihnen erwähnten Arrays

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

Ich denke, das folgende Format kann verwendet werden:

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
2

Ich habe folgendes in editor.swagger.io ausprobiert, es erfüllt die Anforderung dieser Frage und funktioniert. Der Anforderungshauptteil POST erwartet ein Array. Das Array besteht aus 'stackoverflow'-Elementen. Jedes Element ist ein Objekt mit der Eigenschaft 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
2
Dongminator
  parameters:
  - name: "items"
    in: "formData"
    description: "description"
    required: "true"
    type: "array"
    items:
      type: "object"
      additionalProperties:
        properties:
          name:
            type: "string"

Gemäß ihren Dokumenten https://swagger.io/docs/specification/data-models/dictionaries/ sollte dies zu einem Array mit Objekten führen, die eine Eigenschaft mit dem Namen name und den Datentyp string haben.
Es kann über den Anfragetext zugegriffen werden, so etwas wie request.body.items

Update:

es scheint, als ob es ausreicht, um (ohne die zusätzlichen Eigenschaften) zu tun:

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

Jetzt haben Sie die Elemente, bei denen jedes einen Schlüssel mit dem Namen name und einen entsprechenden Wert hat.

Wenn es das ist, wonach der TO gefragt hat ...

1
Gobliins