web-dev-qa-db-fra.com

champs nullables dans swagger sur node.js

J'ai passé beaucoup de temps à essayer de trouver une solution pour créer des documents swagger dans Node.JS. La bibliothèque principale est swagger-node, dans laquelle vous créez un fichier swagger yaml, puis vous y ajoutez vos contrôleurs. Il fournit automatiquement des documents d'interface utilisateur swagger dans votre application et valide la demande et la réponse par rapport aux modèles que vous spécifiez dans votre yaml.

C’est bien, mais j’ai besoin que certains champs que je souhaite pouvoir explicitement pouvoir renvoyer ou accepter comme valeur null, par exemple:

{ 
  id: 123,
  description: "string",
  date_sent: null
}

Je ne veux pas supprimer la clé date_sent, je veux explicitement la déclarer nulle.

La spécification swagger ne prend pas en charge anyOf, ce qui correspond normalement au schéma JSON, je crois. 

Je me demande s'il y a une solution de contournement? Vous pouvez peut-être ajouter une bibliothèque disponible pour le noeud qui a un drapeau x-nullable spécifique au fournisseur, ou un moyen de spécifier que mes champs non obligatoires doivent tous être nullables. 

Est-ce que je vais devoir écrire moi-même quelque chose qui prend mon fichier swagger puis le modifie avant que le middleware du validateur ne s'exécute, ou y a-t-il une solution de contournement que quelqu'un peut suggérer?

8
RodH257

SwaggerUI ne supporte pas les types nullables (s'il vous plaît, voir ici ). Mais j'ai utilisé des propriétés nullable comme:

type: ['string','null']

Après cela, cette propriété disparaît de l'interface utilisateur, mais la validation fonctionnait toujours.

11
Sergiy

Le champ nullable est pris en charge dans OpenAPI (fka Swagger) Specification v3.0.0 , mais pas dans la v2.0. Les types nullables sont définis comme suit:

# Can be string or null
type: string
nullable: true
11
Nazar Gargol

Au lieu d’ajouter null dans la propriété type, vous pouvez utiliser la propriété par défaut.

Exemple de définition de propriété Swagger.json:

"due_date": {
  "type": "string",
  "description": "Due date",
  "default": "null"
},

Il s'agit d'une définition de type Swagger valide et apparaît toujours comme prévu dans l'interface utilisateur Swagger.

3
Noval Parinussa