Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

(Have a) rest with Laravel

508 vues

Publié le

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.

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

(Have a) rest with Laravel

  1. 1. (Have a) REST with Laravel… o come costruire REST APIs con Laravel 5.x Francesco Malatesta - 22 Febbraio 2017
  2. 2. 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’ ];
  3. 3. 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)
  4. 4. Parte I “Indietro nel Tempo”
  5. 5. Questo è Francesco nel 2012 (sta lavorando ad un CMS PHP con CodeIgniter, tutto sembra andare bene, ma...)
  6. 6. PHP è Brutto. strchr(); strstr(); strtok(); untaint(); mhash_keygen_s2k(); eregi(); uasort(); uksort(); arsort(); vsprintf(); ereg(); posix_mkfifo(); lang_lock(); flag_rate();
  7. 7. … 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.
  8. 8. “Quindi… quello non era PHP…”
  9. 9. 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!
  10. 10. C’è bisogno di… ● Potenza. ● Espressività. Nel frattempo, da qualche altra parte...
  11. 11. Symfony Dicembre 2011 - Symfony 2.0.7 su Packagist
  12. 12. 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.
  13. 13. Laravel! 2012 - Laravel 3 2013 - Laravel 4 (su Packagist)
  14. 14. 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à.
  15. 15. Espressività Storage::disk('s3')->put('avatars/1', Storage::disk('local')->get('avatar.png'));
  16. 16. Espressività #2 if (Auth::attempt(['email' => $email, 'password' => $password])) { return redirect()->intended('dashboard'); }
  17. 17. Espressività #3 $value = Cache::remember('user', $minutes, function () { return DB::table('users')->find(1); });
  18. 18. Parte 2 “Laravel… nel 2017”
  19. 19. 19.320.041 ~33k Installazioni / giorno
  20. 20. 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;
  21. 21. 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);
  22. 22. “Ok, ma… alla fine, chi lo usa, questo Laravel?”
  23. 23. 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!
  24. 24. 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;
  25. 25. Caso 2 - PMI - Fater S.p.A. Software per la gestione dei siti aziendali; Pampers; Tampax; Lines; ACE; Più di un milione di iscritti;
  26. 26. Caso 3 - Enterprise - Ericsson Sistema di Gestione Documentale; Affiancato a: Elasticsearch; Microservizi; Nessun problema in termini di performance;
  27. 27. Parte 3 “Debunking Time!”
  28. 28. Bugia N.1 “Le Facade di Laravel usano metodi statici, non è codice pulito!”
  29. 29. … 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
  30. 30. Bugia N.2 “Laravel favorisce un ecosistema chiuso.”
  31. 31. … 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;
  32. 32. Bugia N.3 “Laravel è scritto con componenti Symfony, conviene usare Symfony!”
  33. 33. … 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;
  34. 34. Bugia N.4 “Non conviene usare un framework come Laravel, crei un monolite su cui domani dovrai rimettere le mani.”
  35. 35. … 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
  36. 36. Bugia N.5 “Laravel non incoraggia le buone pratiche nello sviluppo software.”
  37. 37. … non è vero. “Non esistono pessimi linguaggi di programmazione. Solo pessimi sviluppatori.”
  38. 38. 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.
  39. 39. Parte 4 “Have a REST”
  40. 40. 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;
  41. 41. Yes, but...
  42. 42. 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;
  43. 43. 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;
  44. 44. 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
  45. 45. … 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);
  46. 46. Domande?
  47. 47. … grazie :)

×