Pour les amateurs de TypeScript, Prisma est depuis un certain temps la solution idéale pour créer des applications centrées sur les bases de données. Mais récemment, un nouveau challenger est apparu. Si vous avez suivi de près l'espace ORM, vous avez probablement entendu parler de Drizzle, un nouvel ORM qui prétend être plus flexible, plus performant et constituer une alternative globalement meilleure. Dans cet article, je vais chercher une comparaison. Suivant le mantra « Show, Don't Tell », j'y parviendrai en construisant la même API deux fois, avec Drizzle et Prisma, respectivement.
Avis de non-responsabilité : je suis l'auteur de ZenStack, une boîte à outils full-stack construite sur Prisma. J'ai plus d'expérience avec Prisma qu'avec Drizzle, mais je ferai de mon mieux pour être objectif et juste.
Je ne veux pas que l'API soit un autre exemple de « bonjour tout le monde », car aucun aperçu ne peut être généré. Cependant, en utiliser un trop complexe rend également difficile son contenu dans un article de blog. J'ai donc décidé d'utiliser un simple scénario de « article de blog » mais d'ajouter une touche « multi-location ».
Voici les exigences :
Espaceconstitue la limite de la location. UNEspacecontient une liste dePostes.UtilisateurLes s sont mondiaux et peuvent être invités dansEspaces par les administrateurs de l'espace. C'est à dire.,EspaceetUtilisateurformer une relation plusieurs-à-plusieurs.Utilisateurpeut avoir l'un des deux rôles dans un espace :MEMBREouADMINISTRATEUR.Utilisateurs peut créerPostepéchéEspaces. UNPostea unpubliéétat indiquant s’il est visible par tous.Posteest lisible par tout le monde s'il est publié et est toujours lisible par son auteur et le propriétaire/administrateur de l'espace.La différence la plus significative entre Drizzle et Prisma réside dans la façon dont le schéma est défini. Drizzle est entièrement TypeScript. Vous savez écrire un schéma si vous connaissez TypeScript. Rien d'autre n'est nécessaire. Son API de création de schéma vous permet de décrire tous les aspects de vos tables, relations et contraintes. Voici à quoi ressemble le schéma de notre API :
// Exportation du schéma Drizzle const spaceUserRoleEnum = pgEnum('SpaceUserRole', ['MEMBER', 'ADMIN']); // Exportation de la table utilisateur const users = pgTable( 'users', { id: serial('id').primaryKey(), email: varchar('email',...
[Courte citation de 8% de l'article original]