Lassen Sie nur Eigenschaften zu, die im JSON-Schema deklariert sind


79

Ich verwende json-schema und möchte nur zulassen, dass Eigenschaften, die in dieser Datei deklariert sind, die Validierung bestehen. Wenn ein Benutzer beispielsweise eine "name" -Eigenschaft in seinem json-Objekt übergibt, schlägt dieses Schema fehl, da "name" hier nicht als Eigenschaft aufgeführt ist.

Gibt es eine ähnliche Funktion wie "erforderlich", mit der nur die aufgelisteten Eigenschaften übergeben werden können?

{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Accounting Resource - Add Item",
"type": "object",
"properties": {
    "itemNumber": {
        "type":"string",
        "minimum": 3
    },
    "title": {
        "type":"string",
        "minimum": 5
    },
    "description": {
        "type":"string",
        "minimum": 5
    }
},
"required": [
    "itemNumber",
    "title",
    "description"
]
}

2
Selbst wenn es einen Weg gibt, scheint dies, als würde man die zukünftige Dehnbarkeit in den Fuß schießen.
Chris Pitman

9
Ich werde diese Eigenschaften jederzeit in Zukunft zu diesem Schema hinzufügen.
Ipengineer

1
@ipengineer - das funktioniert (-ish), solange Sie die Person sind, die die Erweiterung durchführt. Dies bedeutet auch, dass Sie eine Ressource ändern, von der einige Leute annehmen, dass sie statisch ist.
Wolkenfüße

11
Es gibt kein "-ish". Es ist nicht schwierig, Ihrem Schema neue Eigenschaften hinzuzufügen, wenn Ihre API in Zukunft neue Requisiten akzeptiert, unabhängig von der Größe Ihres Teams. Wenn ja, machen Sie wahrscheinlich etwas anderes falsch.
AJB

Antworten:



5

Zu Ihrer Information - es sieht so aus, als würde Version 5 des Standards einen Validierungsmodus "Verbot unbekannter Eigenschaften" beschreiben .

Anstatt diese Anforderung in das Format aufzunehmen (was, wie Chris Pitman in den Kommentaren sagt, die zukünftige Erweiterbarkeit beeinträchtigt), können Sie Ihren Prüfer einfach anweisen , unbekannte Eigenschaften als Fehler zu kennzeichnen. Es ist also wie ein sehr strenger Validierungsmodus, der für Entwickler nützlich ist.

Einige Validatoren unterstützen dies bereits (z. B. tv4 ):

var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties);

Mit diesem Tool checkRecursivesollte es verwendet werden, wenn Ihre Daten möglicherweise Zirkelverweise enthalten und genau das banUnknownPropertiestun , was Sie möchten, ohne es verwenden zu müssen "additionalProperties":false.


2

Geben Sie in Ihrer Definition Folgendes an:

  • alle erforderlichen Felder im Inneren "required": []
  • und setzen "additionalProperties": false

DEMO:

ohne "additionalProperties": false: Geben Sie hier die Bildbeschreibung ein

mit "additionalProperties": false: Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.