webentwicklung-frage-antwort-db.com.de

NULL-fähige Felder in swagger auf node.js

Ich habe einige Zeit damit verbracht, in Node.JS eine Lösung für die Erstellung von Swagger-Dokumenten zu finden. Die Hauptbibliothek ist swagger-node, in der Sie eine swagger-yaml-Datei erstellen und dann Ihre Controller hinzufügen. Es stellt automatisch swagger-UI-Dokumente in Ihrer App zur Verfügung und überprüft die Anforderung und Antwort anhand der Modelle, die Sie in Ihrem Yaml angegeben haben.

Dies ist in Ordnung, ich muss jedoch einige Felder explizit als Wert zurückgeben oder akzeptieren können, z. B. null:

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

Ich möchte den date_sent - Schlüssel nicht löschen, sondern ausdrücklich als null angeben.

Die Swagger-Spezifikation unterstützt anyOf nicht, was meiner Meinung nach normalerweise im JSON-Schema der Fall ist.

Ich frage mich, ob es eine Problemumgehung gibt. Möglicherweise ist eine Bibliothek für Knoten verfügbar, die ein anbieterspezifisches x-nullable - Flag enthält, das Sie hinzufügen können, oder Sie können angeben, dass meine nicht erforderlichen Felder alle nullwertfähig sein sollen.

Muss ich selbst etwas schreiben, das meine Swagger-Datei übernimmt und dann ändert, bevor die Validator-Middleware ausgeführt wird, oder kann jemand eine Problemumgehung vorschlagen?

12
RodH257

SwaggerUI unterstützt keine nullfähigen Typen (siehe hier ). Aber ich habe nullbare Eigenschaften verwendet als:

type: ['string','null']

Danach verschwindet diese Eigenschaft von der Benutzeroberfläche, die Validierung funktionierte jedoch weiterhin.

11
Sergiy

Das Feld nullable wird in der OpenAPI (fka Swagger) -Spezifikation v3.0.0 unterstützt, jedoch nicht in v2.0. Nullable-Typen sind wie folgt definiert:

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

Anstatt null in der type-Eigenschaft hinzuzufügen, können Sie stattdessen die default-Eigenschaft verwenden.

Beispiel für die Eigenschaftsdefinition von Swagger.json:

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

Es handelt sich um eine gültige Swagger-Typdefinition, die in der Swagger-Benutzeroberfläche weiterhin wie erwartet angezeigt wird.

3
Noval Parinussa