2016-07-01 3 views
5

Ich habe eine Menge Zeit damit verbracht, eine Lösung zum Erstellen von Swagger-Dokumente in Node.JS zu finden. Die Hauptbibliothek ist swagger-node, in der Sie eine swagger yaml-Datei erstellen und dann Ihre Controller hinzufügen. Es bietet automatisch swagger ui docs in Ihrer App und führt eine Validierung der Anfrage & Antwort gegen die Modelle, die Sie in Ihrem Yaml angeben.Nullable Felder in Swagger auf node.js

Dies ist ordentlich, aber ich habe eine Anforderung, dass einige Felder Ich möchte ausdrücklich in der Lage sein, um zurückzukehren oder null als Wert zu annehmen, zum Beispiel:

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

Ich will nicht die date_sent löschen Schlüssel möchte ich explizit als null angeben.

Die Swagger-Spezifikation unterstützt anyOf nicht, was JSON-Schema normalerweise tut, glaube ich.

Ich frage mich, ob es einen Workaround gibt? Vielleicht ist eine Bibliothek für Knoten verfügbar, für die ein herstellerspezifisches Flag x-nullable hinzugefügt werden kann, oder eine Möglichkeit anzugeben, dass alle Felder, die nicht benötigt werden, alle nullfähig sein dürfen.

Muss ich selbst etwas schreiben, das meine Swagger-Datei nimmt und dann modifiziert, bevor die Validator-Middleware ausgeführt wird, oder gibt es eine Workaround, die jemand vorschlagen kann?

Antwort

6

SwaggerUI unterstützt keine nullfähigen Typen (siehe here). Aber ich nutzte Nullable-Eigenschaften wie:

type: ['string','null'] 

Danach verschwindet diese Eigenschaft aus der Benutzeroberfläche, aber die Validierung funktionierte noch.

+2

aha! Ich habe das versucht, aber in Yaml habe ich "String" und "null" , aber Sie müssen Anführungszeichen um die "Null" haben, damit es funktioniert. Vielen Dank! Auch wenn Sie einen 'Standard' hinzufügen, dann wird es wieder in den Beispielwerten angezeigt, ich denke, es weiß nur nicht, welche als Beispiel zu verwenden – RodH257

+0

Wow! Vielen Dank! Ich habe nicht über den Standardwert nachgedacht. Ich werde es für mein Projekt versuchen – Sergiy

+2

Das ist übrigens keine gültige Swagger-Typ-Definition. – Ron

4

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

0

Anstatt NULL in Type-Eigenschaft hinzuzufügen, können Sie stattdessen Standardeigenschaft verwenden.

Swagger.json Eigenschaftsdefinition Beispiel:

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

Es ist eine gültige Swagger Typdefinition und scheint immer noch wie in Swagger UI erwartet.