À quoi servent les Data Transfer Objects (DTO) ?
Vous exposez des données au travers d'une API disponible sur Internet ? Cet article devrait vous intéresser !

Améliorez vos compétences en dev !
Des cours complets, créés par des experts, pour tous niveaux et accessibles en illimité grâce à notre abonnement !
19,99€/mois

Si vous créez des APIs, et que ces dernières sont accessibles depuis internet, le concept de DTO (Data Transfer Object) est vraiment indispensable pour sécuriser vos données !
Prenons l'exemple d'une API Rest, dans laquelle vous manipulez des données utilisateur. Prenons une entité de données très simplifiée comme celle-ci :
public class UserEntity {
public int id;
public string? email;
public string username;
public string? password;
}
Cette entité, vous allez sûrement la récupérer depuis une base de données, effectuer quelques traitements si besoin, et la retourner dans votre réponse HTTP.
Vous pensez que c'est sécurisé...
Car vous avez bien fait attention à ne jamais demander le mot de passe ou l'email dans votre requête SQL, donc ces deux champs sont toujours vides quand le client récupère les données de profil d'un utilisateur.
Sauf qu'un jour, quelqu'un de votre équipe modifie la requête, et rajoute ces données.
Et en quelques heures, les emails et les mots de passe se retrouvent dans la nature...
La solution : DTO
Les DTO sont des objets qui représentent un sous-ensemble de vos entités, et ne contenant uniquement les informations qui sont transférées entre le client et l'API, afin d'éviter toute fuite de données.
Voici un exemple de DTO pour un objet User qui sera retourné dans une liste publique par exemple :
public class PublicUserDto {
public int id;
public string username;
}
Ici, aucun risque de renvoyer le mot de passe par inadvertance, même si la requête à la base de données est modifiée.
Avant chaque réponse du serveur, les entités seront transformées en dto, et inversement lors de la réception de la requête !
Voilà par exemple un DTO spécifique pour recevoir les données lors de l'inscription d'un utilisateur.
public class UserCreateDto {
public string email;
public string username;
public string password;
}
En bonus
En plus de sécuriser les transferts de données, les DTO peuvent être utilisés pour documenter plus clairement les entrées/sorties de votre API, en générant automatiquement la doc OpenAPI par exemple !
En conclusion
Toutes les données qui naviguent entre vos services et votre base de données sont des entités, et tout ce qui passe par les requêtes HTTP de votre API sont des DTO (des sous-ensembles sécurisés de vos entités).
Les articles les plus populaires du blog
Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !
Voir la sélection 🚀Recevez les articles de la semaine par e-mail pour ne rien manquer !
S'abonner à la newsletter 📧
À propos de l'auteur
Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.
Aujourd'hui je suis aussi formateur/coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !