La création d'API intégrant de manière transparente des structures de données en constante évolution est cruciale dans le développement d'API. JSON Schema, une norme largement adoptée pour la définition d'API, fournit un cadre robuste pour définir les structures de données et les règles de validation en combinaison avec OpenAPI.
Dans ce cadre, les mots-clés oneOf, anyOf et allOf apparaissent comme des outils puissants pour la création d'API flexibles et adaptables. oneOf permet de spécifier plusieurs schémas valides pour une seule structure de données.
anyOf fournit un mécanisme pour valider une structure de données par rapport à d'autres schémas disponibles. allOf combine plusieurs options de schéma en une seule règle de validation, garantissant qu'une structure de données respecte toutes les contraintes spécifiées. Apidog aide les API à s'adapter en douceur aux divers besoins en données.
Qu'est-ce que oneOf
Le terme "oneOf" fait référence à une construction ou un mot-clé utilisé dans le contexte des définitions de schémas comme les schémas JSON. "oneOf" vous permet de spécifier plusieurs sous-schémas, et une instance valide du schéma doit respecter les contraintes d'exactement un de ces sous-schémas. Par exemple, considérez un schéma JSON pour une personne, où une personne peut être soit un adulte, soit un enfant.
Le mot-clé "oneOf" pourrait spécifier deux sous-schémas, un pour les adultes et un pour les enfants. Le document en cours de validation doit satisfaire aux contraintes du schéma adulte ou enfant, mais pas aux deux. Voici à quoi cela ressemblerait dans un schéma JSON.
{
"type": "object",
"oneOf": [
{
"properties": {
"age": { "type": "integer", "minimum": 18 }
},
"required": ["age"]
},
{
"properties": {
"age": { "type": "integer", "maximum": 17 }
},
"required": ["age"]
}
]
}
Dans cet exemple, le mot-clé "oneOf" est utilisé pour définir deux sous-schémas : un pour les adultes et un pour les enfants. Le document en cours de validation doit satisfaire aux contraintes du schéma adulte ou enfant, mais pas aux deux. La propriété "age" est un discriminateur pour déterminer quel sous-schéma doit être appliqué.
Cette flexibilité est bénéfique lorsque vous avez diverses structures valides pour un document JSON basées sur différentes conditions. Le mot-clé "oneOf" assure l'exclusivité mutuelle entre les sous-schémas définis, garantissant qu'une instance valide se conforme à une seule des structures spécifiées. Cette capacité fait de "oneOf" un outil précieux pour décrire avec précision des modèles de données complexes et maintenir l'intégrité des données dans divers scénarios.

Qu'est-ce que anyOf
Le mot-clé "anyOf" est une autre construction pour définir un schéma où l'instance validée doit se conformer à au moins un sous-schéma spécifié. Contrairement à "oneOf", qui impose une adhésion exclusive à un sous-schéma, "anyOf" offre plus de flexibilité en permettant à l'instance de satisfaire aux contraintes d'au moins un des sous-schémas spécifiés.
Considérons un scénario pratique où "anyOf" pourrait être bénéfique. Imaginez travailler avec des données JSON représentant des individus, certains adultes et d'autres étudiants. Les adultes et les étudiants ont des propriétés distinctes, et vous souhaitez créer un schéma qui s'adapte aux deux cas.
Le mot-clé "anyOf" vous permet d'exprimer cette flexibilité, permettant au document JSON d'être valide s'il se conforme au schéma pour les adultes ou les étudiants. Voici comment cet exemple est représenté dans un schéma JSON.
{
"type": "object",
"anyOf": [
{
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 18 }
},
"required": ["name", "age"]
},
{
"properties": {
"name": { "type": "string" },
"grade": { "type": "string", "enum": ["A", "B", "C"] }
},
"required": ["name", "grade"]
}
]
}
Dans cet exemple, le mot-clé "anyOf" est utilisé pour définir deux sous-schémas : un pour les adultes et un pour les étudiants. Le document JSON est considéré comme valide s'il satisfait aux contraintes du schéma adulte ou étudiant. Cela permet une représentation flexible de diverses structures de données au sein du même schéma global, faisant de "anyOf" un outil puissant pour gérer des scénarios de données variés.

OneOf vs anyof : Quelle est la différence dans le schéma z
Dans Z Schema, OneOf
et AnyOf
sont tous deux utilisés pour définir plusieurs schémas, mais ils servent des objectifs différents.
OneOf :
OneOf
est utilisé lorsque exactement un des schémas définis doit correspondre.
Il garantit que les données ne sont validées que par rapport à un seul des schémas spécifiés.
Exemple :
{
"OneOf": [
{"type": "string"},
{"type": "number"}
]
}
Ce schéma garantit que les données sont soit une chaîne de caractères, soit un nombre, mais pas les deux.
AnyOf :
AnyOf
est utilisé lorsqu'un ou plusieurs des schémas définis peuvent correspondre.
Il permet aux données d'être validées par rapport à plusieurs schémas spécifiés.
Exemple :
{
"AnyOf": [
{"type": "string"},
{"type": "number"}
]
}
Qu'est-ce que allOf
Le mot-clé "allOf" dans JSON Schema définit un schéma où l'instance validée doit se conformer à tous les sous-schémas spécifiés. Essentiellement, il représente une opération ET logique pour les sous-schémas. Cela signifie que le document JSON validé doit satisfaire aux contraintes de chaque sous-schéma répertorié sous "allOf". Voici un exemple :
{
"allOf": [
{
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 18 }
},
"required": ["name", "age"]
},
{
"properties": {
"hasDegree": { "type": "boolean", "default": true }
},
"required": ["hasDegree"]
}
]
}
Dans cet exemple, le mot-clé "allOf" combine deux sous-schémas. Le premier sous-schéma définit les propriétés des adultes, y compris un nom et un âge avec des contraintes spécifiques. Le second sous-schéma introduit une propriété pour les personnes ayant un diplôme, dans ce cas, une propriété booléenne "hasDegree" avec une valeur par défaut de true. L'effet combiné de "allOf" est que le document JSON validé doit respecter les deux contraintes. Il doit avoir un nom, un âge (satisfaisant le premier sous-schéma), et également inclure la propriété "hasDegree" (satisfaisant le second sous-schéma).
Le mot-clé "allOf" est utile lors de la création d'un schéma qui englobe les propriétés et les contraintes de plusieurs sous-schémas, garantissant que l'instance validée répond à toutes les conditions spécifiées. Cette opération ET logique diffère de "anyOf" et "oneOf", permettant une flexibilité pour satisfaire au moins un ou exactement un des sous-schémas spécifiés.

Qu'est-ce qu'Apidog ?
Apidog est une plateforme d'intégration d'API polyvalente qui simplifie les tests, le débogage, la conception, la simulation et la documentation des API. Elle offre une interface conviviale, des outils collaboratifs et des fonctionnalités pour des évaluations approfondies des API.
Apidog excelle dans la documentation des réponses d'API avec des mises en page personnalisables et facilite les efforts de collaboration au sein des équipes. Ses outils de test permettent l'ajout d'assertions visuelles et la création de branches de test. La plateforme aide également à surveiller l'activité des API et fournit des capacités de simulation efficaces, éliminant le besoin de scripts en développement.

Schémas JSON Apidog avec oneOf, anyOf et allOf
Maintenant que vous savez ce que sont les schémas JSON et comment ils utilisent oneOf, anyOf et allOf dans leur structure, nous allons les définir dans Apidog. Pour créer efficacement ces schémas dans Apidog, assurez-vous d'avoir Apidog téléchargé dans votre système ou d'avoir un compte pour utiliser les services Apidog en ligne.
Comment créer OneOf
- Créez un nouveau projet dans Apidog avec le type HTTP.

2. Créez un nouveau schéma en cliquant sur le bouton Nouveau schéma.

3. Cliquez sur l'option Générer à partir de JSON et accédez à l'option Schéma JSON.

4. Entrez le code suivant dans l'éditeur.
{
"title": "Exemple de schéma de paiement",
"type": "object",
"properties": {
"payment": {
"oneOf": [
{
"type": "object",
"properties": {
"amount": {
"type": "number"
},
"currency": {
"type": "string"
}
},
"required": ["amount", "currency"]
},
{
"type": "object",
"properties": {
"amount": {
"type": "number"
},
"currency": {
"type": "string"
},
"cardDetails": {
"type": "object",
"properties": {
"cardNumber": {
"type": "string"
},
"expirationDate": {
"type": "string"
},
"cvv": {
"type": "string"
}
},
"required": ["cardNumber", "expirationDate", "cvv"]
}
},
"required": ["amount", "currency", "cardDetails"]
}
]
}
},
"required": ["payment"]
}
5. Enregistrez votre schéma.

Votre schéma oneOf a été créé avec succès !
Comment créer anyOf
Suivez toutes les étapes ci-dessus pour oneOf, mais le seul changement que vous apporterez pour votre schéma anyOf est de modifier le code. Entrez le code suivant dans l'éditeur pour créer votre schéma.
{
"type": "object",
"properties": {
"address": {
"anyOf": [
{
"type": "object",
"properties": {
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"zip": {
"type": "string"
}
},
"required": ["street", "city", "state", "zip"]
},
{
"type": "object",
"properties": {
"country": {
"type": "string"
}
},
"required": ["country"]
}
]
}
},
"required": ["address"]
}
allOf
Suivez toutes les étapes ci-dessus pour oneOf, mais le seul changement que vous apporterez pour votre schéma allOf est de modifier le code. Entrez le code suivant dans l'éditeur pour créer votre schéma.
{
"type": "object",
"properties": {
"product": {
"allOf": [
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": ["name", "description"]
},
{
"type": "object",
"properties": {
"price": {
"type": "number"
},
"stock": {
"type": "integer"
}
},
"required": ["price", "stock"]
}
]
}
},
"required": ["product"]
}
Avantages de la création de schémas avec Apidog
Vous pouvez faire plusieurs choses utiles maintenant que vous avez créé vos schémas JSON avec Apidog. Certains des avantages sont mentionnés ci-dessous.
Documentation de l'API
Vous pouvez intégrer votre schéma JSON dans votre documentation API pour fournir des descriptions claires et complètes des structures de données et des règles de validation de vos points de terminaison d'API. Cela améliore la compréhension des développeurs et réduit le risque d'erreurs dans l'utilisation de l'API.
Génération de code
Vous pouvez utiliser des outils tels que les capacités de génération de code d'Apidog pour générer automatiquement des bibliothèques clientes et du code côté serveur à partir de votre schéma JSON. Cela rationalise le processus de développement et assure la cohérence entre la définition de votre API et son implémentation.
Validation des données et gestion des erreurs
Vous pouvez utiliser des bibliothèques de validation de schémas JSON pour valider les requêtes et les réponses d'API entrantes, en vous assurant que les données sont conformes à la structure et aux contraintes définies. Cela permet d'empêcher l'entrée de données non valides dans votre système et de réduire le risque d'erreurs d'application.
Tests d'API
Vous pouvez utiliser JSON Schema pour générer des cas de test pour vos points de terminaison d'API et créer des serveurs simulés pour les tests. Cela facilite les tests d'API complets et garantit que votre API fonctionne comme prévu.
Conception d'API
Vous pouvez affiner en continu votre schéma JSON au fur et à mesure que votre API évolue pour s'adapter aux nouvelles exigences de données et aux modèles d'utilisation. Cela garantit que votre API reste flexible et adaptable aux demandes changeantes.

Conclusion
En conclusion, l'intégration des schémas JSON avec Apidog peut grandement améliorer le processus de documentation des API. JSON Schema fournit un moyen standardisé de décrire la structure et les contraintes des données JSON, et lorsqu'il est intégré aux outils de documentation d'API, il garantit que la documentation reflète avec précision les formats de requête et de réponse attendus.
Apidog prend en charge des fonctionnalités qui utilisent les schémas JSON. Par exemple, il pourrait générer automatiquement une documentation basée sur les schémas définis, ce qui facilite la mise à jour de la documentation au fur et à mesure que l'API évolue.