(Have a) REST
with Laravel… o come costruire
REST APIs con Laravel
5.x
Francesco Malatesta - 22 Febbraio 2017
Chi Sono?
Francesco Malatesta
Developer @ AdEspresso (adesso parte della famiglia Hootsuite)
Founder @ Laravel-Italia
Author @ Sitepoint
Author/Translator @ Packt Publishing / Leanpub$profiles = [
‘github’ => ‘francescomalatesta’,
‘twitter’ => ‘@malatestafra’,
‘facebook’ => ‘malatesta.francesco’
];
Cos’è Laravel?
Framework PHP
il più semplice da usare in circolazione;
tanto materiale per l’apprendimento:
ottima documentazione, Laracasts;
libri: (O’Reilly “Laravel Up and Running”, traduzioni in tutte le lingue);
crescita pazzesca negli ultimi 5 anni:
19.320.041 installazioni (~33k al giorno) (fonte: packagist);
54860 domande su Stackoverflow (~100 al giorno)
Parte I
“Indietro nel Tempo”
Questo è
Francesco nel
2012
(sta lavorando ad un CMS PHP
con CodeIgniter, tutto sembra
andare bene, ma...)
PHP è Brutto.
strchr();
strstr(); strtok();
untaint();
mhash_keygen_s2k();
eregi();
uasort();
uksort(); arsort();
vsprintf();
ereg();
posix_mkfifo();
lang_lock(); flag_rate();
… ok, queste due non sono PHP. Quasi.
lang_lock();
http://harrypotter.wikia.com/wiki/Langlock
flag_rate();
http://harrypotter.wikia.com/wiki/Flagrate
Gif: Flagrate in azione.
“Quindi… quello non era PHP…”
I Framework sono ancora deboli, e brutti...
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['debug'] = TRUE;
$this->ftp->connect($config);
… ed anche questa slide non scherza!
C’è bisogno di…
● Potenza.
● Espressività.
Nel frattempo, da qualche altra parte...
Symfony
Dicembre 2011 - Symfony 2.0.7 su Packagist
Cosa porta Symfony nel mondo PHP?
Buone pratiche in un linguaggio che prima
quasi non ne conosceva;
Il concetto di Service Container;
Permette agli sviluppatori di crescere meglio,
visto che hanno a che fare con uno
strumento più sofisticato;
Potenza.
Laravel!
2012 - Laravel 3
2013 - Laravel 4 (su Packagist)
Cosa porta Laravel nel mondo PHP?
Semplifica usando come base alcuni
componenti di Symfony;
Rende lo sviluppo di applicazioni (anche
complesse) alla portata di tutti;
Sistema di componenti driver based, utili per
scalare;
Semplifica la sintassi, introducendo (ma senza
sacrificare la potenza)...
Espressività.
Espressività
Storage::disk('s3')->put('avatars/1', Storage::disk('local')->get('avatar.png'));
Espressività #2
if (Auth::attempt(['email' => $email, 'password' => $password])) {
return redirect()->intended('dashboard');
}
Espressività #3
$value = Cache::remember('user', $minutes, function () {
return DB::table('users')->find(1);
});
Parte 2
“Laravel… nel 2017”
19.320.041
~33k Installazioni / giorno
Un Solido Processo di Release
Ogni due anni viene rilasciata una nuova LTS;
La LTS attuale è la 5.1;
La prossima LTS sarà la 5.5, prevista per Luglio/Agosto 2017;
Ogni LTS conta 2 anni di bug fix, 3 anni di security update;
Ogni versione intermedia conta 6 mesi di bug fix, 1 anno di security update;
Il processo di upgrade è migliorato rispetto al passato;
Laravel sta Crescendo
Laravel 4.X dipendeva da più componenti di Symfony;
In Laravel 5.X, molti di questi componenti sono stati riscritti da zero, per
migliorare le performance dove possibile;
Occhio attento al frontend (supporto per Webpack in 5.4);
Nuovi componenti aggiunti nelle ultime versioni:
Cashier (gestione di pagamenti);
Passport (creazione di un server OAuth 2.0);
“Ok, ma… alla fine, chi lo usa, questo Laravel?”
Startup
perché è molto comodo per creare al volo un MVP, in modo da poter validare
velocemente un’idea di business;
PMI
perché può offrire il giusto compromesso tra potenza ed facilità d’uso, adatto
a creare applicazioni;
Enterprise
può essere tranquillamente usato in applicazioni molto più grandi, affiancato
… un po’ tutti!
Caso 1 - Startup - Netlex
Software gestionale per studi legali;
Sviluppato e venduto come Software as a Service;
Recentemente, exit con TeamSystem;
Nessun problema in termini di performance;
Caso 2 - PMI - Fater S.p.A.
Software per la gestione dei siti aziendali;
Pampers;
Tampax;
Lines;
ACE;
Più di un milione di iscritti;
Caso 3 - Enterprise - Ericsson
Sistema di Gestione Documentale;
Affiancato a:
Elasticsearch;
Microservizi;
Nessun problema in termini di performance;
Parte 3
“Debunking Time!”
Bugia N.1
“Le Facade di Laravel usano metodi statici,
non è codice pulito!”
… non è vero.
non è un vero metodo statico, ma __callStatic();
viene usata un’istanza corrispondente, presente nel Service Container;
non è obbligatorio usare le Facade: per ognuna esiste la controparte “istanziabile”
ed usabile in modo ancora più pulito
Cache => IlluminateCacheRepository
File => IlluminateFilesystemFilesystem
Log => IlluminateLogWriter
Mail => IlluminateMailMailer
Bugia N.2
“Laravel favorisce un ecosistema chiuso.”
… non è vero.
Forge permette:
Provision di server su vari provider (DigitalOcean, AWS, Custom);
Deploy di applicazioni di diverso tipo (Laravel, Lumen, Symfony, Static HTML);
Envoyer permette:
Deploy automatici di svariati tipi di applicazione (Laravel, Altro);
Dopo il deploy, health check ed altre feature sono uguali per tutti;
Bugia N.3
“Laravel è scritto con componenti Symfony, conviene
usare Symfony!”
… non è vero.
Laravel dipendeva molto dai Symfony Component nella versione 4.X;
Dalla versione 5.0 in poi molti componenti sono stati riscritti da zero, per
migliorare le performance dove necessario;
Symfony Components != Symfony Framework
Symfony Framework, come Laravel, è costruito sui Symfony Component;
Symfony Framework e Laravel presentano svariate differenze;
Conoscendone uno, è più semplice lavorare l’altro;
Bugia N.4
“Non conviene usare un framework come Laravel,
crei un monolite su cui domani dovrai
rimettere le mani.”
… non è vero.
In caso di applicazioni in fase di partenza:
raramente si ha la possibilità (ed i mezzi) per creare da subito un sistema ad-hoc;
se il monolite non è scritto male, si possono scorporare alcune parti critiche in microservizi in un
secondo momento senza problemi;
In caso di applicazioni più grandi:
Parti critiche delegate a microservice ad-hoc;
Laravel continua a gestire altri aspetti, su cui è più semplice lavorare;
Fare over-engineering durante il bootstrap di un progetto non è una garanzia di
Bugia N.5
“Laravel non incoraggia le buone pratiche nello
sviluppo software.”
… non è vero.
“Non esistono pessimi linguaggi di
programmazione. Solo pessimi sviluppatori.”
LCB = Luoghi Comuni Buoni
Il proiettile d’argento non esiste.
Un framework è uno strumento, ha pro e
contro, risolve alcune problematiche e ne
presenta altre. Accettalo.
Tutto dipende dalle necessità di business.
Parte 4
“Have a REST”
Cosa significa costruire API REST?
Sta per REpresentational State Transfer;
Prevede un’interfaccia uniforme
set di operazioni ben definite;
set di risposte ben definite;
Prevedere l’assenza di uno stato;
Yes, but...
Costruire REST API significa...
Fare in modo che l’applicazione che noi scriviamo
Gestisca correttamente le richieste in entrata;
Gestisca correttamente le risposte in uscita;
Aderisca a determinati standard e convenzioni;
Non sappiamo che applicazione ci si dovrà interfacciare;
Si, perché:
Laravel è un framework per lo sviluppo di web app;
Ci sono svariati package che facilitano il compito;
Dopotutto, non sarei qui se non fosse possibile;
I Package
DingoAPI (https://github.com/dingo/api)
aiuta ad implementare la content negotiation;
agevola il versioning delle API;
permette implementare il rate limit (e tanto altro);
JWT-Auth (https://github.com/tymondesigns/jwt-auth)
implementa un sistema di auth stateless, basato su token;
già pronto ad essere usato con DingoAPI
… per i più pigri:
github.com/francescomalatesta/laravel-api-boilerplate-jwt
boilerplate già pronto ad essere usato;
permette di generare al volo tutta l’infrastruttura;
sistema di auth (con relativi controller) già pronto;
aggiornato a Laravel 5.3 (a giorni 5.4);
Domande?
… grazie :)

(Have a) rest with Laravel

  • 2.
    (Have a) REST withLaravel… o come costruire REST APIs con Laravel 5.x Francesco Malatesta - 22 Febbraio 2017
  • 3.
    Chi Sono? Francesco Malatesta Developer@ AdEspresso (adesso parte della famiglia Hootsuite) Founder @ Laravel-Italia Author @ Sitepoint Author/Translator @ Packt Publishing / Leanpub$profiles = [ ‘github’ => ‘francescomalatesta’, ‘twitter’ => ‘@malatestafra’, ‘facebook’ => ‘malatesta.francesco’ ];
  • 4.
    Cos’è Laravel? Framework PHP ilpiù semplice da usare in circolazione; tanto materiale per l’apprendimento: ottima documentazione, Laracasts; libri: (O’Reilly “Laravel Up and Running”, traduzioni in tutte le lingue); crescita pazzesca negli ultimi 5 anni: 19.320.041 installazioni (~33k al giorno) (fonte: packagist); 54860 domande su Stackoverflow (~100 al giorno)
  • 5.
  • 6.
    Questo è Francesco nel 2012 (stalavorando ad un CMS PHP con CodeIgniter, tutto sembra andare bene, ma...)
  • 7.
    PHP è Brutto. strchr(); strstr();strtok(); untaint(); mhash_keygen_s2k(); eregi(); uasort(); uksort(); arsort(); vsprintf(); ereg(); posix_mkfifo(); lang_lock(); flag_rate();
  • 8.
    … ok, questedue non sono PHP. Quasi. lang_lock(); http://harrypotter.wikia.com/wiki/Langlock flag_rate(); http://harrypotter.wikia.com/wiki/Flagrate Gif: Flagrate in azione.
  • 9.
  • 10.
    I Framework sonoancora deboli, e brutti... $this->load->library('ftp'); $config['hostname'] = 'ftp.example.com'; $config['username'] = 'your-username'; $config['password'] = 'your-password'; $config['debug'] = TRUE; $this->ftp->connect($config); … ed anche questa slide non scherza!
  • 11.
    C’è bisogno di… ●Potenza. ● Espressività. Nel frattempo, da qualche altra parte...
  • 12.
    Symfony Dicembre 2011 -Symfony 2.0.7 su Packagist
  • 13.
    Cosa porta Symfonynel mondo PHP? Buone pratiche in un linguaggio che prima quasi non ne conosceva; Il concetto di Service Container; Permette agli sviluppatori di crescere meglio, visto che hanno a che fare con uno strumento più sofisticato; Potenza.
  • 14.
    Laravel! 2012 - Laravel3 2013 - Laravel 4 (su Packagist)
  • 15.
    Cosa porta Laravelnel mondo PHP? Semplifica usando come base alcuni componenti di Symfony; Rende lo sviluppo di applicazioni (anche complesse) alla portata di tutti; Sistema di componenti driver based, utili per scalare; Semplifica la sintassi, introducendo (ma senza sacrificare la potenza)... Espressività.
  • 16.
  • 17.
    Espressività #2 if (Auth::attempt(['email'=> $email, 'password' => $password])) { return redirect()->intended('dashboard'); }
  • 18.
    Espressività #3 $value =Cache::remember('user', $minutes, function () { return DB::table('users')->find(1); });
  • 20.
  • 21.
  • 22.
    Un Solido Processodi Release Ogni due anni viene rilasciata una nuova LTS; La LTS attuale è la 5.1; La prossima LTS sarà la 5.5, prevista per Luglio/Agosto 2017; Ogni LTS conta 2 anni di bug fix, 3 anni di security update; Ogni versione intermedia conta 6 mesi di bug fix, 1 anno di security update; Il processo di upgrade è migliorato rispetto al passato;
  • 23.
    Laravel sta Crescendo Laravel4.X dipendeva da più componenti di Symfony; In Laravel 5.X, molti di questi componenti sono stati riscritti da zero, per migliorare le performance dove possibile; Occhio attento al frontend (supporto per Webpack in 5.4); Nuovi componenti aggiunti nelle ultime versioni: Cashier (gestione di pagamenti); Passport (creazione di un server OAuth 2.0);
  • 24.
    “Ok, ma… allafine, chi lo usa, questo Laravel?”
  • 25.
    Startup perché è moltocomodo per creare al volo un MVP, in modo da poter validare velocemente un’idea di business; PMI perché può offrire il giusto compromesso tra potenza ed facilità d’uso, adatto a creare applicazioni; Enterprise può essere tranquillamente usato in applicazioni molto più grandi, affiancato … un po’ tutti!
  • 26.
    Caso 1 -Startup - Netlex Software gestionale per studi legali; Sviluppato e venduto come Software as a Service; Recentemente, exit con TeamSystem; Nessun problema in termini di performance;
  • 27.
    Caso 2 -PMI - Fater S.p.A. Software per la gestione dei siti aziendali; Pampers; Tampax; Lines; ACE; Più di un milione di iscritti;
  • 28.
    Caso 3 -Enterprise - Ericsson Sistema di Gestione Documentale; Affiancato a: Elasticsearch; Microservizi; Nessun problema in termini di performance;
  • 29.
  • 30.
    Bugia N.1 “Le Facadedi Laravel usano metodi statici, non è codice pulito!”
  • 31.
    … non èvero. non è un vero metodo statico, ma __callStatic(); viene usata un’istanza corrispondente, presente nel Service Container; non è obbligatorio usare le Facade: per ognuna esiste la controparte “istanziabile” ed usabile in modo ancora più pulito Cache => IlluminateCacheRepository File => IlluminateFilesystemFilesystem Log => IlluminateLogWriter Mail => IlluminateMailMailer
  • 32.
    Bugia N.2 “Laravel favorisceun ecosistema chiuso.”
  • 33.
    … non èvero. Forge permette: Provision di server su vari provider (DigitalOcean, AWS, Custom); Deploy di applicazioni di diverso tipo (Laravel, Lumen, Symfony, Static HTML); Envoyer permette: Deploy automatici di svariati tipi di applicazione (Laravel, Altro); Dopo il deploy, health check ed altre feature sono uguali per tutti;
  • 34.
    Bugia N.3 “Laravel èscritto con componenti Symfony, conviene usare Symfony!”
  • 35.
    … non èvero. Laravel dipendeva molto dai Symfony Component nella versione 4.X; Dalla versione 5.0 in poi molti componenti sono stati riscritti da zero, per migliorare le performance dove necessario; Symfony Components != Symfony Framework Symfony Framework, come Laravel, è costruito sui Symfony Component; Symfony Framework e Laravel presentano svariate differenze; Conoscendone uno, è più semplice lavorare l’altro;
  • 36.
    Bugia N.4 “Non convieneusare un framework come Laravel, crei un monolite su cui domani dovrai rimettere le mani.”
  • 37.
    … non èvero. In caso di applicazioni in fase di partenza: raramente si ha la possibilità (ed i mezzi) per creare da subito un sistema ad-hoc; se il monolite non è scritto male, si possono scorporare alcune parti critiche in microservizi in un secondo momento senza problemi; In caso di applicazioni più grandi: Parti critiche delegate a microservice ad-hoc; Laravel continua a gestire altri aspetti, su cui è più semplice lavorare; Fare over-engineering durante il bootstrap di un progetto non è una garanzia di
  • 38.
    Bugia N.5 “Laravel nonincoraggia le buone pratiche nello sviluppo software.”
  • 39.
    … non èvero. “Non esistono pessimi linguaggi di programmazione. Solo pessimi sviluppatori.”
  • 40.
    LCB = LuoghiComuni Buoni Il proiettile d’argento non esiste. Un framework è uno strumento, ha pro e contro, risolve alcune problematiche e ne presenta altre. Accettalo. Tutto dipende dalle necessità di business.
  • 41.
  • 42.
    Cosa significa costruireAPI REST? Sta per REpresentational State Transfer; Prevede un’interfaccia uniforme set di operazioni ben definite; set di risposte ben definite; Prevedere l’assenza di uno stato;
  • 43.
  • 44.
    Costruire REST APIsignifica... Fare in modo che l’applicazione che noi scriviamo Gestisca correttamente le richieste in entrata; Gestisca correttamente le risposte in uscita; Aderisca a determinati standard e convenzioni; Non sappiamo che applicazione ci si dovrà interfacciare;
  • 45.
    Si, perché: Laravel èun framework per lo sviluppo di web app; Ci sono svariati package che facilitano il compito; Dopotutto, non sarei qui se non fosse possibile;
  • 46.
    I Package DingoAPI (https://github.com/dingo/api) aiutaad implementare la content negotiation; agevola il versioning delle API; permette implementare il rate limit (e tanto altro); JWT-Auth (https://github.com/tymondesigns/jwt-auth) implementa un sistema di auth stateless, basato su token; già pronto ad essere usato con DingoAPI
  • 47.
    … per ipiù pigri: github.com/francescomalatesta/laravel-api-boilerplate-jwt boilerplate già pronto ad essere usato; permette di generare al volo tutta l’infrastruttura; sistema di auth (con relativi controller) già pronto; aggiornato a Laravel 5.3 (a giorni 5.4);
  • 49.
  • 50.