Utiliser les JSON Schema
Il existe depuis quelques temps une spécification afin de permettre de définir une structure JSON à travers des schémas.
Cette spécification, vous pouvez la retrouver sur le lien suivant: http://json-schema.org/specification.html
Le principe: définir à travers un JSON des règles afin de pouvoir valider d'autres JSON. Cela permet d'avoir comme sur le site http://schema.org/docs/gs.html des schémas de données qui permettent de mieux comprendre les données que nous recevons.
Ainsi, nous pouvons définir le schéma suivant:
'use strict'; module.exports = { "title": "Person", "type": "object", "properties": { "firstName": { "type": "string" }, "lastName": { "type": "string" }, "age": { "description": "Age in years", "type": "integer", "minimum": 0 } }, "required": ["firstName", "lastName"] };
Ce dernier indique:
- Que firstName est une string et est obligatoire
- Que lastName est une string et est obligatoire
- Que age est un nombre entier positif et n'est pas obligatoire.
Voyons le bout de code suivant:
'use strict'; const Ajv = require('ajv'); const ajv = new Ajv(); const userSchema = require('./user-schema'); let data = { firstName: 'John', lastName: 'Doe', age: 15}; if (!ajv.validate(userSchema, data)) { console.error(JSON.stringify(ajv.errors, null, 3)); } else { console.info('Data has got a valid schema') }
Si nous l'exécutons, nous n'aurons pas d'ailleurs car nous remplissons tous les critères.
Essayons maintenant avec un âge à 15.5
Nous obtenons alors l'erreur:
[
{
"keyword": "type",
"dataPath": ".age",
"schemaPath": "#/properties/age/type",
"params": {
"type": "integer"
},
"message": "should be integer"
}
]
Si nous mettons un âge négatif:
[
{
"keyword": "minimum",
"dataPath": ".age",
"schemaPath": "#/properties/age/minimum",
"params": {
"comparison": ">=",
"limit": 0,
"exclusive": false
},
"message": "should be >= 0"
}
]
Et si nous oublions un champ obligatoire:
[
{
"keyword": "required",
"dataPath": "",
"schemaPath": "#/required",
"params": {
"missingProperty": "lastName"
},
"message": "should have required property 'lastName'"
}
]
Bref, c'est un outils qui est très intéressant car nous pouvons ainsi permettre de valider à n'importe quel moment nos données un peu critiques qui transitent dans nos applications Web ou NodeJs.
Commentaires
Enregistrer un commentaire