6. Les types d’applications pouvant être développées avec Node.js

Ce que nous allons voir maintenant est très important, et a été pendant longtemps une source de confusion pour moi. Nous avons vu que Node.js est un environnement permettant d’exécuter du JavaScript en dehors du navigateur, mais du coup… qu’est ce qu’on peut développer exactement comme application avec Node.js ?

Ah ce moment-là en faisant quelques recherches, on peut retrouver tout et son contraire. Je vous propose de démystifier tout cela sans plus tarder. J’ai distingué quatre grandes catégories d’applications pouvant être développées avec Node.js :

Un site web

Oui, oui vous avez bien entendu, on peut développer un site entièrement en Node.js, comme on pourrait le faire avec un autre langage comme Java, Python ou encore PHP. En effet, parmi les modules natifs de Node.js, on retrouve un module nommé http, qui permet le développement de serveurs HTTP. On peut donc développer la partie serveur d’un site, qui va s’occuper de la connexion à une base de donnée, mettre en place les routes de navigation pour votre site, et renvoyer du code HTML, CSS, et… JavaScript. Et oui, vous aurez du JavaScript qui renvoie du JavaScript. 🤯

Le premier « JavaScript » sera interprété par le moteur V8 intégré à Node, et le « deuxième » JavaScript sera interprété par le moteur de votre navigateur. Cela peut rapidement être la confusion dans votre code.

Mais au-delà de l’utilisation de Node.js, ce genre d’architecture a de moins en moins la côte, car elle ne permet pas de développer des interfaces très réactives. C’est la différence entre un site web et une application web, où le frontend et le backend sont mieux séparés :

L’architecture d’un site web à gauche et d’une application web à droite.

Le schéma de gauche représente un site web : à chaque fois que l’utilisateur demande une page, le serveur s’occupe de la renvoyer : /accueil, /forum, etc. Dans le cas d’une application web, le serveur ne renvoie qu’une page pour l’ensemble du site, puis le JavaScript prend le relais pour gérer la navigation, en affichant ou masquant les éléments HTML nécessaires, pour donner l’impression à l’internaute qu’il navigue sur un site traditionnel !

L’avantage de développer un site de cette façon, c’est qu’il est incroyablement plus réactif. Imaginez, vous remplacez le délai d’une requête au serveur par un traitement JavaScript ! De plus, comme vous n’avez pas à recharger toute la page lors de la navigation, vous pouvez permettre à l’utilisateur de naviguer sur votre site tout en discutant avec ses amis par exemple, comme c’est le cas sur la version web de Facebook par exemple. 👍

Donc je vous déconseille de développer des sites web avec Node.js, vous allez partir sur une architecture qui n’a plus la cote, et en plus vous risquez de vous mélanger les pinceaux entre le JavaScript côté serveur et celui côté navigateur. On oublie donc !

Une API Rest 👍

Node.js est principalement utilisé pour écrire le backend d’une application web, et c’est le sujet principal de ce cours. On parle d’API (Application Programming Interface). C’est un sujet assez large, que l’on va creuser plus profondément par la suite, car c’est ce qui va nous intéresser principalement dans ce cours.

L’objectif de notre application Node.js va être de gérer les accès à la base de données, et d’exposer une API REST au différentes parties visibles de notre projet. Concrètement, si vous développez une application web, vous pourrez utiliser cette API REST pour sauvegarder un nouvel utilisateur, supprimer ou modifier telle ou telle donnée, etc. Et si vous avez une application mobile associé au projet, vous pourrez venir utiliser cette même API pour effectuer des opérations similaires.

Les opérations effectuées sur les API REST sont unidirectionnelles. On envoie d’abord une requête, et ensuite seulement on attend une réponse.

Une application en temps réel

Node.js est connu pour développer un autre type d’application : les applications en temps réel. Concrètement, il s’agit de toutes les applications qui ont besoin de communiquer rapidement entre le serveur et le frontend, que ce soit un navigateur ou une application mobile. On retrouve majoritairement les applications de messagerie instantanée, comme WhatsApp par exemple.

Lorsque vous envoyez un message, il faut que votre interlocuteur soit prévenu immédiatement. Et vous devez également être prévenu si cette personne a vu ou non votre message. On ne peut pas implémenter cette application avec une solution du type : « Toutes les 2 minutes, faire une requête au serveur, pour voir s’il y a un nouveau message ». Imaginez que vous avez des millions utilisateurs, vous allez exécuter tellement de requête que votre serveur va sauter ! 🤯

Heureusement, il existe une solution, c’est d’implémenter une communication bidirectionnelle entre votre serveur et vos différentes applications frontend. C’est possible en Node.js grâce à une librairie nommée socket.io, qui permet cette communication bidirectionnelle, et en temps réel :

Même si ce n’est pas l’objet de ce cours, sachez que la librairie socket.io comprend deux parties : une bibliothèque côté client qui s’exécute dans le navigateur (ou un équivalent pour vos applications mobiles), et une bibliothèque côté serveur pour Node.js. C’est toujours ça de pris pour votre culture générale. 🙂

Un script

Enfin, le dernier cas d’utilisation de Node.js, et bien c’est simplement un script.

Un script est un petit programme que vous pouvez exécuter sur votre machine local.

Par exemple, dans le cadre de mon travail, je devais récupérer certaines données d’une API REST distante, et les placer dans un fichier au format CSV. Rien de très excitant vous me direz.

Mais plutôt que de faire ça à la main, j’ai créé un script avec Node.js, et lorsque je l’exécuté sur ma machine, il s’occupe pour moi d’envoyer une requête à l’API REST distante, et ajoute les bonnes données ligne par ligne dans mon fichier CSV. Bref, j’utilisais Node.js pour faire une partie du travail à ma place. En plus, je pouvais transmettre ce script à d’autres de mes collègues pour qu’ils puissent également utiliser le script. 🤫

Bref, ce n’est pas l’objet non plus de cours, mais il arrive par fois que vous entendiez parler de « script Node.js ». Vous voilà prévenu !

Nous savons maintenant quels sont les quatre grands types d’applications pouvant être développé avec Node.js.

Et ce qui nous intéressera dans ce cours, ce sont les API REST. On continue !