Comment définir un paramètre optionnel dans path en utilisant swagger

Il y a une fonction dans mon service web REST fonctionnant avec la méthode GET et il a deux paramètres facultatifs.

J'ai essayé de le définir dans Swagger mais j'ai rencontré une erreur, Pas une définition de paramètre valide , après avoir défini required comme false.

, j'ai découvert que si je mets le required valeur true l'erreur aura disparu. Voici un exemple de mon code Swagger.

...
paths:
  '/get/{param1}/{param2}':
    get:
      ...
      parameters:
      - name: param1
        in: path
        description: 'description regarding param1'
        required: false
        type: string
      - name: param2
        in: path
        description: 'description regarding param2'
        required: false
        type: string

Je n'ai pas expérimenté cela avec les paramètres dans le corps ou ceux de la requête. Je pense que ce problème est uniquement Lié aux paramètres dans path. Je n'ai pas non plus trouvé de solution dans les fichiers de spécification swagger.

Existe-t-il un autre moyen de définir des paramètres optionnels dans Swagger ou Ai-je une erreur dans mon code?

Toute aide serait appréciée.

33
demandé sur Hedeshy 2016-01-26 13:01:44

3 réponses

Étant donné que le paramètre path doit être requis conformément à la spécification OpenAPI/Swagger, Vous pouvez envisager d'ajouter 2 points de terminaison distincts avec les chemins suivants:

  • /get/{param1}/{param2} lorsque param2 est fourni
  • /get/{param1}/ lorsque param2 n'est pas fourni
30
répondu William Cheng 2018-05-31 08:06:43

Il explose probablement parce que vous ne pouvez pas avoir un paramètre uri de base facultatif, seulement des valeurs de chaîne de requête (dans le cas d'une url).

Par exemple:

  • GET /produits/{id}/prix?foo = bar
  • * * Si foo est facultatif, votre paramètre IN doit être "query" et non "path"
  • * * Si {id} est facultatif, alors quelque chose ne va pas. {id} ne peut pas être facultatif car il est contenu dans l'uri de base.

Cela devrait fonctionner:

{
"in":"query",
"required":false
}

Cela ne devrait pas travail

{
"in":"path",
"required":false
}

Changez votre propriété " in "pour être" query "au lieu de" path " et cela devrait fonctionner.

20
répondu Jerrod Horton 2016-01-27 00:29:24

Votre YAML échoue car comme il est indiqué sur la spécification:

Détermine si ce paramètre est obligatoire. Si le paramètre est dans "path", cette propriété est requise et sa valeur doit être true.

Source: http://swagger.io/specification/#parameterObject (Regarder dans champs fixes tableau)

4
répondu Paulo Oliveira 2016-03-08 22:09:55