Pourquoi vous devriez utiliser les DTO dans votre API REST
DTO signifie D ata T ransfert O bjet .
Ce modèle a été créé avec un objectif très bien défini: transférer des données vers des interfaces distantes , tout comme les services Web . Ce modèle s'intègre très bien dans une API REST et les DTO vous donneront plus de flexibilité à long terme.
Les modèles qui représentent le domaine de votre application et les modèles qui représentent les données gérées par votre API sont (ou devraient au moins être) des préoccupations différentes et doivent être découplés les uns des autres. Vous ne souhaitez pas casser vos clients API lorsque vous ajoutez, supprimez ou renommez un champ du modèle de domaine d'application.
Alors que votre couche de service fonctionne sur les modèles de domaine / de persistance, vos contrôleurs d'API doivent fonctionner sur un ensemble différent de modèles. Au fur et à mesure que vos modèles de domaine / de persistance évoluent pour prendre en charge de nouvelles exigences commerciales, par exemple, vous souhaiterez peut-être créer de nouvelles versions des modèles d'API pour prendre en charge ces changements. Vous pouvez également désapprouver les anciennes versions de votre API à mesure que de nouvelles versions sont publiées. Et il est parfaitement possible de le réaliser lorsque les choses sont découplées.
Juste pour mentionner quelques avantages de l'exposition des DTO au lieu des modèles de persistance:
Découplez les modèles de persistance des modèles d'API.
Les DTO peuvent être adaptés à vos besoins et ils sont parfaits lorsqu'ils n'exposent qu'un ensemble d'attributs de vos entités de persistance. Vous n'aurez pas besoin d'annotations telles que @XmlTransientet @JsonIgnorepour éviter la sérialisation de certains attributs.
En utilisant les DTO, vous éviterez un enfer d'annotations dans vos entités de persistance, c'est-à-dire que vos entités de persistance ne seront pas gonflées d'annotations non liées à la persistance.
Vous aurez un contrôle total sur les attributs que vous recevez lors de la création ou de la mise à jour d'une ressource.
Si vous utilisez Swagger , vous pouvez utiliser @ApiModelet @ApiModelPropertyannotations pour documenter vos modèles API sans déconner vos entités de persistance.
Vous pouvez avoir différents DTO pour chaque version de votre API.
Vous aurez plus de flexibilité lors de la cartographie des relations.
Vous pouvez avoir différents DTO pour différents types de supports.
Vos DTO peuvent avoir une liste de liens pour HATEOAS . C'est le genre de chose qui ne devrait pas être ajoutée aux objets de persistance. Lorsque vous utilisez Spring HATEOAS , vous pouvez étendre vos classes DTO RepresentationModel(anciennement appelées ResourceSupport) ou les encapsuler avec EntityModel(anciennement appelée Resource<T>).
Traitement du code standard
Vous n'aurez pas besoin de mapper manuellement vos entités de persistance aux DTO et vice versa . Il existe de nombreux cadres de cartographie que vous pouvez utiliser pour le faire. Par exemple, jetez un œil à MapStruct , qui est basé sur les annotations et fonctionne comme un processeur d'annotation Maven. Cela fonctionne bien dans les applications basées sur CDI et Spring.
Vous pouvez également envisager de Lombok pour générer des getters, setters, equals(), hashcode()et les toString()méthodes pour vous.
Connexes: pour donner de meilleurs noms à vos classes DTO, reportez-vous à cette réponse .