Come funziona Symfony | Aulab

GUIDE PER ASPIRANTI PROGRAMMATORI

Come funziona Symfony

Comprendere come una richiesta effettuata da un utente sul web viene elaborata dal framework Symfony è fondamentale per poterlo utilizzare efficacemente. Per un programmatore, questa conoscenza può fare la differenza tra scrivere codice che è solo funzionale e codice che è sia efficiente che scalabile.  Prima di procedere con la spiegazione del flusso generico di…

Lezione 4 / 33
Enza Neri
Immagine di copertina

Vuoi avviare una nuova carriera o fare un upgrade?

Trova il corso Digital & Tech più adatto a te nel nostro catalogo!

Comprendere come una richiesta effettuata da un utente sul web viene elaborata dal framework Symfony è fondamentale per poterlo utilizzare efficacemente. Per un programmatore, questa conoscenza può fare la differenza tra scrivere codice che è solo funzionale e codice che è sia efficiente che scalabile. 

Prima di procedere con la spiegazione del flusso generico di una richiesta in Symfony, è necessario conoscere uno dei concetti fondamentali dell o sviluppo web ovvero HTTP.

Cos’è il protocollo HTTP

META DESCRIPTION: Impara i fondamenti del protocollo HTTP e la sua funzione cruciale nel web

HyperText Transfer Protocol (HTTP) è un protocollo di comunicazione stateless di livello applicativo utilizzato come fondamenta per qualsiasi distribuzione di informazioni sul World Wide Web. Nato come semplice protocollo per il trasferimento di file ipertestuali (file HTML), HTTP si è evoluto nel tempo per sostenere una sempre più vasta gamma di operazioni di comunicazione e media. Esso può essere visto non solo come un protocollo, ma anche come un modello completo per l’architettura di applicazioni web.

Al cuore di HTTP vi è il modello di interazione richiesta-risposta tra client e server. Le richieste possono assumere diverse forme, chiamate “metodi”, come ad esempio GET, POST, PUT, DELETE. Ogni metodo rappresenta un tipo di operazione desiderata sulle risorse web alle quali il client è interessato. L’uso del metodo GET è associato al recupero di una risorsa, mentre POST è utilizzato per crearne una nuova. PUT e PATCH vengono impiegati per aggiornare una risorsa esistente e DELETE per rimuoverla. Questo uso semantico aiuta a mantenere un’architettura pulita e comprensibile.

Possiamo, dunque, dire che HTTP è più di un semplice protocollo per il trasferimento di dati. Esso è un ecosistema che supporta la complessità e la varietà delle moderne applicazioni web. La comprensione di tale protocollo è quindi essenziale per poter sviluppare applicazioni in ambito web. 

Riassumiamo le sue caratteristiche principali:

  • Stateless: Ogni richiesta da parte del client al server è indipendente, il server non mantiene nessuna informazione sullo stato tra richieste successive. 
  • Semplice: HTTP è facile da implementare e da usare. I messaggi sono in formato testuale e leggibili dall’uomo, rendendo semplice il debug.
  • Estensibile: è possibile aggiungere nuovi header e metodi a piacere, il che significa che il protocollo può essere esteso per supportare nuove funzionalità.
  • Connectionless: Una volta che una richiesta è conclusa, la connessione tra il client e il server viene chiusa. Tuttavia, HTTP/1.1 introduce la possibilità “keep-alive”, ovvero di non terminare la connessione in automatico, per migliorare l’efficienza.
  • Supporta diverse modalità di trasferimento: HTTP supporta il trasferimento di dati in vari modi come ad esempio multipart (per invio di allegati) e chunked (per trasferimenti in cui la risorsa viene suddivisa in più parti).

Analizziamo ora, ad alto livello, il flusso e lo scambio di messaggi tra client e server attraverso HTTP:

    1. Inizializzazione: il client, ad esempio un browser web, istanzia una connessione TCP/IP con il server web desiderato su una specifica porta, solitamente la porta 80 per HTTP e la 443 per HTTPS.
    2. Richiesta del Client: una volta stabilita la connessione, il client invia una richiesta HTTP al server. Un esempio di richiesta può essere la seguente:
       GET /index.php HTTP/1.1
          Host: www.example.com
    3. Elaborazione del Server: il server riceve la richiesta, la analizza e la elabora. Se la risorsa richiesta è disponibile, il server la prepara per l’invio, altrimenti, restituisce un codice di errore.
    4. Risposta del Server: Il server invia una risposta al client, che può essere la risorsa richiesta (come una pagina HTML) o un messaggio di errore. Un esempio di risposta può essere la seguente:
        HTTP/1.1 200 OK
          Content-Type: text/html
          <HTML>
          ...
          </HTML>
    5. Chiusura della Connessione: una volta ricevuta la risposta, la connessione viene chiusa, a meno che non sia stata specificata l’opzione “keep-alive”.
    6. Rendering del Browser: il browser renderizza la pagina utilizzando le informazioni ricevute, che possono includere anche ulteriori richieste per risorse come immagini, fogli di stile CSS e script JavaScript.

La comprensione del flusso dei messaggi e delle caratteristiche base di HTTP è fondamentale per qualsiasi sviluppatore che desidera capire le interazioni all’interno del web. Con questa base, è possibile spostarsi verso argomenti più avanzati come la gestione della sicurezza, l’ottimizzazione delle prestazioni e l’interazione con API RESTful.

Il flusso di una richiesta in Symfony

Nel nostro caso, possiamo procedere nell’analizzare il percorso di una richiesta in Symfony. In basso è schematizzato tale flusso.

flusso richiesta symfony

  1. Ricezione della Richiesta: tutto inizia quando il server web riceve una richiesta HTTP da un client (tipicamente un browser). Nello schema è rappresentato dal nodo HTTP Server. Il web server inoltra la richiesta al layer PHP sottostante. Symfony utilizza un componente chiamato HttpFoundation per semplificare l’interazione con le richieste e risposte HTTP.
  2. Front Controller e Kernel: la prima tappa nel framework è il “Front Controller”, solitamente un file chiamato index.php. Questo file avvia il “Kernel” ovvero il nucleo dell’applicazione. Il Kernel è responsabile della gestione della richiesta e del ritorno della relativa risposta.
  3. Routing: Una volta che il Kernel è attivo, la richiesta passa attraverso il sistema di routing. Il router confronta l’URL della richiesta con l’insieme dei percorsi che sono stati censiti all’interno del file di configurazione di routing. Una volta individuato il percorso corretto, il router determina quale Controller e quale metodo di tale Controller deve essere invocato.
  4. Controller e Azione: nella fase successiva a quella di routing, il Kernel chiama il Controller designato e il relativo metodo (spesso chiamato “Azione“). Un controller è essenzialmente una classe PHP che contiene la logica di business per gestire una particolare richiesta. La funzione del Controller è quella di preparare i dati necessari per la vista e poi restituire una risposta, solitamente tramite un template.
  5. Model e Database: all’interno del Controller, spesso si ha la necessità di accedere ai dati presenti sul database per recuperare ed elaborare le informazioni richieste. Qui entra in gioco il “Model”. Utilizzando il componente ORM (Object-Relational Mapping) di Symfony, chiamato Doctrine, è possibile interagire con il database in modo molto più intuitivo, lavorando con oggetti ed eseguendo query tramite metodi specifici piuttosto che eseguire query SQL “raw”.
  6. Creazione della Risposta: a questo punto, il Controller ha elaborato i dati ed eseguito la logica di business necessaria, pertanto si può procedere con la generazione di una “Risposta”. Questa può essere una pagina HTML, un file JSON, un media o qualsiasi altro tipo di contenuto web.
  7. Invio della Risposta: infine, la risposta viene inviata al client attraverso il server web. Da qui, il browser del client elabora la risposta e la fa visualizzare all’utente.

Comprendere il flusso di una richiesta attraverso Symfony ci permette di scrivere codice più pulito e manutenibile. Inoltre, ci permette di risolvere eventuali bug più efficacemente avendo una visione completa dei componenti in gioco e delle interazioni tra di essi.

Sei indeciso sul percorso? 💭

Parliamone! Scrivici su Whatsapp e risponderemo a tutte le tue domande per capire quale dei nostri corsi è il più adatto alle tue esigenze.

Oppure chiamaci al 800 128 626