web-dev-qa-db-fra.com

Spécifiez un tableau de chaînes en tant que paramètre body dans l'API swagger

Je voudrais poster un tableau de chaînes comme

[
  "id1",
  "id2"
]

à une API basée sur Swagger. Dans mon fichier swagger, j'ai ces lignes:

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

Quelle est la bonne façon de spécifier le type de ids en tant que tableau de chaînes?

Mettre à jour:

Selon la spécification, les éléments suivants devraient fonctionner dans mon option:

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

https://github.com/Yelp/swagger_spec_validator ne l’accepte pas et renvoie une longue liste d’erreurs compliquées, qui ressemblent au code attend du $ref.

16
Achim

Votre description d'un tableau de chaînes est correcte, mais la définition du paramètre ne définit pas la propriété name comme valide.

Voici un exemple de travail complet:

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

Essayez l’éditeur en ligne pour vérifier vos spécifications OpenAPI (fka. Swagger): http://editor.swagger.io/

21
Arnaud Lauret

J'ai créé un problème de swagger, car l'aide fournie par Arnaud, même si yaml est valide, vous donnera des exceptions NPE lorsque vous essayez de générer. Vous devrez fournir un objet comme celui-ci: 

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

Et puis y faire référence (dans votre article de poste, etc.):

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

Pour référence à la question github:

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

Remarque: le problème a été résolu dans les versions 2.3.0 et supérieures. Idéalement, vous devez effectuer une mise à niveau vers cette version.

5
PeterS

Pour un tableau contenant Object en tant que contenu, la définition de Object peut également être exprimée à l'aide de definitions & $ ref . Exemple: 

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

La réponse avec le plus grand nombre de votes m'a conduit dans la bonne direction. J'avais juste besoin d'un exemple d'un tableau d'objets où chacun d'entre eux avait une propriété qui était un tableau de chaînes avec plus d'une valeur dans le tableau de chaînes. Merci à la documentation Je l'ai fait fonctionner comme ceci: 

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"]

Une chose à garder à l'esprit est que l'indentation est d'une importance primordiale pour Swagger. Si vous n'indentez pas bien les choses, swagger vous donnera des messages d'erreur étranges.

0
Lucio Mollinedo