freifunk / api.freifunk.net

Freifunk Community API
http://freifunk.net/api-generator/
47 stars 24 forks source link

Schema nicht valide #126

Closed StilgarBF closed 5 years ago

StilgarBF commented 9 years ago

nach http://json-schema.org/latest/json-schema-validation.html#anchor61 ist das schema nicht valide. Anders ausgedrückt: "das Schema ist kein valides Schema"

Denn http://json-schema.org/latest/json-schema-validation.html#anchor61

5.4.3. required 5.4.3.1. Valid values The value of this keyword MUST be an array. This array MUST have at least one element. Elements of this array MUST be strings, and MUST be unique. 5.4.3.2. Conditions for successful validation An object instance is valid against this keyword if its property set contains all elements in this keyword's array value.

statt z.b.

{
    "schema": {
        "type": "object",
        "description": "Freifunk Community API 0.4.6",
        "required": false,
        "properties": {
            "api": {
                ...
                "required": true
            },

müsste das so aussehen:

{
    "schema": {
        "type": "object",
        "description": "Freifunk Community API 0.4.6",
        // required : false für den Knoten "schema" ist ungültig und unnötig
        "required" : ["api", "name", "location", "contact" ......]
        "properties": {
            "api": {
                ...
            },

Bedeutet also, die benötigten Unterknoten werden in deren Elternknoten in einem array aufgelistet.

Das Schema könnte angepasst werden, ohne dass die Community-files geändert werden müssten. Nebenbei wird das Schema so auch deutlich schlanker.

Ist mir aufgefallen bei Verwendung von jsv4, der Warnings ausspuckt, wenn er nicht über "required" iterieren kann. https://github.com/geraintluff/jsv4-php

andibraeu commented 9 years ago

{ "schema": { "type": "object", "description": "Freifunk Community API 0.4.6", "required": false, "properties": { "api": { ... "required": true }, müsste das so aussehen:

{ "schema": { "type": "object", "description": "Freifunk Community API 0.4.6", // required : false für den Knoten "schema" ist ungültig und unnötig "required" : ["api", "name", "location", "contact" ......] "properties": { "api": { ... }, Bedeutet also, die benötigten Unterknoten werden in deren Elternknoten in einem array aufgelistet.

wir haben das Schema damals nach JSON Schema Draft 3 gebaut, da galt das für required noch mit true und false: http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.7

der API-Generator validiert im Moment auch nach v3.

StilgarBF commented 9 years ago

ah ok. v4 ist jetzt 2 Jahre alt. Eventuell irgendwann mal umstellen? Weil für die Verwendung von Validatoren wäre das schon sinnvoll. z.B. wenn die Communities ihre files vor auslieferung durch einen Generator selbst validieren wollen.

pressiert aber tatsächlich kaum.

andibraeu commented 9 years ago

hab in b0442e12050ee44e32e6d3769ef7386c415279a2 mal die Schemaversion ergänzt.

Ein Blocker für draft4 ist für mich im Moment, dass jsonform, das Ding, was den API-Generator baut und die Dateien validiert, draft4 nicht unterstützt.

StilgarBF commented 9 years ago

Das Tool scheint nicht sonderlich aktiv entwickelt zu werden.

vermutlich ist das Thema hier dann erstmal auf onhold, bis sich jemand findet, der jsonform fit für die neue Version macht.

christian-weiss commented 5 years ago

Dieses Ticket kann geschlossen werden. Die Freifunk Schema Dateien sind gemäß offizieller draft-3 Spezifikation aktuell valide: http://json-schema.org/draft-03/schema#

Der Ticketersteller hatte versucht die Freifunk JSON Schema Datei mit darft-4 Spezifikation zu validieren oder das verwendete Tool hat ein false-positiv ausgegeben, oder das Problem wurde zwischenzeitlich gelöst.

Die Migration zu einer aktuelleren JSON Spezifikation sollte dann lieber separat in https://github.com/freifunk/api.freifunk.net/issues/151 besprochen werden.

Bitte das Ticket hier schließen.