“The PHP Framework For Web Artisans”
In TangoDev ci occupiamo sia di sviluppo di app mobile che di applicazioni web. Sin dall’avvio della nostra attività siamo stati alla ricerca di un framework web che si adattasse alle nostre esigenze e che allo stesso tempo ci mettesse a disposizione in maniera semplice tutte le funzionalità “base” che vanno sviluppate per qualsiasi tipo di applicazione web. La risposta per noi è stata una sola: Laravel.
Abbiamo ormai adottato Laravel da molto tempo e utilizzato per i progetti più diversi, il risultato è sempre eccellente.
Se dovessi scegliere un aggettivo per Laravel direi…poliedrico!
Con Laravel è possibile creare una applicazione web completamente custom, creare un backend di sole API oppure tutte e due le cose insieme, amazing!
Il pregio di Laravel è che mette le basi per gestire gli aspetti più comuni di qualsiasi applicazione web: le rotte delle pagine web o delle API, le basi per l’autenticazione, le basi per la gestione della persistenza, l’invio di notifiche e molto altro… ma allo stesso tempo lascia il massimo del controllo e della flessibilità. Il tutto poi con un occhio sempre alla sicurezza, in quanto Laravel di default offre:
- Protezione da SQL Injection
- Protezione da CSRF
- Protezione da XSS
- Rate Limit automatico sulle API
- Criptazione dei cookie
- ecc…
A supporto di quanto detto finora vi voglio raccontare alcune esperienze specifiche che abbiamo affrontato con Laravel. Pronti? Via!
Criptazione per GDPR
Abbiamo sviluppato un portale in cui vengono salvati dei dati sensibili degli utenti, per essere compliant con il GDPR abbiamo dovuto implementare la criptazione di tutti i dati contenuti nel database.
Il portale sviluppato con Laravel ci ha permesso di realizzare un piccolo modulo custom che si preoccupasse di criptare il dato prima del salvataggio e decriptarlo una volta recuperato dalla persistenza. Il pregio di Laravel in questo caso è stato quello di isolare questa funzionalità in un piccolo modulo che si potesse integrare al 100% con l’ecosistema Laravel di Validazione dei dati, Persistenza, Controller delle rotte, views ecc…
Lo stesso concetto è stato applicato poi ai file che venivano caricati a sistema tramite upload.
Autenticazione web + API (JWT)
In una altra occasione abbiamo realizzato una applicazione web che prevede sia la consultazione da web che l’interazione di soggetti esterni attraverso API.
Laravel ci ha permesso di sviluppare un unico flusso di autenticazione valido sia che l’utente provenisse dalle API che dal web: lato web implementando lo scaffolding proprio di Laravel, lato API utilizzando un tool esterno che implementa lo standard JWT.
Come sempre c’è da sottolineare non solo la comodità, ma la pulizia con cui si può arrivare al risultato che inevitabilmente si tramuta in una manutenibilità del software decisamente migliore.
Procedure batch con code di esecuzione
Ancora una volta siamo di fronte ad un aspetto che potrebbe essere un po’ complicato che viene fornito al developer in modo semplice, pulito e customizzabile.
All’interno di un progetto Laravel si possono definire alcune procedure batch e schedularle con la frequenza desiderata.
Allo stesso modo si possono definire dei task asincroni, come ad esempio l’invio di email o il parsing di file, inserirli in code di esecuzione così da demandare l’elaborazione pesante ad un processo in background senza che l’utente debba aspettare l’esito dell’operazione.
Tramite la CLI di Laravel (di cui parleremo tra poco) è possibile poi controllare lo stato dei vari task ed eventualmente lanciarne manualmente l’esecuzione.
Rilascio automatizzato tramite pipeline
In uno dei nostri ultimi progetti abbiamo realizzato una procedura di rilascio automatico di una applicazione Laravel tramite le pipeline di Bitbucket (ma il concetto è applicabile anche a Gitlab ecc…).
Il concetto è molto semplice: ad ogni push su un determinato brach viene eseguita in automatico una procedura in un container Docker. Questa procedura ha il compito di:
- Eseguire la build della applicazione
- Eseguire i test
- Rilasciare la build nell’ambiente di esecuzione (staging o production)
Laravel fornisce una CLI (php artisan) molto completa che permette di effettuare le più svariate operazioni sulla propria applicazione tramite riga di comando. E’ anche possibile aggiungere i propri comandi personalizzati!
Grazie alla CLI di Laravel siamo riusciti a realizzare una procedura semplice ed efficace, che ci garantisce, tra le altre cose:
- l’attivazione della maintenance mode prima di qualsiasi operazione sull’applicazione in esecuzione
- il backup automatico dei dati prima di qualsiasi operazione sul database
- l’esecuzione automatica delle migrazioni sul db
- l’installazione automatica di tutte le dependencies
- l’ottimizzazione dei classloader
- il clean e il warm up di tutte le cache
- la riduzione del tempo di downtime dell’applicazione durante l’aggiornamento
Integrazione con servizi esterni: backup, notifiche push, slack…
Esistono moltissimi moduli esterni che permettono agli sviluppatori di integrare la propria applicazione Laravel con dei servizi esterni. Nelle nostre esperienze recenti abbiamo integrato:
- Amazon S3 per la gestione dei backup periodici
- Amazon Elastic Transcoder per la transcodifica di file multimediali
- OneSignal per l’invio di notifiche push
- Slack per l’invio di notifiche
LaravelDay
Ogni anno a Verona si tiene il LaravelDay (http://laravelday.it), manifestazione dedicata completamente al framework php con vari talk e interventi di diverse aziende e sviluppatori.
Partecipiamo già da alcune edizioni: per noi è la giusta occasione per confrontare il nostro lavoro e il nostro approccio con le soluzioni trovate dagli altri developers.
In conclusione
Come tutti gli sviluppatori di questo mondo quando sentiamo parlare di PHP tendiamo a storcere il naso. La verità è che lavorando con Laravel abbiamo dovuto ricrederci: siamo riusciti a realizzare applicazioni sicure, performanti e altamente manutenibili ed ora è diventato la nostra scelta principale quando si tratta di realizzare applicazioni web.
State valutando l’implementazione di una applicazione web con Laravel? Contattateci attraverso il nostro sito tangodev.it!
PS: alcune immagini sono fornite da https://www.flaticon.com/ 🙂