Un guide du débutant sur les interfaces et les unions GraphQL

Qu’est-ce que GraphQL?

GraphQL est un langage de requête open-source pour les API, initialement développé par Facebook en 2012 et rendu public en 2015. Il offre une alternative flexible et efficace aux API REST traditionnelles en permettant aux clients de demander uniquement les données spécifiques dont ils ont besoin, résolvant ainsi les problèmes de sur-récupération et de sous-récupération qui surviennent souvent avec les API REST.

Une des raisons de la popularité croissante de GraphQL est sa nature axée sur le client. Cela le rend particulièrement adapté aux applications modernes où les performances, la scalabilité et les expériences utilisateur fluides sont essentielles. GraphQL permet aux clients de combiner plusieurs ressources dans une seule requête, réduisant le trafic réseau et en faisant une excellente solution pour les applications mobiles avec une bande passante limitée ou des besoins frontend complexes.

Des grandes entreprises comme GitHub, Twitter, Indeed et Shopify ont adopté GraphQL, mettant en avant son potentiel pour rationaliser le développement d’API et améliorer les interactions client-serveur.

Interface GraphQL

En GraphQL, une Interface fonctionne de manière similaire aux interfaces en programmation orientée objet. C’est un type abstrait qui définit un ensemble de champs communs que plusieurs types d’objets peuvent implémenter. Cela garantit que le client peut interroger en toute confiance ces champs communs à travers différents types.

Markdown

 

Requête client GraphQL:

Markdown

 

Dans cet exemple, les champs communs tels que id, name et model sont disponibles pour tous les types d’objets qui implémentent l’interface Vehicle. Cependant, les champs spécifiques aux types tels que fuelType pour Car et gearCount et isElectric pour Bicycle peuvent être interrogés à l’aide de fragments.

Si le client n’a besoin que des champs communs, il peut omettre les fragments :

Markdown

 

Avantages de l’utilisation des interfaces

  1. Réutilisabilité du code : Les champs communs peuvent être définis dans l’interface et partagés entre plusieurs types, réduisant la redondance.
  2. Logique simplifiée côté client : Les clients n’ont pas besoin de vérifications conditionnelles pour les types d’objets. Ils peuvent demander des types exacts et gérer les réponses en toute confiance.
  3. Extensibilité du schéma : Ajouter un nouveau champ commun devient plus facile car il doit simplement être défini dans l’interface.
  4. Structure imposée : Les interfaces imposent une structure partagée à tous les types implémentant, assurant une cohérence (par exemple, tous les véhicules doivent avoir un id, un name et un model).
  5. Interrogation unifiée : Au lieu d’interroger différents types individuellement, les clients peuvent interroger une seule interface pour récupérer des données de tous les types implémentant.
  6. Documentation améliorée : En définissant des comportements communs à travers les interfaces, il devient plus facile pour les consommateurs de l’API de comprendre et de travailler avec des types connexes.

Union GraphQL

Un Union en GraphQL est un type abstrait qui permet aux clients de interroger plusieurs types d’objets qui sont liés d’une certaine manière à travers un seul champ. Contrairement aux interfaces, les unions ne nécessitent pas que les types membres partagent des champs communs. Cela rend les unions idéales pour traiter les cas où les types apparentés ont des structures différentes mais doivent être interrogés ensemble.

Markdown

 

Requête client GraphQL :

Markdown

 

Dans cet exemple, Product, Service et Subscription sont tous des types distincts appartenant à l’union PurchaseItem. Le client peut interroger les trois types en utilisant des fragments dans une seule requête, même s’ils ne partagent aucun champ.

Note importante concernant les unions, les types membres d’un type Union doivent tous être des types de base d’objet ; les types Scalar, Interface et Union ne doivent pas être des types membres d’une Union. De même, les types d’enveloppe ne doivent pas être des types membres d’une Union.

Avantages de l’utilisation des Unions

  • Regroupement flexible : Les unions permettent d’interroger des types apparentés qui ne partagent aucun champ commun, ce qui serait fastidieux à gérer autrement.
  • Gestion des erreurs simplifiée : Les clients peuvent utiliser des fragments pour interroger des types spécifiques, réduisant ainsi le besoin de logique conditionnelle complexe côté client.
  • Gestion de données hétérogènes : Une seule requête peut récupérer des données de plusieurs types, simplifiant la gestion de structures de données variées.
  • Utile pour les réponses d’erreur : Les unions sont particulièrement utiles lorsque vous souhaitez combiner les réponses de succès et les détails d’erreur dans un seul type de réponse, permettant aux clients de les gérer efficacement.

En résumé

Les interfaces et les unions de GraphQL offrent des moyens puissants pour structurer votre schéma GraphQL, permettant la flexibilité et simplifiant les interactions client-serveur. Les interfaces permettent des champs partagés entre les types, favorisant la réutilisation du code et les extensions de schéma plus faciles. Les unions, en revanche, offrent un moyen de interroger des types disparates ensemble sans nécessiter de champs communs.

Source:
https://dzone.com/articles/a-beginners-guide-to-graphql-interfaces-and-unions