Un Guide Complet sur le Discriminator OpenAPI

Le discriminateur OpenAPI simplifie les données polymorphes. Guide pour une API claire, maintenable et une meilleure expérience dev.

Louis Dupont

Louis Dupont

5 June 2025

Un Guide Complet sur le Discriminator OpenAPI

Dans le monde des API, la clarté et la précision sont primordiales. OpenAPI (anciennement connu sous le nom de Swagger) est devenu une norme pour la définition des API, offrant un moyen structuré de décrire les capacités d'un service. Une fonctionnalité puissante d'OpenAPI est le discriminateur, qui est essentiel pour la gestion des structures de données polymorphes. Ce blog explorera ce qu'est le discriminateur OpenAPI, pourquoi il est important et comment l'utiliser efficacement dans vos définitions d'API.

💡
Apidog est un outil de développement d'API tout-en-un conçu pour la conception, la documentation, le débogage et les tests d'API. Il est entièrement compatible avec la spécification OpenAPI et gratuit. Essayez-le dès aujourd'hui !
button

Qu'est-ce qu'un discriminateur OpenAPI ?

Le discriminateur OpenAPI est un mécanisme utilisé pour prendre en charge le polymorphisme dans vos définitions d'API. En programmation orientée objet, le polymorphisme permet aux objets de différents types d'être traités comme des instances de la même classe grâce à l'héritage. Le discriminateur dans OpenAPI sert un objectif similaire en permettant à l'API de distinguer les modèles de données différents, mais liés, au sein d'une hiérarchie.

Imaginez que vous ayez une classe de base appelée Animal avec les sous-classes Dog, Cat et Bird. Lorsque vous définissez un point de terminaison qui renvoie un Animal, l'API pourrait en fait renvoyer l'une de ces trois sous-classes. Le discriminateur aide le client de l'API à déterminer quel type spécifique d'Animal il a reçu, garantissant ainsi que le client peut désérialiser la réponse correctement.

Pourquoi le discriminateur est-il important ?

Le polymorphisme est courant dans les API qui traitent des structures de données complexes. Sans discriminateur, un client d'API pourrait avoir du mal à identifier le type réel d'objet qu'il a reçu, ce qui entraînerait des erreurs potentielles de traitement ou de désérialisation. Le discriminateur fournit un moyen clair et non ambigu de transmettre ces informations, garantissant que l'API et le client restent synchronisés.

Les principaux avantages incluent :

Comment utiliser le discriminateur dans OpenAPI

L'utilisation du discriminateur implique quelques étapes, mais c'est simple une fois que vous avez compris le processus. Voici un guide étape par étape :

1. Définir le schéma de base

Commencez par définir le schéma de base que les autres modèles étendront. Ce schéma de base inclura les propriétés communes partagées par tous les modèles dérivés.

components:
  schemas:
    Animal:
      type: object
      required:
        - type
      properties:
        type:
          type: string
        name:
          type: string

2. Créer des sous-schémas

Ensuite, définissez les sous-schémas pour chaque type spécifique. Ces sous-schémas étendront le schéma de base et incluront toutes les propriétés supplémentaires propres à ce type.

components:
  schemas:
    Dog:
      allOf:
        - $ref: '#/components/schemas/Animal'
        - type: object
          properties:
            breed:
              type: string

    Cat:
      allOf:
        - $ref: '#/components/schemas/Animal'
        - type: object
          properties:
            color:
              type: string

    Bird:
      allOf:
        - $ref: '#/components/schemas/Animal'
        - type: object
          properties:
            wingspan:
              type: number

3. Ajouter le discriminateur

Maintenant, ajoutez le discriminateur au schéma de base. L'objet discriminateur spécifie le nom de la propriété qui sera utilisée pour déterminer le type, et il mappe également les valeurs possibles de cette propriété aux sous-schémas correspondants.

components:
  schemas:
    Animal:
      type: object
      required:
        - type
      properties:
        type:
          type: string
        name:
          type: string
      discriminator:
        propertyName: type
        mapping:
          dog: '#/components/schemas/Dog'
          cat: '#/components/schemas/Cat'
          bird: '#/components/schemas/Bird'

Dans cet exemple, la propriété type est le discriminateur qui indique au client de l'API quel schéma spécifique utiliser en fonction de la valeur fournie (dog, cat, bird).

4. Utiliser le discriminateur dans les points de terminaison de l'API

Enfin, vous pouvez utiliser le schéma de base dans vos points de terminaison d'API. Le discriminateur gérera la sélection du sous-schéma approprié en fonction de la valeur de la propriété type.

paths:
  /animals:
    get:
      summary: Get a list of animals
      responses:
        '200':
          description: A list of animals
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Animal'

Dans cette configuration, lorsque le point de terminaison /animals est appelé, la réponse sera un tableau d'objets Animal. Chaque objet inclura une propriété type que le client peut utiliser pour déterminer s'il s'agit d'un Dog, d'un Cat ou d'un Bird, puis le désérialiser en conséquence.

Quand utiliser le discriminateur Openapi ?

Le discriminateur OpenAPI est une fonctionnalité puissante qui aide à gérer et à définir des modèles de données polymorphes au sein des API. Voici quelques scénarios où il est avantageux d'utiliser le discriminateur OpenAPI :

1. Structures de données hiérarchiques

Si votre API implique des modèles de données complexes qui ont une hiérarchie claire, l'utilisation d'un discriminateur peut aider à différencier les différentes sous-classes. Par exemple, si vous travaillez avec un objet de base comme Vehicle, et qu'il existe des types spécifiques tels que Car et Truck, un discriminateur peut spécifier quel type est référencé.

2. Simplifier la logique du client

Lorsque les consommateurs d'API (clients) doivent gérer plusieurs types sous la même ressource, la mise en œuvre d'un discriminateur rationalise la logique côté client. Au lieu d'écrire des vérifications et des conditions étendues pour déterminer le type d'objet, les clients peuvent s'appuyer sur la propriété du discriminateur pour comprendre instantanément avec quel type ils traitent.

3. Améliorer la documentation de l'API

L'utilisation d'un discriminateur OpenAPI améliore la clarté de la documentation de l'API. Il est simple pour les développeurs et les utilisateurs de comprendre comment les différents types d'objets sont liés les uns aux autres. Un discriminateur clairement défini dans le schéma fournit des conseils explicites sur la façon de gérer chaque type.

4. Application de la sécurité des types

En définissant un discriminateur, vous établissez un contrat pour l'API. Les clients doivent se conformer aux types spécifiés, ce qui améliore la sécurité des types. Ceci est particulièrement utile dans les langages à typage statique comme Java ou TypeScript, où des types clairement différenciés peuvent réduire les erreurs d'exécution.

5. Gestion des charges utiles de réponse

Lorsqu'une API peut renvoyer différents types d'objets en fonction du même point de terminaison, comme le renvoi de différents rôles d'utilisateur ou types de produits, l'utilisation d'un discriminateur permet à l'API d'indiquer à quel type la réponse correspond, améliorant ainsi la capacité du client à analyser la réponse correctement.

6. Faciliter le versioning

Dans les cas où vous devez introduire de nouveaux types tout en préservant la compatibilité descendante, un discriminateur peut être avantageux. Il vous permet de gérer de nouveaux types sans perturber les fonctionnalités d'API existantes ni nécessiter de modifications majeures des consommateurs d'API.

7. Réduction des définitions de schéma redondantes

Lorsque plusieurs objets partagent des propriétés communes mais ont également des attributs uniques, un discriminateur réduit la redondance en vous permettant de définir des propriétés partagées dans un schéma de base tout en définissant des propriétés spécifiques dans des schémas dérivés.

8. Polymorphisme dans les API

Dans les API RESTful qui doivent exploiter le polymorphisme, le discriminateur permet efficacement de gérer différents sous-types de manière appropriée sous un type parent commun. Il favorise une implémentation plus propre du comportement polymorphe, ce qui est essentiel pour les applications complexes.

Meilleures pratiques pour l'utilisation des discriminateurs

Bien que le discriminateur soit un outil puissant, il est important de l'utiliser correctement pour éviter les pièges courants :

Conclusion

Le discriminateur OpenAPI est une fonctionnalité inestimable pour la gestion des structures de données polymorphes dans votre API. En permettant à différents modèles de données d'être traités comme une seule entité tout en maintenant la sécurité des types et la clarté, il simplifie le processus de développement et améliore la convivialité de l'API. Que vous construisiez une API complexe avec plusieurs modèles de données ou que vous débutiez, comprendre et exploiter le discriminateur peut vous aider à créer des API plus robustes et maintenables.

Pour les développeurs qui cherchent à affiner leurs compétences OpenAPI, la maîtrise du discriminateur est une étape clé. En suivant les directives et les meilleures pratiques décrites dans ce blog, vous serez bien équipé pour implémenter efficacement les discriminateurs dans vos projets d'API.

Explore more

Comment utiliser Deepseek R1 en local avec Cursor

Comment utiliser Deepseek R1 en local avec Cursor

Apprenez à configurer DeepSeek R1 local avec Cursor IDE pour une aide au codage IA privée et économique.

4 June 2025

Comment exécuter Gemma 3n sur Android ?

Comment exécuter Gemma 3n sur Android ?

Apprenez à installer et exécuter Gemma 3n sur Android via Google AI Edge Gallery.

3 June 2025

Comment utiliser Claude Code avec GitHub Actions

Comment utiliser Claude Code avec GitHub Actions

Découvrez Claude Code avec GitHub Actions : revues de code, corrections de bugs, implémentation de fonctionnalités. Tutoriel pour développeurs.

29 May 2025

Pratiquez le Design-first d'API dans Apidog

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