đą 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).
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;
- Small scope
- Big scope
- Full Stack scope
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;
- FR [DĂ©butant] TOUT SUR LES MĂTHODES HTTP EN 12 MINUTES !
- FR [DĂ©butant] CONNAĂTRE TOUS LES STATUS CODES HTTP PAR COEUR ?
Autres talks Node.js autour de HTTP 1, 2 et 3 (QUIC).
- EN Implementing HTTP/2 for Node.js Core
- EN A QUIC Update
- FR [DĂ©butant] Workshop API REST, RPC & ResourceFUL (talk que jâai fait pour une mission)
Documentation sur lâĂ©criture dâun serveur HTTP Node.js sans frameworks:
- EN Node.js server without a framework (MDN)
- EN Node.js in 2022 - Creating and testing a complete Node.js Rest API (WITH NO FRAMEWORKS) - Erick Wendel
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
- express
- koa.js 2 (petit frĂšre dâexpress, encore vivant mais je ne recommande pas lâutilisation de ce framework pour 2021+).
- hapi (jâaurais recommandĂ© il y a encore peu⊠mais je pense que les derniĂšres annonces ont sacrĂ©ment impactĂ© la maintenance des diffĂ©rents packages).
- polka
- fastify.js
- micro
Ă 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 :
- Sails.js (mĂȘme chose pour le fork Trails.js). Je vous recommande de lire Donât Use Sails (or Waterline).
- Loopback 3 (je ne recommande pas non plus la version 4).
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):
- Next.js (Utilise React.js pour le front, ne pas confondre avec Nest.js)
- Nuxt.js (Utilise Vue.js pour le front, voir le weektalk #8 par Romain Lanz).
- Sapper (Utilise Svelte.js pour le front).
- Gatsby
â 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.
- EN Intro to Fastify - Matteo Collina (podcast bonus ici).
- EN Adonis 5 Tour - Romain Lanz
- FR [débutant] LMHB #3: MONTER UNE APP WEB RAPIDEMENT AVEC ADONIS.JS FEAT @ROMAINLANZ
đ 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