Adoptez JSON : comment la validation de schéma renforce votre API
JSON (JavaScript Object Notation) est devenu le standard de facto pour l’échange de données dans les API REST et les services Web. Son format texte simple rend JSON facile à lire et à analyser tout en restant léger et performant. Contrairement à XML, JSON mappe directement aux structures de données natives dans les langages de programmation modernes tels que JavaScript, Python, Ruby et Java, éliminant ainsi le besoin d’analyseurs personnalisés.
L’essor des applications monopage, des applications mobiles et des appareils IoT interagissant via des API a renforcé la popularité de JSON pour le transfert de données sérialisées. Son omniprésence fait de JSON un choix naturel pour permettre la communication entre divers systèmes. La simplicité, l’universalité et la prise en charge linguistique intégrée de JSON ont prouvé qu’il s’agissait d’un format d’échange de données résilient et évolutif.
La définition de schémas JSON stricts permet aux développeurs de valider les formats et les valeurs des données au moment de l’exécution. Cela améliore la qualité et la fiabilité globales de l’API. Les schémas JSON bien définis servent de contrat entre les clients et les serveurs API, réduisant ainsi l’ambiguïté et les points de défaillance possibles. Cet article explore les définitions de schéma JSON, les outils de validation, les conseils de conception et bien plus encore.
Définir des schémas JSON
Le schéma JSON définit la structure et les types de données d’un document JSON. Il est utilisé à des fins de validation afin de garantir que la structure correspond aux attentes.
Un schéma JSON est lui-même un fichier JSON qui déclare la forme d’autres documents JSON. Le schéma spécifie des exigences telles que :
- Quelles propriétés un objet JSON peut contenir
- Propriétés obligatoires ou facultatives
- Types de données pour des valeurs telles que des chaînes, des nombres, des tableaux
- Restrictions de longueur ou ensembles de valeurs autorisés pour les chaînes
Certains composants clés d’un schéma JSON incluent :
$schema- Déclare la version du schéma JSONtype- Le type de données (objet, tableau, chaîne, etc.)properties- Spécifie les propriétés d’un objet sous forme de paires clé-valeurrequired- Répertorie les propriétés d’objet qui sont obligatoiresadditionalProperties- Si des propriétés supplémentaires non spécifiées sont autoriséesminLength/maxLength- Limites de longueur de chaîneminimum/maximum- Limites de valeurs numériquesenum- Options de valeur autorisées qu’une valeur peut être
Les schémas permettent de valider qu’un document JSON correspond à la structure déclarée. Ils servent de contrat entre le producteur d’API et le consommateur. Des schémas bien définis rendent l’intégration plus facile et les interfaces plus résilientes.
Validation du schémaLa validation des données JSON par rapport à un schéma prédéfini est l’un des principaux avantages de la définition de schémas JSON. La validation du schéma garantit que la charge utile JSON envoyée vers et depuis une API correspond au format de données attendu.
Lorsqu’un client adresse une requête à votre API, la charge utile de la requête peut être validée par rapport à votre schéma de requête avant même qu’elle n’atteigne le code de votre application. Cela protège votre API des mauvaises données et garantit que les entrées correspondent à ce que votre application attend.
De même, les réponses de votre API peuvent être validées par rapport à un schéma de réponse. Cela garantit que les sorties de l’API correspondent au contrat et que les clients peuvent analyser la réponse de manière fiable.
La validation de schéma présente plusieurs avantages :
- Détecte les bugs plus tôt en rejetant les formats de données invalides
- Applique la discipline dans les contrats API et les structures de données
- Réduit les hypothèses sur les formes de données dans le code client et serveur
- Fournit des attentes claires en matière d’utilisation et d’intégration
- Sert de documentation et guide la mise en œuvre
- Validation facile à intégrer dans le pipeline existant avec les bibliothèques de schémas JSON
- Peut générer du code de validation pour plusieurs langages comme TypeScript
Dans l’ensemble, la validation du schéma JSON est une pratique essentielle pour des API robustes et maintenables. Définir des schémas ne représente que la moitié de la bataille : la validation par rapport à ces schémas donne vraiment vie aux schémas.
Outils de validation
La validation du schéma JSON garantit que vos données JSON correspondent au format attendu. Il existe plusieurs bibliothèques open source utiles pour la validation de schéma :
-
Ajv - Validateur de schéma JSON rapide écrit en JavaScript. Prend en charge le brouillon du 04/06/07.
-
jsonschema - Implémentation du schéma JSON pour Python.
-
JSV - Validateur de schéma JSON autonome écrit en JavaScript.
-
json-schema-validator - Validateur Node.js pour les brouillons de schéma JSON 04-07.
-
JaySchema - Validateur de schéma JSON pour Java.
-
Jsonix Schema Compiler - Génère des validateurs de schéma en JavaScript.
-
Go JSON Schema Validator - Validateur de schéma JSON écrit en Go.Ces bibliothèques permettent de valider les données JSON par rapport aux schémas afin de détecter rapidement les problèmes de formatage. Ils sont faciles à intégrer dans les pipelines de construction et les suites de tests pour garantir la conformité des schémas. La plupart prennent en charge les dernières versions de schéma JSON et sont configurables pour la rigueur de la validation.
Conseils de conception de schéma
Lors de la conception de schémas JSON, suivez ces bonnes pratiques :
-
Gardez les schémas simples et modulaires. Divisez les définitions de schéma en morceaux logiques qui peuvent être combinés selon vos besoins. Évitez les grands schémas monolithiques.
-
Utilisez des noms de propriété descriptifs et cohérents comme
firstNameplutôt que des abréviations. -
Fournissez des descriptions et des titres clairs pour vos schémas et propriétés.
-
Rendre les propriétés appropriées obligatoires ou facultatives. Ne rendez une propriété obligatoire que si les données sont nécessaires.
-
Contraindre les valeurs de chaîne avec
minLengthetmaxLengthle cas échéant. -
Utilisez des énumérations pour de petits ensembles fixes de valeurs prédéfinies.
-
Définir les types de données et les formats attendus pour les propriétés. Par exemple, utilisez
integerpour les nombres entiers etstringavecformat: date-timepour les horodatages. -
Définissez les minimums et maximums pertinents pour les propriétés numériques telles que
minimum: 0oumaximum: 100. -
Utilisez les valeurs par défaut pour les propriétés facultatives lorsque cela est logique.
-
Autorisez les valeurs nulles uniquement lorsque cela est approprié en utilisant
"type": ["string", "null"]plutôt que simplement"type": "string". -
Validez l’unicité si nécessaire avec
"uniqueItems": true. -
Utilisez
"$ref"pour référencer et réutiliser les définitions plutôt que de les dupliquer. -
Rédigez des messages d’erreur de validation clairs que les clients peuvent comprendre.
-
Fournir des exemples de données valides et invalides pour chaque schéma.
-
Utilisez les champs
"$comment"pour documenter vos schémas. -
Versionnez vos schémas au fur et à mesure de leur évolution.
Le respect des meilleures pratiques de conception de schéma améliorera la maintenabilité, la testabilité et la convivialité des API JSON.
Pièges courants
Lors de la conception de schémas JSON, il est important d’éviter certaines erreurs courantes qui peuvent rendre les schémas fragiles ou difficiles à maintenir :
Validation trop stricte
Il est tentant de créer des schémas très stricts pour essayer de prendre en compte toutes les possibilités. Cependant, cela rend les schémas difficiles à mettre à jour et bloque souvent les données valides. Commencez par des validations de base et ajoutez des contraintes supplémentaires uniquement lorsque cela est vraiment nécessaire.
version : “2.0.0” partout
Il est préférable d’éviter d’utiliser "version": "2.0.0" dans chaque schéma, sauf si vous prévoyez de l’incrémenter à chaque modification. Cela ajoute une surcharge et ne fournit pas de gestion de versions significative dans la plupart des cas. Utilisez plutôt des balises ou des ID de révision.
Ne pas planifier l’extensibilitéLes schémas devraient prendre en compte les nouvelles propriétés et données à l’avenir. Exigez uniquement les propriétés dont vous avez besoin aujourd’hui et autorisez les propriétés supplémentaires.
Ignorer les variantes de données
Les formats de données ont souvent plusieurs représentations autorisées telles que des dates ou des identifiants. Les schémas doivent permettre des variantes communes pour éviter les erreurs de validation.
Objets imbriqués trop complexes
L’imbrication trop profonde des objets et des tableaux rend les schémas difficiles à comprendre et à modifier. Essayez de garder les schémas relativement plats. Divisez les éléments imbriqués réutilisés en définitions.
Ne pas documenter les décisions
Documentez pourquoi les décisions de validation ont été prises dans le schéma à l’aide de descriptions. Cela aide les futurs responsables à comprendre la justification et les utilisations prévues.
Suivre les meilleures pratiques de schéma dès le début permet d’éviter ces faux pas courants. Gardez les schémas concentrés sur les validations de base et accordez une certaine flexibilité pour l’expansion.
Évolution du schéma
Les schémas JSON doivent évoluer au fil du temps à mesure que les exigences changent. Cela implique d’effectuer des mises à jour qui pourraient interrompre les clients existants. L’évolution du schéma nécessite une planification et une communication minutieuses entre les fournisseurs d’API et les consommateurs.
Il existe plusieurs approches pour gérer les modifications de schéma :
-
Versionnez vos schémas et apportez des modifications incompatibles dans les nouvelles versions. Autoriser les clients à spécifier la version qu’ils prennent en charge.
-
Introduire de nouvelles propriétés facultatives qui ne brisent pas les clients existants. Rendre les propriétés obligatoires plus tard, une fois que les clients ont eu le temps de mettre à jour.
-
Utilisez la construction “anyOf” pour autoriser simultanément les nouvelles et anciennes variantes de schémas. Transition progressive des clients vers le nouveau schéma.
-
En cas de modifications majeures, fournissez un préavis et des instructions de migration. Appliquez les modifications initialement derrière une bascule de fonctionnalité ou sur un cluster Canary.
-
Utilisez un registre de schémas qui stocke l’historique et les métadonnées du schéma. Cela permet de gérer les cycles de vie des schémas de manière centralisée entre les services.
-
Fournir des outils pour détecter les modifications de schéma, migrer les données et générer des modèles clients mis à jour. Automatisez autant que possible la transition.
Une planification minutieuse est essentielle lors de l’évolution des schémas. Communiquez clairement les changements aux consommateurs dès le début. Prend en charge les schémas hérités pendant les transitions. Automatisez les mécanismes de migration lorsque cela est possible. Avec une bonne gouvernance des schémas, les équipes peuvent adapter les schémas au fil du temps tout en évitant des changements majeurs pour les clients.
Génération de codeL’un des principaux avantages de la définition de schémas JSON est la possibilité de générer automatiquement du code permettant aux clients d’utiliser les schémas. Cela élimine l’écriture manuelle des modèles et des sérialiseurs, ce qui permet d’économiser beaucoup de temps et d’efforts de développement. Il existe plusieurs outils capables de générer du code à partir de schémas JSON :
-
Quicktype - Un outil open source qui génère des types et des analyseurs pour plus de 35 langages, dont TypeScript, C#, Java, Go et Swift. Il prend en charge les schémas complexes avec des fonctionnalités telles que les énumérations, les types nullables, les unions et les génériques.
-
JSON Schema Codegen - Un outil de ligne de commande Java qui peut générer du code Java, C#, Go, Typescript, JavaScript, Swift, Kotlin et Rust à partir de schémas JSON. Il dispose d’un écosystème de plugins permettant la personnalisation de la génération de code.
-
JWT Schema - Axé sur la génération de code pour les jetons JWT basés sur des schémas JSON. Prend en charge Java, Typescript, C#, Go, Ruby et PHP.
-
GraphQL Code Generator - Principalement pour générer un schéma GraphQL et du code de résolution, mais prend également en charge la génération de types TypeScript à partir d’un schéma JSON.
-
API Script - Un outil basé sur une interface graphique pour Windows et Mac qui génère du code pour TypeScript, C#, Java, Go, Ruby, etc. Comprend un serveur moqueur pour tester le code généré.
-
JSONSchema2Pojo - Un plugin Maven et Gradle pour générer des POJO Java à partir de schémas JSON. Personnalisable via des annotations et des règles configurables.
Le code généré automatiquement évite beaucoup de travail répétitif et applique la structure définie dans les schémas. Les modèles générés peuvent être importés directement dans la base de code de l’application et une personnalisation supplémentaire ajoutée si nécessaire. La génération globale de code basée sur un schéma rationalise le développement et contribue à garantir la cohérence entre l’interface API et la mise en œuvre.
Registre de schémas
Un registre de schémas fournit un référentiel centralisé pour le stockage et la récupération des schémas. Il permet la gestion des schémas à grande échelle dans les grandes organisations disposant de plusieurs applications et services. Les principaux avantages d’un registre de schémas incluent :
-
Stockage centralisé des schémas - Toutes les définitions de schéma sont stockées au même endroit, fournissant une source unique de vérité. Cela évite les duplications et les incohérences.
-
Gestion des versions de schéma - Le registre conserve les versions de chaque schéma. Cela prend en charge l’évolution des schémas au fil du temps de manière contrôlée. Les nouveaux schémas ne brisent pas les consommateurs existants.
-
Recherche de schéma - Les services peuvent facilement rechercher des définitions de schéma par ID ou par sujet. Réduit le couplage entre producteurs et consommateurs.- Vérifications de compatibilité des schémas - Le registre peut vérifier la compatibilité entre les nouvelles versions de schéma et les versions existantes. Empêche l’introduction de modifications avec rupture.
-
Gouvernance de l’évolution des schémas - Les politiques de registre contrôlent la manière dont les schémas peuvent évoluer au fil du temps. Par exemple, imposer une compatibilité ascendante pour certains sujets.
-
Performances et évolutivité - La mise en cache centralisée des schémas améliore les performances. La mise à l’échelle horizontale du registre gère la charge.
Un registre de schémas est essentiel pour les déploiements de production à grande échelle d’architectures événementielles utilisant Apache Kafka. Les options open source populaires incluent Confluent Schema Registry et Apicurio Registry. Le registre est un composant clé permettant un échange de données robuste et fiable via des schémas et la validation des schémas.
#Conclusion
Comme nous l’avons exploré, les schémas JSON jouent un rôle crucial dans la définition des attentes et la validation des données dans les architectures API modernes. En créant des schémas JSON précis, les développeurs établissent un contrat clair pour les charges utiles de requête et de réponse. Cela améliore la fiabilité, la robustesse et la compréhension entre les clients et les serveurs API.
Les outils de validation de schéma tels que JSON Schema fournissent des fonctionnalités intégrées pour valider les données JSON par rapport aux schémas. Cela permet de détecter les erreurs plus tôt et de garantir que les bons formats sont utilisés. La validation empêche les mauvaises données de provoquer des échecs sur toute la ligne.
Lors de la conception de schémas JSON, il est important de se concentrer sur la clarté, la flexibilité et la compatibilité. Les schémas doivent capturer l’essence du format de données sans être trop restrictifs. Permettre aux schémas d’évoluer de manière rétrocompatible permet aux API de s’améliorer sans interrompre les clients existants.
Dans l’ensemble, les schémas et la validation JSON offrent des avantages majeurs pour le développement d’API. La définition de contrats stricts via des schémas permet des systèmes logiciels indépendants et modulaires. La validation donne aux développeurs l’assurance que les données répondent aux spécifications définies. Les schémas et la validation robustes sont des éléments clés des architectures API évolutives et fiables.
Alors que l’utilisation des API JSON et REST continue de croître, le développement de schémas JSON solides restera une compétence essentielle pour les développeurs d’API. La maîtrise des meilleures pratiques en matière de conception et de validation de schémas est impérative pour créer des API Web de haute qualité.Restez à l’écoute avec APIRobots pour plus d’informations et de mises à jour sur ce domaine passionnant. Ne manquez pas les opportunités que les API peuvent apporter à votre entreprise. Contactez-nous dès aujourd’hui à API Robots une agence de développement d’API et libérons ensemble tout le potentiel des API.