Tutoriel OneOf, anyOf, allOf

Dans ce cadre, `oneOf`, `anyOf`, `allOf` : outils puissants pour des API flexibles. `oneOf` : schémas valides multiples.

Louis Dupont

Louis Dupont

12 September 2025

Tutoriel OneOf, anyOf, allOf

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.

💡
Apidog apparaît comme un outil essentiel, simplifiant la création de schémas JSON avec une interface conviviale et des fonctionnalités robustes. Il intègre de manière transparente la génération de schémas dans votre processus de développement.

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.

Oneof

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.

anyOf

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.

allOf


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.

Apidog

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

  1. Créez un nouveau projet dans Apidog avec le type HTTP.
HTTP type


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

new Schema


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

 Generate from 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.

button

Explore more

Fathom-R1-14B : Modèle de raisonnement IA avancé d'Inde

Fathom-R1-14B : Modèle de raisonnement IA avancé d'Inde

L'IA en expansion rapide. Fathom-R1-14B (14,8 milliards de paramètres) excelle en raisonnement mathématique et général, conçu par Fractal AI Research.

5 June 2025

Mistral Code : L'assistant de codage le plus personnalisable basé sur l'IA pour les entreprises

Mistral Code : L'assistant de codage le plus personnalisable basé sur l'IA pour les entreprises

Découvrez Mistral Code, l'IA d'aide au code la plus personnalisable pour les entreprises.

5 June 2025

Comment Claude Code transforme le codage de l'IA en 2025

Comment Claude Code transforme le codage de l'IA en 2025

Découvrez Claude Code en 2025 : codage IA révolutionné. Fonctionnalités, démo, et pourquoi il gagne du terrain après Windsurf d'Anthropic. Indispensable !

5 June 2025

Pratiquez le Design-first d'API dans Apidog

Découvrez une manière plus simple de créer et utiliser des API