webentwicklung-frage-antwort-db.com.de

Geben Sie in der Swagger-API ein String-Array als Body-Parameter an

Ich möchte gerne ein Array von Strings posten

[
  "id1",
  "id2"
]

zu einer Swagger-basierten API. In meiner Swagger-Datei habe ich folgende Zeilen:

paths:
  /some_url:
    post:
      parameters:
        - name: ids
          in: body
          required: true

Wie kann der Typ von ids als String-Array richtig angegeben werden?

Update:

Gemäß der Spezifikation sollte in meiner Option Folgendes funktionieren:

  parameters:
    - in: body
      description: xxx
      required: true
      schema:
        type: array
        items:
          type: string

https://github.com/Yelp/swagger_spec_validator akzeptiert dies nicht und gibt eine lange Liste gefalteter Fehler zurück, die aussehen, als würde der Code $ref erwarten.

16
Achim

Ihre Beschreibung eines String-Arrays ist korrekt, aber der Parameterdefinition fehlt die name-Eigenschaft, um gültig zu sein.

Hier ist ein vollständiges Arbeitsbeispiel:

swagger: "2.0"

info:
  title: A dummy title
  version: 1.0.0

paths:
  /path:
    post:
      parameters:
        - in: body
          description: xxx
          required: true
          name: a name
          schema:
            type: array
            items:
              type: string
      responses:
        default:
          description: OK

Probieren Sie den Online-Editor aus, um Ihre OpenAPI-Spezifikationen (z. B. Swagger) zu überprüfen: http://editor.swagger.io/

21
Arnaud Lauret

Ich habe ein Swagger-Problem erstellt, da die von Arnaud bereitgestellte Hilfe zwar gültiges yaml ist, aber NPE-Ausnahmen bei der Generierung liefert. Sie müssen ein Objekt wie das folgende angeben: 

  myDataItem:
    type: object
    description: A list of values
    required:
      - values
    properties:
      values:
        type: array
        items:
            type: string

Und dann verweisen Sie darauf (in Ihrem Post Artikel usw.):

  schema:
    $ref: "#/definitions/myDataItem"

Zur Referenz der Github-Ausgabe:

https://github.com/swagger-api/swagger-codegen/issues/6745

Beachten Sie, dass das Problem in Version 2.3.0 und höher behoben wurde. Idealerweise sollten Sie ein Upgrade auf diese Version durchführen.

5
PeterS

Bei einem Array, das Object als Inhalt enthält, kann die Definition für Object auch mit definitions & $ ref ausgedrückt werden. Beispiel: 

schema:
    type: array
    items:
        $ref: '#/definitions/ObjectSchemaDefinition'
definitions:
    ObjectSchemaDefinition:
        type: string
2
Abhijeet

Die Antwort mit den meisten Stimmen brachte mich in die richtige Richtung. Ich brauchte nur ein Beispiel für ein Array von Objekten, bei denen jedes von ihnen eine Eigenschaft hatte, bei der es sich um ein Array von Strings mit mehr als einem Wert im String-Array handelte. Dank der Dokumentation Ich habe es so funktionieren lassen: 

MyObject:
  type: object
  properties:
    body:
      type: array
      items:
        type: object
        properties:
          type: 
            type: string
          values: 
            type: array
            items:
              type: string
      example: 
        - type: "firstElement"
          values: ["Active", "Inactive"]
        - type: "SecondElement"
          values: ["Active", "Inactive"]

Dabei ist zu beachten, dass die Eindrückung für Swagger von größter Bedeutung ist. Wenn Sie die Dinge nicht gut einrücken, erhalten Sie mit swagger seltsame Fehlermeldungen.

0
Lucio Mollinedo