Phoenix (web framework)
# Phoenix (web framework)

Phoenix è un web framework scritto nel linguaggio di programmazione funzionale Elixir. Phoenix utilizza un modello MVC (Model-View-Controller) lato server.

Basato principalmente sulla libreria Plug e, infine, sul framework Cowboy di Erlang, è stato sviluppato per fornire applicazioni Web altamente performanti e scalabili.

Oltre alla funzionalità di request/response fornita dal server Cowboy sottostante, Phoenix fornisce una comunicazione soft in tempo reale ai client esterni tramite WebSocket o polling lungo utilizzando la sua funzione di canali indipendenti dalla lingua.

Phoenix è arrivato alla versione 1.0 nell'agosto del 2015.

## Descrizione

Phoenix è nato da una collaborazione tra Jose Valim e Chris McCord, entrambi ex core contributor dei codici sorgenti di Ruby e Ruby on Rails.

Phoenix è una applicazione che si basa sull'ecosistema Elixir, che gira sulla BEAM VM. Come Rails, Phoenix non ha un pannello di amministrazione, al compenso di Django, ma il suo punto di forza risiede in applicazioni soft realtime e l'utilizzo dei Websocket. Grazie alla BEAM VM e a Elixir, Phoenix è in grado di servire fino a 2.000.000 di connessioni Websocket contemporaneamente. Essendo Phoenix un progetto abbastanza recente, sfrutta già tecnologie viste in altri web framework, per citarne alcune:

* astrazione del database relazionale sfruttando la libreria Ecto;
* possibilità di installare funzionalità attraverso librerie esterne scritte in Elixir o Erlang;
* robusta API per la gestione del database;
* sistema di "view generiche" che evitano la stesura di codice ripetitivo per determinati casi comuni;
* gestore di URL basate su espressioni regolari;
* protezione CSRF e supporto per la sessione;
* supporto per localizzazione attraverso la libreria Gettext;
* inclusa documentazione accessibile attraverso Hex.pm;
* sistema per la creazione e la validazione di form HTML.

Come in Rails, Phoenix non viene fornito ad oggi con un sistema di autenticazione dell'utente, ma può essere sfruttato librerie come Pow. È in discussione l'implementazione di una libreria nativa per l'autenticazione.

Con la versione 1.5 è stata pubblicata Phoenix LiveView, una tecnologia che permette di realizzare applicazioni soft-realtime lato server. Sfrutta un meccanismo di connessione costante al server attraverso i Websocket per renderizzare ed aggiornare il contenuto lato client. A differenza di altri meccanismi di aggiornamento on-the-wire, Phoenix aggiorna il minimo indispensabile del contenuto HTML e non l'intera pagina o porzioni maggiori. Questo è reso possibile grazie al fatto che i templates, in Phoenix, sono delle funzioni sotto forma di HTML e non file HTML come in altri sistemi.

