D'après ce que j'ai compris, Objets de transfert de données (DTO) sont généralement des objets sérialisables de petite taille, plats, sans comportement, dont le principal avantage est la facilité de transport sur les réseaux.
GraphQL présente les facettes suivantes :
- encourage à servir graphes d'objets riches ce qui (dans ma tête en tout cas) contredit la partie "plate" des DTO,
- permet aux clients choisir exactement les données qu'ils souhaitent qui répond à la partie "petit",
- renvoie à Objets JSON-esque qui traite des parties "sans comportement" et "sérialisable".
GraphQL et le modèle DTO s'excluent-ils mutuellement ?
Voici ce qui a conduit à cette question : Nous envisageons une architecture de microservices avec une passerelle. Je suis en train de concevoir une API qui s'intégrera dans cette architecture et qui servira (entre autres) à géométries . Dans de nombreux cas (probablement la plupart), les géométries ne seront pas utiles aux applications clientes, mais elles seront critiques dans d'autres cas et doivent donc être servies. Quelle que soit la façon dont elles sont sérialisées, les géométries peuvent être volumineuses, si bien que donner aux clients la possibilité de les refuser permet d'économiser beaucoup de bande passante. Les API RESTful que j'ai vues gérer les géométries le font en fournissant une fonction "Paramètre "returnGeometry dans la chaîne d'interrogation. Je ne me suis jamais senti tout à fait à l'aise avec cette approche, et j'ai d'abord envisagé de servir un ensemble raisonnablement profond d'objets de retour connexes/enchevêtrés, dont beaucoup seront refusés par les clients. Tout cela m'a amené à envisager une interface GraphQL. Au fur et à mesure que la conception a progressé, j'ai commencé à envisager d'aplatir la sortie (entièrement ou partiellement), ce qui m'a amené à envisager le modèle DTO. Maintenant, je me demande s'il ne serait pas préférable de tout aplatir dans des DTO et de ne pas utiliser GraphQL (en faveur de REST, je suppose ?). J'ai envisagé un moyen terme avec des DTOs servis en utilisant GraphQL pour laisser les clients choisir les attributs qu'ils veulent sur eux, mais je me demande si ce n'est pas mélanger les modèles et les technologies de manière inappropriée.