web-dev-qa-db-fra.com

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

Le service Web my REST) fonctionne avec la méthode GET et comporte deux paramètres facultatifs.

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

J'ai découvert que si je définissais la valeur required comme true, l'erreur disparaîtrait. 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 vécu cela avec des paramètres dans body ou ceux dans query. Je pense que ce problème est seulement lié aux paramètres dans le chemin. Je ne trouvais pas non plus de solution dans les fichiers de spécification Swagger.

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

Toute aide serait appréciée.

45
Hedeshy

Étant donné que ce paramètre de chemin 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
38
William Cheng

Cela risque d’exploser car vous ne pouvez pas avoir de paramètre uri de base facultatif, mais uniquement des valeurs de chaîne de requête (dans le cas d’une url).

Par exemple:

  • GET/products/{id}/pricing? Foo = bar
  • ** Si foo est facultatif, votre paramètre IN doit être "requête" et non "chemin"
  • ** Si {id} est facultatif, alors quelque chose ne va pas. {id} ne peut pas être optionnel car il est contenu dans l'URI de base.

Cela devrait fonctionner:

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

Cela ne devrait pas fonctionner

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

changez votre propriété "in" en "requête" au lieu de "chemin" et cela devrait fonctionner.

24
Jerrod Horton

Votre YAML échoue car, comme indiqué dans le cahier des charges:

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

Source: http://swagger.io/specification/#parameterObject (Regardez dans la table des champs fixes )

4
Paulo Oliveira