Skip to the content.

🐱 Node.js

🌐 DĂ©couverte de l’écosystĂšme HTTP Node.js

🚣 Introduction

Il est assez frĂ©quent que les nouveaux dĂ©veloppeurs commencent avec express car c’est le framework qui nous est directement vendu comme “le plus populaire” (et Ă©videmment le plus prĂ©sent dans les diffĂ©rents tutoriels accessibles en surface).

download framework

NĂ©anmoins ce n’est pas forcĂ©ment le meilleur choix car l’équipe derriĂšre express maintient difficilement le framework! (une V5 attendu depuis six ans 🙊) De plus, beaucoup des patterns qu’ils recommandent sont complĂštement dĂ©modĂ©s (toujours pas de support async/await 
). Vous allez Ă©crire du code qui n’inclut rien des pratiques modernes.

Comment choisir le bon framework alors ? Eh bien il nous faut déjà essayer de segmenter ces frameworks par famille pour mieux comprendre et débattre des différents trade-offs que chaque solution implique.

Ces familles sont les suivantes;

La segmentation est inspirĂ©e d’une explication de Romain Lanz dans un talk Adonis.js! (qu’il a repris lui-mĂȘme d’Evan You).

💡 Serveur HTTP natif avec Node.js et un peu de liens sur le protocole

Avant de rentrer dans le vif du sujet et de parler des diffĂ©rentes familles de “frameworks” dans l’écosystĂšme Node.js, il me semble important de faire un petit chapitre pour vous parler du module core http.

Il peut ĂȘtre intĂ©ressant d’étudier et travailler le fonctionnement d’un serveur HTTP Natif. Cela ne vous sera pas forcĂ©ment directement nĂ©cessaire pour du code de production, mais va vous permettre de comprendre, un peu mieux, comment interagir en HTTP sans avoir l’abstraction d’un framework qui s’occupera de gĂ©rer la difficultĂ© et les dĂ©tails relous pour vous (Si vous n’avez pas dĂ©jĂ  une expĂ©rience consĂ©quente sur le sujet Ă©videmment).

C’est aussi intĂ©ressant pour vous permettre d’avoir une meilleure comprĂ©hension du protocole HTTP. Je vous recommande aussi de lire le book High Performance Browser Networking.

Mon collÚgue youtuber Tonygo_ a par ailleurs produit quelques vidéos sympas dessus;

Autres talks Node.js autour de HTTP 1, 2 et 3 (QUIC).

Documentation sur l’écriture d’un serveur HTTP Node.js sans frameworks:

Je vous recommande aussi de garder Ă  l’Ɠil le projet undici qui devrait ĂȘtre le prochain client HTTP Node.js (plutĂŽt que d’utiliser got ou axios).

🚁 Framework Small scope

Ces frameworks ou “micro-frameworks/libs” pour certains 😏 sont bien souvent de petite taille et imposent trĂšs peu d’opinions au dĂ©veloppeur (le framework ne vous contraint pratiquement pas Ă  suivre des pratiques, des patterns, un outil X plutĂŽt que Y etc). Ils sont bien souvent de simples routeurs http avec une modularitĂ© fournie par le biais d’un simple systĂšme de middleware.

Il est souvent de la responsabilitĂ© du dĂ©veloppeur pour chaque API d’assembler/coller un ensemble de packages npm et middlewares entre eux pour aboutir au rĂ©sultat attendu.

C’est une façon de faire qui donne “souvent” beaucoup de flexibilitĂ© et une certaine sensation de libertĂ© (ce qui peut ĂȘtre perçu positivement ou nĂ©gativement selon les besoins et les mentalitĂ©s de chacun). C’est certainement aussi une façon de faire qui correspond Ă  beaucoup de dĂ©veloppeurs qui n’aiment pas particuliĂšrement suivre des modĂšles prĂ©dĂ©finis.

Liste non exhaustive de ces frameworks

À ce jour, le framework le mieux maintenu est Fastify (qui est supportĂ© par la fondation OpenJS). J’utilise aussi beaucoup la version @next de polka pour construire des micro API trĂšs light (notamment pour de l’http embarquĂ© et des CLI).

Cela inclut aussi les frameworks spĂ©cialisĂ©s dans la crĂ©ation de micro-service comme Moleculer. NĂ©anmoins il est moins frĂ©quent de les rencontrer en entreprise (moi-mĂȘme je n’ai pas rĂ©ellement d’expĂ©rience avec un de ces frameworks).

✈ Framework Big scope

Ces frameworks vous imposent bien souvent dĂšs le dĂ©but un ensemble d’opinions et vous fournissent un ensemble de packages et modules prĂ©-intĂ©grĂ©s pour gĂ©rer divers besoins (Template engine, Form Validator, ORM, Auth, Queue, SĂ©curitĂ© etc).

L’objectif est de vous apporter trĂšs rapidement une plus-value business et une meilleure expĂ©rience dĂ©veloppeur sans que vous ayez Ă  reconstruire la roue pour chaque fonctionnalitĂ© qui ne serait pas liĂ©e au besoin mĂ©tier de votre application.

La courbe d’apprentissage de ces frameworks peut ĂȘtre lĂ©gĂšrement plus longue car ils demandent souvent d’acquĂ©rir tout un ensemble de notions supplĂ©mentaires qui sont elles mĂȘme souvent en lien avec les opinions du framework (Structure d’un projet, MVC etc
) ainsi que prendre en main les Ă©lĂ©ments et code souvent propre Ă  chaque framework (Ce qui n’est pas forcĂ©ment un point nĂ©gatif sachant que bien souvent les dĂ©veloppeurs s’amusent Ă  recrĂ©er cela eux mĂȘmes sur express).

NĂ©anmoins vous y gagnerez certainement en productivitĂ© sur le long terme (surtout si vous ĂȘtes amenĂ©s Ă  souvent construire de nouveaux projets avec des besoins mĂ©tier assez importants).

Comme pour le Small-scope ce sont des frameworks purement back-end. La liste des frameworks “sĂ©rieux” est nĂ©anmoins assez courte car il est vraiment trĂšs difficile de construire et maintenir de tels projets sur le long terme:

⚠ Attention car de nos jours beaucoup de vieux frameworks qui ne sont plus rĂ©ellement maintenus sont toujours activement recommandĂ©s :

J’ai eu l’occasion de travailler professionnellement avec ces deux frameworks et je vous recommande trùs fortement de les fuir pour tout nouveau projet.

Il n’est pas rare qu’aujourd’hui des dĂ©veloppeurs maintiennent encore des projets sur ces frameworks 😹

🌠 Framework Full-stack

Je ne suis pas un grand spĂ©cialiste sur les frameworks fullstack (je n’ai d’ailleurs encore aucune expĂ©rience avec ces frameworks car je fais que trĂšs peu de front-end ces derniĂšres annĂ©es).

NĂ©anmoins je peux vous dire que les frameworks fullstack sont** “souvent”** des frameworks qui vont essayer de rĂ©unir front-end et back-end pour construire le tout au sein d’une abstraction unifiĂ©e. Leur objectif est de simplifier le cycle de dĂ©veloppement (et l’expĂ©rience du dĂ©veloppeur A.K.A DX) par le biais d’abstractions qui vont cacher divers dĂ©tails techniques (enfin c’est l’idĂ©e.. aprĂšs dans la rĂ©alitĂ© cela peut ĂȘtre source de dĂ©bats).

Il existe nĂ©anmoins une assez grande diversitĂ© de choix et de façon de faire les choses, alors il est assez difficile de mettre des mots prĂ©cis sur ces choses-lĂ . Le plus important pour moi est de comprendre qu’il y a toujours la composante front et back qui vont s’entremĂȘler.

Liste des frameworks (uniquement ceux que je connais):

⛔ Je vous recommande fortement d’éviter le framework Meteor (mĂȘme dĂ©lire que le chapitre prĂ©cĂ©dent).

🎯 Comment faire un choix

Si vous ĂȘtes un dĂ©veloppeur plutĂŽt front-end avec un petit intĂ©rĂȘt pour le back-end, alors il est fort probable que les frameworks fullstack soient plus intĂ©ressants pour vous (Next, Nuxt ou Sapper).

Si vous souhaitez plutÎt vous spécialiser en back-end alors je vous recommande de vous intéresser aux deux familles (small & big scope). En ce qui me concerne je vous recommande Fastify et Adonis / Nest.js.

👀 Un rĂ©cent article de Snyk parle d’ailleurs du succĂšs de Fastify (en anglais).

Si vous ĂȘtes plutĂŽt un puriste ou un dĂ©veloppeur bas niveau et que vous aimez bien tout maĂźtriser de A Ă  Z, alors il est fort probable que la famille small-scope soit pour vous. Il peut ĂȘtre intĂ©ressant pour vous dĂšs lors d’explorer les diffĂ©rentes solutions (mĂȘme si elles ne sont pas forcĂ©ment mainstream).

📌 Notons tout de mĂȘme que Adonis possĂšde aussi une version light qui n’embarque que le strict minimum ce qui peut ĂȘtre aussi une piste viable Ă  visiter.

Il existe un framework du nom de Kuzzle que je ne savais pas trop comment classer (il reprĂ©sente certainement Ă  lui seul une famille ^^). Je souhaitais tout de mĂȘme en parler trĂšs rapidement sachant que le framework Ă  un support non nĂ©gligeable en France.

Liens supplémentaires pour apprendre à utiliser ces frameworks


âŹ…ïž 🐱 Node.js: đŸ„ Ressources pour les dĂ©butants | âžĄïž 🐱 Node.js: 📰 ConfĂ©rences et Articles