Uno stack tecnologico ibrido, che va oltre JavaScript e permette di fare lavorare le applicazioni web sia sul client sia sul server. Ecco come usiamo AngularJS e Node.js.
In passato il rendering dell’HTML nelle applicazioni web era eseguito dal server e quindi indirizzato al client che formulava la richiesta. Da un paio di anni questo approccio si rivela in molte situazioni obsoleto. L’avvento della libreria JQuery, oltre ad avere semplificato enormemente la programmazione in JavaScript, ha cambiato il modo in cui manipoliamo la struttura dei documenti in accordo con il DOM. In particolare AngularJS estende il vocabolario HTML rendendo possibile il rendering lato client, senza alcuni sacrificio in termini di produttività.
Tuttavia anche l’esecuzione solo lato client ha i suoi difetti, in particolare in termini di performance (il rendering lato client è certamente più lento), di compatibilità con i browser più vecchi e soprattutto di efficacia dal punto di vista SEO (un’applicazione che gira esclusivamente sul client non può servire correttamente i crawler dei motori di ricerca).
Ecco dunque l’approccio cosiddetto ibrido. Cambia il modo di intendere lo schema architetturale MVC: non solo server-side né solo client-side. Alcuni componenti del codice JavaScript, infatti, sono eseguibili sia lato server sia lato client. Per questo si parla di JavaScript isomorfo (“Isomorphic JavaScript”). Alla base del modello c’è Node.js, un framework stabile e veloce che permette di scrivere applicazioni JavaScript eseguibili lato server.
L’approccio ibrido ha diversi vantaggi. Da un lato assicura migliori prestazioni, perché non sempre è necessario attendere che il rendering sia eseguito lato client. Dall’altro lato permette di gestire le problematiche SEO, servendo le richieste dei crawler in modo adeguato. Ovviamente il presupposto di tutto è la capacità di creare un robusto livello di astrazione, in modo da disaccoppiare la logica applicativa dalle singole implementazioni.
E questo ci porta a parlare dell’architettura per microservizi, che è a sua volta parte integrante del nostro approccio. L’idea è di scomporre la logica di business di un’applicazione nei suoi elementi più piccoli, ciascuno in grado di comunicare via API in modo indipendente e agnostico. Le soluzioni complesse sono suddivise in sostanza in un set di piccoli servizi, orchestrati fra loro. Si tratta di un approccio modulare allo sviluppo, molto efficiente perché pensato per sfruttare nel modo migliore le competenze disponibili. Inoltre l’eventuale sostituzione dei singoli servizi risulta molto più semplice.