Lo sviluppo software orientato al mondo web è diventato molto complesso negli ultimi anni e ha cambiato le carte in tavola profondamente, dove lo sviluppatore solitario è relegato a creare e gestire piccoli lavori, mentre se l’applicativo diviene complesso e ricco di funzionalità richiede necessariamente un approccio più strutturato. Vediamo come.
Indice dei contenuti
Introduzione
Lo sviluppo web, ha introdotto tante tecnologie. Dai primi siti web di divulgazione accademica agli albori di Arpanet e di Internet, si è passati ad applicativi complessi, spesso dei veri e propri software piuttosto che mere vertine commerciali con siti web statici e per lo più multimediali. I siti hanno così bisogno di tecnologie più complesse e strutturate di un semplice file HTML per poter gestire ed immagazzinare informazioni forniti dai naviganti, gestire preferenze degli utenti, fornire reattività, feedback assieme a sicurezza e robustezza agli errori delle operazioni e procedure svolte da chi usa il software web.
Il modello 3-Tier
Nel web abbiamo visto come l’architettura dominante sia quella client/server (ne parliamo qui), in cui un dispositivo, un pc, richiede una risorsa, o meglio una pagina html ad un server mediante URL/URI e la primitiva GET. Il server risponde fornendo una serie di informazioni come lo status numerico (200,300,400,500), il contenuto content-type del documento richiesto (un documento html, un file pdf, una immagine, un JSON ecc). Questo modello semplice non tiene conto però dell’evoluzione dei siti web e delle risorse che possono essere gestite, acquisite e interagite in modo articolato dall’utente finale. Ecco perché i server web si dotano di opportune estensioni per processare dei linguaggi di scripting che interagiscono con l’utente, le sue richieste, trasformando, immagazzinando o reperendo dati da un database. La cosa bella di questa architettura è che è del tutto trasparente all’utente che continua a ricevere una pagina HTML generata dinamicamente dallo script PHP o Python con i dati reperiti per lo scopo dal database. Un esempio banale: se voglio visualizzare le previsioni del tempo di 5 giorni, lo script interroga il db dove sono stoccate le informazioni e crea l’opportuna veste grafica html, ad esempio con una tabella di cinque righe. Se però l’utente volesse cambiare idea e volesse vedere dieci risultati, lo script sarà programmato in modo generico per poter reperire le dieci informazioni richieste e rigraficarle con una tabella questa volta di dieci righe e relativa pagina html che le contiene.
Sul client, non facciamo larghe considerazioni: tutto è affidato al browser che legge e parsifica il file di testo HTML e lo visualizza. Sul nodo Applicazione Web, ci sono svariati manuali scolastici che approfondiscono in modo egregio il discorso. In questo articolo voglio però mettere in evidenza un dettaglio che sui libri scarsamente è presente: quali sono i server che si occupano di gestire i linguaggi di scripting e quali sono questi linguaggi di scripting.
I linguaggi di scripting
Tra i linguaggi di scripting orientati al web ne esistono diversi. Su tutti citiamo PHP, Python, Java e ASP.NET. Perchè questa varietà? Beh, partiamo prima da necessità commerciali differenti: mentre PHP e Python hanno dietro la comunità open source opportunamente sponsorizzata, Java è di proprietà di Oracle, ASP.NET è un marchio Microsoft. PHP è il linguaggio più diffuso ed allettante per chi intende rimanere a lavorare in Italia. Versatile e anche dalle ottime prestazioni nell’ultima versione 8.0 uscita nel 2020, che consacra questo linguaggio come imprescindibile per chi vuole imparare la programmazione web. Python è molto versatile ma meno diffuso in Italia per il mondo web quanto per il Machine Learning e la IA. Java ha una ottima penetrazione del mercato italiano anche se più dedicato ad applicazioni offline che online. ASP.NET non è esattamente un linguaggio quanto un contenitore di linguaggi diversi come il C# che sfruttano una libreria solida come il .NET. Quale scegliere? Io direi PHP, ma ogni situazione, ogni azienda si specializza su un settore, con scarse possibilità di contaminazione. Per quello che riguarda scolasticamente, è la scelta migliore per comprendere le dinamiche client/server e come formazione base a qualsiasi altro linguaggio analogo. Esiste una novità da pochi anni ed è in rapida ascesa, tranne che in Italia pare, col nome di Node.JS che, banalizzo, è il Javascript usato lato server invece che lato client. Tecnologia molto interessante ma con un livello di complessità leggermente superiore al livello scolastico. Merita decisamente attenzione.
I server web
Un server web è un software che sostanzialmente svolge due funzioni:
- resta in attesa di una richiesta client
- fornisce la risorsa richiesta eventualmente eseguendo uno script PHP o simile e restituendo la risorsa richiesta, per lo più una pagina HTML.
Di server web ne esistono diversi. Commercialmente il più diffuso è l’open source Apache, il più usato anche didatticamente grazie alle suite software XAMP e LAMP. E’ il più usato per interpretare gli script PHP ma non solo. Il secondo più usato al mondo è Nginx, costruito con una architettura diversa da Apache, è molto indicato nelle recenti tecnologie lato server e alleato affidabile del Python. Esistono altri webserver ma con quote di mercato inferiori, a cominciare da Tomcat dedicato al Java e IIS dedicato allo ASP.NET di casa Microsoft. Della tecnologia basata su Node.JS ne abbiamo parlato nel paragrafo precedente.
I database
Per la componente model dei nostri framework, nella stragrande maggioranza dei casi, i dati verranno scritti o reperiti da un database. I framework permettono di connettersi in modo semplice a svariati database, utilizzando però sempre lo stesso frammento di codice/funzione o chiamata in modo trasparente rispetto alla tecnologia scelta e con meno righe di codice probabilmente. Vale la pena notare in questa sede come di database ne esistano davvero un quantità enorme. Come per la questione framework, anche qui ogni db è ottimale per certi scopi. Qui diciamo intanto di due macro categorie: database SQL (leggi siquel ) e NO SQL (leggi no siquel). I database SQL sono orientati alle relazioni dei dati, garantendo l’integrità di tali relazioni. La loro forma logica di fondo è la classica tabella con righe e colonne. I database NO-SQL sono focalizzati sul dato più che la relazione e immagazzinano le informazioni sotto forme diverse, più simili a BLOB o file di diverse nature.
- MySQL
- PostgreSQL
- Maria
- Microsoft SQL Server
- IBM DB2
- Oracle
- SQLite
Quelli NoSQL
- Mongo DB
- Fire DB
I primi storici database open source MySQL e PostGRE, detengono fette di mercato decisamente interessanti.
Il modello MVC
L’architettura logica a tre strati, si realizza in via software ed è facilmente implementabile anche sui banchi di scuola, dove si studia in modo approfondito il PHP con SQL, spesso su database MySQL, con spunti di HTML e CSS più o meno approfonditi. In realtà spesso su stesso file/script andiamo a realizzare una query al db, ne frulliamo il risultato e creiamo in automatico una pagina html/css/js che visualizza il contenuto per il client. In realtà questo modo di sviluppare è proficuo per piccole applicazioni, per lo più gestite da uno sviluppatore singolo che si occupa della programmazione detta full-stack, ovvero l’interfaccia grafica per l’utente finale detta front-end, la parte di back-end che comprende la realizzazione delle dinamiche di programmazione e gestione della basi di dati. Applicativi complessi, realizzati anche da aziende di grande dimensioni, come Facebook, Twitter, Spotify ecc, non posso no essere sviluppate in modo “unico”, con script individuali per ogni pagina, data la mole di codice e di vari flussi e tecnologie che ci sono dietro dati ed interfacce. Ecco perché è preferibile suddividere le responsabilità in tre macro-gruppi detto pattern MVC: View, Control, Model.
- Model: contiene i metodi di accesso ai dati, per lo più le classiche query SQL, ma anche altri strumenti come XML o JSON
- View: si occupa di visualizzare il risultato dell’elaborazione dei dati all’utente, gestendo l’interazione fra quest’ultimo e l’infrastruttura sottostante. E’ il nostro strato HTML/CSS
- Controller: riceve i comandi dell’utente attraverso il View e reagisce eseguendo delle operazioni che possono interessare il Model e che portano generalmente ad un cambiamento di stato del View rielaborando i dati già presenti. E’ la vera e propria programmazione PHP.
Ognuno di questi ambiti è spesso fonte di specializzazione per il singolo sviluppatore che quindi cura talvolta la progettazione, realizzazione, test di una sola porzione del software concentrando energie e competenze solo su tale parte. In un ipotetico framework mvc no nesiste più la singola pagina script articolo.php o alunno.php che visualizza i dati delle due categorie ma esisterà un file index che smista le chiamate GET ad articolo piuttosto che alunno che verranno prese in carico da uno script control che dialogherà con uno script model che reperisce i dati e un oscript view che generà la visualizzazione dei dati frullati dal control.
I framework orientati a MVC
Realizzare da zero la suddivisione ideale del pattern MVC è fattibile ma non proprio banale. In soccorso degli sviluppatori esistono però dei framework, delle piattaforme preconfezionate che si installano in modo semplice e che contengono, anche fisicamente nelle proprie cartelle, gli spazi dove inserire il codice dei tre ambiti. Fornisce agli sviluppatori degli strumenti più o meno semplici e versatili per interoperare con gli altri ambiti, funzioni che semplificano determinate procedure o frammenti di codice che vengono usati e ripetuti più spesso, semplificano e di molto la realizzazione di interfacce grafiche “modulari”. Qui si apre un mondo: di framework con questi propositi ne esistono centinaia, ognuno con delle peculiarità, delle performance, dei pregi e difetti che lo rendono appetibile per realizzare determinati software o perché scelto da una azienda piuttosto che un’altra. Studiarli tutti è impossibile. A noi diciamo basta conoscere un po’ il mondo che c’è dietro, imparare le base con un buon linguaggio di scripting per essere poi pronti ad adeguarsi e studiare il framework che ci richiederà l’azienda o la situazione singola.
Alcuni esempi per PHP:
- Laravel
- Symfony
- Yii 2
- CakePHP
- CodeIgniter
- Zend Framework ora Laminas
- Phalcon
- Slim Framework
- FuelPHP
- PHPPixie
Senza commentare nello specifico: Laravel è sicuramente quello più in voga mentre scriviamo questo articolo. Ha una serie di integrazioni e perfomance allettanti ma non proprio semplice come primo inizio. I corsi professionali Laravel sono molto gettonati professionalmente e anche costosi ma con un ritorno a livello lavorativo sicuro. Symphony è molto utilizzato nella pubblica amministrazione italiana, leggermente più semplice. Yii2 è tra i più longevi framework e vanta un discreto uso di ajax integrato. CakePHP e Codigniter sono decisamente meno grandi dei precedenti ma più semplici da utilizzare soprattutto per progetti piccoli dove è necessaria una rapida curva di sviluppo con pochi fronzoli, ottima community con tante funzioni gratis da riutilizzare. Zend è uno degli storici, grandi performance e una ottima community dietro, non ultimo il mio preferito da sempre. Gli altri della lista sono framework più piccoli ma ugualmente interessanti, meno funzionalità ma anche meno complessità.
Di linguaggi lato web ne esistono altri e Python lato server non è da meno. anche se forse meno interessante perché ancora poco utilizzato in ambito lavorativo.
- Django
- CherryPy
- Flask
- Pyramid
- Tornado
Il mondo Java ha anche i suoi framework:
- Spring
- JSF
- Struts
- Hybernate
Dire quale sia il migliore, ribadiamo, è impossibile. A seconda del linguaggio scelto, i framework hanno le loro caratteristiche salienti. Il lettore curioso può trovare decine di articoli che li comparano con le caratteristiche migliori e peggiori. Noi qui ci sentiamo di suggerire i framework PHP
I framework front-end
A complicarci un po’ la trattazione, aggiungiamo che, come esistono framewrok per semplificarci la scrittura del codice lato server, esistono framework per semplificare e scrivere meno codice HTML nel lato View del nostro modello MVC. Il re indiscusso di questi framework è sicuramente Bootstrap, un insieme di classi preconfezionate, stili, griglie, posizioni, widget che ci permettono di creare con poco sforzo pagine web anche complesse completamente responsive e a prova di WCAG e le regole di accessibilità. Esistono altri esempi simili come
- Fundation
- Bulma
- UIKit
- Semantic UI
- Pure.CSS
- Materialize
Il discorso vale sempre lo stesso: ognuno ha delle peculiarità che lo rendono interessante per un uso specifico piuttosto che un altro e ogni sviluppatore ha il suo preferito con tanto codice già scritto da riutilizzare.
Si stanno poi imponendo in modo prorompente le interfacce basate su componenti, basate su framework Javascript o Typescript come Angular e React, rispettivamente gestite da Facebbok e Google. Sono framework molto complessi, difficili da affrontare sui banchi di scuola come anche il loro fratellino minore VUE.JS, sempre in Javascript. Sono framework che però permettono di gestiresiti web di una complessità enorme in modo strutturato ed ordinato.
Ultima modifica 8 Novembre 2022