SlideShare una empresa de Scribd logo
1 de 50
Descargar para leer sin conexión
(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 :)

Más contenido relacionado

Destacado

Windows Azure Platform
Windows Azure PlatformWindows Azure Platform
Windows Azure PlatformSoumow Dollon
 
Behavior & Specification Driven Development in PHP - #OpenWest
Behavior & Specification Driven Development in PHP - #OpenWestBehavior & Specification Driven Development in PHP - #OpenWest
Behavior & Specification Driven Development in PHP - #OpenWestJoshua Warren
 
Testing and TDD - Laravel and Express Examples
Testing and TDD - Laravel and Express ExamplesTesting and TDD - Laravel and Express Examples
Testing and TDD - Laravel and Express ExamplesDragos Strugar
 
Dalle Styleguide alla Pattern Libraries: cosa serve e quando
Dalle Styleguide alla Pattern Libraries: cosa serve e quandoDalle Styleguide alla Pattern Libraries: cosa serve e quando
Dalle Styleguide alla Pattern Libraries: cosa serve e quandoextrategy
 
Machine learning in php php con poland
Machine learning in php   php con polandMachine learning in php   php con poland
Machine learning in php php con polandDamien Seguy
 
Machine learning in php
Machine learning in phpMachine learning in php
Machine learning in phpDamien Seguy
 
S3 Overview Presentation
S3 Overview PresentationS3 Overview Presentation
S3 Overview Presentationbcburchn
 
Reactive Laravel - Laravel meetup Groningen
Reactive Laravel - Laravel meetup GroningenReactive Laravel - Laravel meetup Groningen
Reactive Laravel - Laravel meetup GroningenJasper Staats
 
Hunt for dead code
Hunt for dead codeHunt for dead code
Hunt for dead codeDamien Seguy
 
Php 7.2 compliance workshop php benelux
Php 7.2 compliance workshop php beneluxPhp 7.2 compliance workshop php benelux
Php 7.2 compliance workshop php beneluxDamien Seguy
 
php & performance
 php & performance php & performance
php & performancesimon8410
 
Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)Damien Seguy
 
Review unknown code with static analysis - bredaphp
Review unknown code with static analysis - bredaphpReview unknown code with static analysis - bredaphp
Review unknown code with static analysis - bredaphpDamien Seguy
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonightDamien Seguy
 
(SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014
(SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014(SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014
(SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014Amazon Web Services
 

Destacado (20)

PHPSpec BDD for PHP
PHPSpec BDD for PHPPHPSpec BDD for PHP
PHPSpec BDD for PHP
 
P^2 (PaDwa)
P^2 (PaDwa)P^2 (PaDwa)
P^2 (PaDwa)
 
Windows Azure Platform
Windows Azure PlatformWindows Azure Platform
Windows Azure Platform
 
Behavior & Specification Driven Development in PHP - #OpenWest
Behavior & Specification Driven Development in PHP - #OpenWestBehavior & Specification Driven Development in PHP - #OpenWest
Behavior & Specification Driven Development in PHP - #OpenWest
 
Laravel 101
Laravel 101Laravel 101
Laravel 101
 
Testing and TDD - Laravel and Express Examples
Testing and TDD - Laravel and Express ExamplesTesting and TDD - Laravel and Express Examples
Testing and TDD - Laravel and Express Examples
 
Dalle Styleguide alla Pattern Libraries: cosa serve e quando
Dalle Styleguide alla Pattern Libraries: cosa serve e quandoDalle Styleguide alla Pattern Libraries: cosa serve e quando
Dalle Styleguide alla Pattern Libraries: cosa serve e quando
 
Laravel and SOLR
Laravel and SOLRLaravel and SOLR
Laravel and SOLR
 
Machine learning in php php con poland
Machine learning in php   php con polandMachine learning in php   php con poland
Machine learning in php php con poland
 
Machine learning in php
Machine learning in phpMachine learning in php
Machine learning in php
 
S3 Overview Presentation
S3 Overview PresentationS3 Overview Presentation
S3 Overview Presentation
 
Reactive Laravel - Laravel meetup Groningen
Reactive Laravel - Laravel meetup GroningenReactive Laravel - Laravel meetup Groningen
Reactive Laravel - Laravel meetup Groningen
 
Functional programming with php7
Functional programming with php7Functional programming with php7
Functional programming with php7
 
Hunt for dead code
Hunt for dead codeHunt for dead code
Hunt for dead code
 
Php 7.2 compliance workshop php benelux
Php 7.2 compliance workshop php beneluxPhp 7.2 compliance workshop php benelux
Php 7.2 compliance workshop php benelux
 
php & performance
 php & performance php & performance
php & performance
 
Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)
 
Review unknown code with static analysis - bredaphp
Review unknown code with static analysis - bredaphpReview unknown code with static analysis - bredaphp
Review unknown code with static analysis - bredaphp
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonight
 
(SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014
(SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014(SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014
(SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014
 

Similar a (Have a) rest with Laravel

Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...Codemotion
 
Working between the clouds (versione completa)
Working between the clouds (versione completa)Working between the clouds (versione completa)
Working between the clouds (versione completa)Davide Cerbo
 
Introduzione DevOps con Ansible
Introduzione DevOps con AnsibleIntroduzione DevOps con Ansible
Introduzione DevOps con AnsibleMatteo Magni
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On RailsLuca Mearelli
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni webAndrea Lazzarotto
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the cloudsDavide Cerbo
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsIgor Antonacci
 
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Perché è così difficile il deploy dei database  - DevCast DevOps SeriePerché è così difficile il deploy dei database  - DevCast DevOps Serie
Perché è così difficile il deploy dei database - DevCast DevOps SerieGiulio Vian
 
DbUp - A real case of database migration
DbUp - A real case of database migrationDbUp - A real case of database migration
DbUp - A real case of database migrationAndrea Cirioni
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Codemotion
 
Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Filippo Matteo Riggio
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsAlberto Brandolini
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Gian Maria Ricci
 

Similar a (Have a) rest with Laravel (20)

Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
 
Working between the clouds (versione completa)
Working between the clouds (versione completa)Working between the clouds (versione completa)
Working between the clouds (versione completa)
 
Introduzione DevOps con Ansible
Introduzione DevOps con AnsibleIntroduzione DevOps con Ansible
Introduzione DevOps con Ansible
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On Rails
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the clouds
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
 
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Perché è così difficile il deploy dei database  - DevCast DevOps SeriePerché è così difficile il deploy dei database  - DevCast DevOps Serie
Perché è così difficile il deploy dei database - DevCast DevOps Serie
 
DbUp - A real case of database migration
DbUp - A real case of database migrationDbUp - A real case of database migration
DbUp - A real case of database migration
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
 
TTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug romaTTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug roma
 
Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con Grails
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 

Más de Commit University

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdfBreaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdfCommit University
 
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdfAccelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdfCommit University
 
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...Commit University
 
Commit - Qwik il framework che ti stupirà.pptx
Commit - Qwik il framework che ti stupirà.pptxCommit - Qwik il framework che ti stupirà.pptx
Commit - Qwik il framework che ti stupirà.pptxCommit University
 
Sviluppare da zero una Angular Web App per la PA
Sviluppare da zero una Angular Web App per la PASviluppare da zero una Angular Web App per la PA
Sviluppare da zero una Angular Web App per la PACommit University
 
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...Commit University
 
Prisma the ORM that node was waiting for
Prisma the ORM that node was waiting forPrisma the ORM that node was waiting for
Prisma the ORM that node was waiting forCommit University
 
Decision-making for Software Development Teams - Commit University
Decision-making for Software Development Teams - Commit UniversityDecision-making for Software Development Teams - Commit University
Decision-making for Software Development Teams - Commit UniversityCommit University
 
Component Design Pattern nei Game Engine.pdf
Component Design Pattern nei Game Engine.pdfComponent Design Pattern nei Game Engine.pdf
Component Design Pattern nei Game Engine.pdfCommit University
 
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...Commit University
 
Prototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsPrototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsCommit University
 
KMM survival guide: how to tackle struggles between Kotlin and Swift
KMM survival guide: how to tackle struggles between Kotlin and SwiftKMM survival guide: how to tackle struggles between Kotlin and Swift
KMM survival guide: how to tackle struggles between Kotlin and SwiftCommit University
 
Da Vuex a Pinia: come fare la migrazione
Da Vuex a Pinia: come fare la migrazioneDa Vuex a Pinia: come fare la migrazione
Da Vuex a Pinia: come fare la migrazioneCommit University
 
Orchestrare Micro-frontend con micro-lc
Orchestrare Micro-frontend con micro-lcOrchestrare Micro-frontend con micro-lc
Orchestrare Micro-frontend con micro-lcCommit University
 
Fastify has defeated Lagacy-Code
Fastify has defeated Lagacy-CodeFastify has defeated Lagacy-Code
Fastify has defeated Lagacy-CodeCommit University
 

Más de Commit University (20)

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdfBreaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
 
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdfAccelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
 
Slide-10years.pdf
Slide-10years.pdfSlide-10years.pdf
Slide-10years.pdf
 
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
 
Vue.js slots.pdf
Vue.js slots.pdfVue.js slots.pdf
Vue.js slots.pdf
 
Commit - Qwik il framework che ti stupirà.pptx
Commit - Qwik il framework che ti stupirà.pptxCommit - Qwik il framework che ti stupirà.pptx
Commit - Qwik il framework che ti stupirà.pptx
 
Sviluppare da zero una Angular Web App per la PA
Sviluppare da zero una Angular Web App per la PASviluppare da zero una Angular Web App per la PA
Sviluppare da zero una Angular Web App per la PA
 
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
 
Prisma the ORM that node was waiting for
Prisma the ORM that node was waiting forPrisma the ORM that node was waiting for
Prisma the ORM that node was waiting for
 
Decision-making for Software Development Teams - Commit University
Decision-making for Software Development Teams - Commit UniversityDecision-making for Software Development Teams - Commit University
Decision-making for Software Development Teams - Commit University
 
Component Design Pattern nei Game Engine.pdf
Component Design Pattern nei Game Engine.pdfComponent Design Pattern nei Game Engine.pdf
Component Design Pattern nei Game Engine.pdf
 
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
 
Prototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsPrototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step Functions
 
KMM survival guide: how to tackle struggles between Kotlin and Swift
KMM survival guide: how to tackle struggles between Kotlin and SwiftKMM survival guide: how to tackle struggles between Kotlin and Swift
KMM survival guide: how to tackle struggles between Kotlin and Swift
 
Da Vuex a Pinia: come fare la migrazione
Da Vuex a Pinia: come fare la migrazioneDa Vuex a Pinia: come fare la migrazione
Da Vuex a Pinia: come fare la migrazione
 
Orchestrare Micro-frontend con micro-lc
Orchestrare Micro-frontend con micro-lcOrchestrare Micro-frontend con micro-lc
Orchestrare Micro-frontend con micro-lc
 
Fastify has defeated Lagacy-Code
Fastify has defeated Lagacy-CodeFastify has defeated Lagacy-Code
Fastify has defeated Lagacy-Code
 
SwiftUI vs UIKit
SwiftUI vs UIKitSwiftUI vs UIKit
SwiftUI vs UIKit
 

(Have a) rest with Laravel

  • 1.
  • 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)
  • 6. Questo è Francesco nel 2012 (sta lavorando 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, 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.
  • 9. “Quindi… quello non era PHP…”
  • 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...
  • 12. Symfony Dicembre 2011 - Symfony 2.0.7 su Packagist
  • 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.
  • 14. Laravel! 2012 - Laravel 3 2013 - Laravel 4 (su Packagist)
  • 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à.
  • 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); });
  • 19.
  • 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);
  • 24. “Ok, ma… alla fine, chi lo usa, questo Laravel?”
  • 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;
  • 30. Bugia N.1 “Le Facade di 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 favorisce un 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 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
  • 38. Bugia N.5 “Laravel non incoraggia le buone pratiche nello sviluppo software.”
  • 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.
  • 41. Parte 4 “Have a REST”
  • 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);
  • 48.