Può lo sviluppo di REST API con PHP può diventare un'esperienza davvero gradevole?
Cos'è Laravel, la filosofia che il progetto porta avanti e come costruire API REST complete con uno dei framework più usati negli ultimi anni.
2. (Have a) REST
with Laravel… 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
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)
8. … 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.
10. 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!
11. C’è bisogno di…
● Potenza.
● Espressività.
Nel frattempo, da qualche altra parte...
13. 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.
15. 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à.
22. 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;
23. 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);
25. 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!
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;
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
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;
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 conviene usare 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
39. … non è vero.
“Non esistono pessimi linguaggi di
programmazione. Solo pessimi sviluppatori.”
40. 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.
42. 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;
44. 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;
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)
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
47. … 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);