Développement web

NestJS : un framework Backend JavaScript pour réaliser des API

Il y a quelque temps je faisais un article sur les Frameworks JavaScript mais orienté Frontend. Je parlais notamment des très populaires Angular, React et VueJS. Il était donc naturel que je parle également d’un Framework mais orienté Backend et j’ai choisi le très fabuleux NestJS.

Plus qu’un simple Framework, un outil polyvalent complet clé en main

En général, quand on veut créer une interface Backend en JavaScript comme une API par exemple on se tourne vers Node.js et son Framework Express.

Rapide et extrêmement simple à utiliser et à mettre en place, il convient parfaitement pour effectuer de petits projets, mais il présente pas mal d’inconvénients et notamment par exemple comme son manque de structure et de cadrage.

Et c’est justement l’un des nombreux avantages que vous proposera NestJS, mais ce n’est pas que cela. Non seulement votre projet sera très bien structuré, mais vous pourrez facilement le rendre testable et évolutif, ce qui facilitera la maintenance de votre application Backend dans l’avenir.

Ce qui est top avec lui c’est qu’il intègre les principaux paradigmes que l’on utilise aujourd’hui sur les langages web à savoir la programmation orientée objet, la programmation fonctionnelle ainsi que la programmation réactive.

Il faut bien comprendre que ce Framework ne remplace pas Express, mais il va plutôt venir en tant que couche d’abstraction d’Express. NestJS va s’appuyer dessus pour effectuer le routing de votre API.

Dépendances minimalistes pour vous laisser la main

Ce qui est pénible quand on lance un projet en JavaScript aujourd’hui, ce sont les dépendances. Vous savez, c’est les packages que l’on gère avec npm ou yarn pour ajouter des librairies et des fonctionnalités Open Source à ses applications.

Si vous avez déjà utilisé ce mécanisme, vous avez vite compris que la plupart du temps vos projets JavaScript contiennent plus de dépendances que de codes que vous avez faits. Et je ne parle même pas de la taille de votre projet.

Avec NestJS pas de fioriture. Mis à part Express et lui-même, il n’intègre quasiment rien en termes de dépendance. Vous vous dîtes alors comment il peut être très complet alors qu’il n’y’a rien dedans.

Tout simplement parce qu’on vous laisse la main et surtout le choix. En effet, les concepteurs de NestJS ont développé tout un tas de dépendances supplémentaires pour agrémenter nos applications comme TypeORM, Mongoose, Sequelize ou encore OpenAPI (Swagger).

Ils ont même un package de CRUD nommé CQRS.

Configurez comme vous le souhaitez votre NestJS

Vous n’êtes peut être pas branché Express ? Pas de souci ! Les concepteurs ont également prévu de le faire fonctionner sous Fastify également. Il vous suffit de le demander lors de la création de votre projet NestJS en ligne de commande.

La puissance d’Angular dans NestJS

La première chose à savoir c’est que NestJS ce n’est pas Angular (sinon ça ne s’appellerait pas NestJS). C’est juste qu’il utilise la philosophie de celui-ci dans son Framework.

Cela vous permettra d’obtenir un code et une application très structurée.

Pour rappel, le concept d’Angular est de découper son code et donc son application sous forme de modules. On injecte ensuite ces modules dans les parties de notre application où l’on en a besoin pour les faire travailler ensemble.

On peut résumer en un jeu de modules et d’injection de dépendances, nous obligeant à réfléchir plus minutieusement à la conception de notre application web.

Ce qui a l’avantage de permettre au développeur de mieux gérer le projet, mais également de pouvoir le faire évoluer plus rapidement et plus facilement.

NestJS va utiliser ses concepts dans son Framework pour concevoir votre application sous forme de modules.

L’efficacité et la force de Typescript

Une autre chose à savoir c’est que le Framework a été totalement construit en TypeScript  et que vous pouvez donc coder vos applications en Typescript.

Mais sachez que le Framework supporte également le JavaScript pur si vous ne voulez pas coder en TypeScript. Je ne vous conseille pas par contre de coder en JavaScript pur sur ce Framework.

Ce serait contre-productif et vous iriez à l’encontre du Framework : code lisible, sécurisé et très bien écrit. Car il faut quand même l’avouer, mais le JavaScript pur c’est pas très joli et agréable à lire.

Avec Typescript, vous aurez le mérite d’avoir un code lisible et surtout typé donc vous aurez plus de sécurité dans votre code et vous supprimerez des bugs que vous pourriez rencontrer sans typages.

Le CLI, votre assistant pour votre projet NestJS

Comme Angular, NestJS possède son propre CLI. Un assistant en ligne de commande pour manager votre projet Nest.

Et le moins que l’on puisse dire ce que l’on peut faire pas mal de choses et que les concepteurs ont pensé à tout.

Vous allez pouvoir créer votre projet NestJS avec le CLI. Il vous demandera notamment quel est le manager de package que vous voulez utiliser (NPM ou Yarn) et il installera votre projet tout seul comme en grand.

Tout un tas de choses peuvent être créé avec le CLI et je vous recommande de le faire avec l’outil pour être sûr que vous respectez les bonnes pratiques et le standard de votre application NestJS.

Vous pourrez notamment créer des controllers, des services, des modules ou encore des librairies. Non seulement il va vous générer votre fichier avec un template prédéfini suivant ce que vous lui demandez de générer, mais vous avez la possibilité de générer directement l’arborescence en même temps.

J’entends par arborescence les dossiers où vous voulez mettre vos fichiers.

Du mode standard au monorepo

Alors bien entendu, le CLI ce n’est pas que ça bien que c’est déjà une autre aide. Vous pouvez configurer totalement votre projet NestJS avec comme je vous l’ai dit.

Un point que je n’ai pas mentionné c’est que votre projet NestJS est configuré en mode standard pour la génération de votre arborescence, mais aussi de votre fichier avec le CLI.

Le mode Standard va donc générer vos composants en application la structure d’application par défaut de NestJS. En clair, c’est dans le cas où votre repository ne contiendra uniquement qu’une partie back. C’est son but premier.

Mais peut être que vous êtes dans le cas où vous voulez gérer un seul repository qui contiendra par exemple une partie back (NestJS) et une partie front (et d’autres choses si vous le souhaitez).

Alors il faudra passer par le monorepo qui comme son nom l’indique vous permet de gérer un seul repository pour votre projet complet dans le cas où vous devez avoir plusieurs applications au sein de votre même projet.

Ce mode est donc activable et utilisable avec le CLI. NestJS a fait un tableau comparatif des principales différences entre les 2 modes dans sa documentation.

Commande de développement, production et de build

Pendant que vous coderez, vous allez devoir tester votre application en mode développement. De même que lorsque vous allez déployer votre application en production, vous allez devoir la faire tourner en mode production.

Ces commandes sont bien entendu prévues pour réaliser ses opérations. De même que la commande de build pour compiler votre application

Vous aurez également le choix de compiler votre projet avec webpack, mais aussi de pouvoir effectuer des hot reload pendant votre phase de développement.

Le mieux étant de consulter la documentation de NestJS pour trouver ce que vous préférez utiliser.

Jest, vous avez dit test ?

NestJS propose des outils, mais surtout une structure de développement respectant les bonnes pratiques en matière de développement et de code.

Ils se devaient donc de mettre en place une stratégie de gestion et de génération de tests unitaires au sein de NestJS.

Ce qui est génial c’est que lorsque vous générez des fichiers par le CLI, il va vous générer un fichier spécifique pour écrire vos tests. Vous n’avez donc plus d’excuses pour ne plus en faire. Le travail est prémâché.

Il utilise notamment Jest pour vous permettre d’écrire, mais surtout d’exécuter vos tests unitaires. Si vous ne connaissez pas Jest, ce n’est pas grave.

La documentation de NestJS vous montre de manière simple et efficace comme les écrire au mieux et les exécuter.

Vous pensez qu’avec NestJS vous ne ferez que des tests unitaires ? Vous avez deviné ! La réponse est non. Vous allez pouvoir plusieurs sortes de tests comme vos request-scoped ou encore les très célèbres et utiles tests End-to-end.

Une documentation extrêmement bien faîte

commitstrip documentation

Source : http://www.commitstrip.com/fr/2015/06/29/as-the-last-resort/?

J’en ai parlé et fait des liens à propos de la documentation. Et pour ceux qui me connaissent et qui ont lu mes derniers articles, vous savez que ce que j’aime dans les outils ou les Frameworks que j’utilise c’est d’une part leur simplicité et efficacité, mais surtout leur documentation.

Et j’ai une très bonne nouvelle, car ce Framework possède une documentation extraordinaire et je n’exagère pas. Elle est simple, efficace et surtout très complète et extrêmement bien faîtes.

Ce qui est génial c’est qu’il y a de nombreux exemples concrets, mais surtout vraiment utiles pour vos app afin de vous familiariser avec NestJS.

Mais quand je parle d’utilité, c’est vraiment des choses que vous allez utiliser. Prenons un exemple simple : une connexion à une base de données Mongo.

Non seulement la documentation va vous expliquer chaque étape pour avoir un service dédié à la connexion et aux requêtes de votre base de données, mais en plus vous ferez l’exercice de vous familiariser avec le Framework.

Vous faîtes comme dit l’expression : une pierre, deux coups !

Et il y a énormément de choses : du module d’authentification au système de cache tout en passant par un module d’upload de fichiers.

Il y a donc vraiment de quoi s’amuser tout en mêlant l’utile à l’agréable !

Quels sont les projets que l’on peut faire avec NestJS ?

La réponse est simple : quasiment tout ce qui peut se faire au niveau des projets web.

Soyons honnête, NestJS ne fait pas d’application Frontend, mais il a été pensé et conçu pour facilement cohabiter avec d’autres Frameworks orientés Frontend que ce soit au sein d’un même repository ou non (le fameux mode monorepo).

Il sera le parfait allié pour commencer un petit projet du genre API pour pouvoir évoluer sur quelque chose de plus gigantesque cohabitant avec d’autres Frameworks pour obtenir des applications toujours plus évoluées.

Donc la prochaine fois que vous souhaitez travailler sur un projet web orienté Backend, essayez et adoptez NestJS !

Partager ce contenu
  • 27
    Partages

Leave a Comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.