tecnologie web: approcci avanzatigoy/materiale/2021/10_tecweb2021... · 2020. 11. 21. · goy -...

31
Goy - a.a. 2020/2021 1 Tecnologie Web: approcci avanzati Tecnologie Web: approcci avanzati a.a. 2020/2021 9 Anna Goy 10

Upload: others

Post on 21-Aug-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 1Tecnologie Web: approcci avanzati

Tecnologie Web: approcci avanzati

a.a. 2020/2021

9Anna Goy

10

Page 2: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Lumen Framework

Goy - a.a. 2020/2021 2Tecnologie Web: approcci avanzati

Page 3: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 3

MVC - I• Model-View-Controller (MVC) è un pattern (o modello) architetturale (= modo

per strutturare il codice) molto diffuso nello sviluppo di sistemi software, in particolare nell'ambito della programmazione orientata agli oggetti

• E' usato per separare la presentazione dei dati dalla logica di business (logica "interna" dell'applicazione, che ne determina in funzionamento)

• E' basato sulla separazione dei compiti fra 3 componenti software:– Model: gestisce i dati (interagisce con il database) e implementa la logica

dell'applicazione– View: gestisce la User Interface dell'applicazione (es. pagine HTML),

visualizzando i dati forniti dal Model– Controller: coordina il lavoro degli altri due moduli; in particolare riceve la

richiesta del client (utente), attraverso la View, e invoca il Model e/o la View

[Ref: it.wikipedia.org/wiki/Model-view-controller;php-html.net/tutorials/model-view-controller-in-php]

Page 4: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 4

MVC - II

Molti Framework PHP sono basati sul pattern MVC

Page 5: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 5

Software framework - I

Frameworko ambiente software, generalmente un insieme di librerieo offre dei template ("modelli") astratti di codice che implementano funzionalità

generiche e che possono essere modificati dal programmatore aggiungendocodice specifico, così da implementare funzionalità specifiche

o generalmente un framework comprende anche compilatori/interpreti, Web Server, ...

o tipicamente i framework sono language-specific[it.wikipedia.org/wiki/Framework]

Page 6: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6

Lumen - I

• Lumen [lumen.laravel.com] is a new PHP micro-framework developed by the author of the Laravel framework, Taylor Otwell: think of it as a slimmed down Laravel installation

• Taylor Otwell developed Lumen with some very specific purposes in mind, namely, microservices and APIs

• I'm advocating the use of Lumen primarily for decoupled services and APIs, which is its intended use. That's not to say you can't build an entire application on Lumen, because you can…

[Ref: code.tutsplus.com/articles/introduction-to-lumen--cms-23928]

• Vedi ISTRUZIONI_Lumen.pdf !!!

Page 7: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 7

Lumen: installazione - I(1) INSTALLARE LUMEN• Controllare i requisiti di sistema (con XAMPP dovrebbero essere a posto...)• Installare Composer [getcomposer.org]

Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you

• Si lavora da prompt dei comandi (terminale)!

• download the Lumen installer using Composer

Page 8: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 8

Lumen: nuovo progetto (app) - I(2) CREARE UN PROGETTO (APP) LUMEN• Once installed, the lumen new command will create a fresh Lumen

installation in the folder you specify; e.g.lumen new corsoTWconLumenwill create a project folder named corsoTWconLumen containing a fresh Lumen installation with all of Lumen's dependencies already installed

Page 9: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 9

Lumen: nuovo progetto (app) - II• Serving your application:

– In the project folder, execute this command: php -S localhost:80 -t ./public→ the Web Server, with the Php Interpreter, starts listening on the port you specified (e.g. 80)

– Now visit http://localhost:port/ in your browsernel nostro caso: http://localhost (visto che gira sulla porta 80, che è quelladi default)

Page 10: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 10

Lumen: nuovo progetto (app) - III• Nella cartella del progetto (corsoTWconLumen) trovate

la tipica struttura di un progetto Lumen (= Laravel)• There are some configurations in the .env file

that must be adjusted, in particular concerning the database:DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE= fumettiConLumenDB_USERNAME=rootDB_PASSWORD=

NB il DBMS NON è incluso nel Framework!⇒ usiamo il MySQL Server già installato sul nostro PC (x es. quello offerto in XAMPP)

Page 11: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 11

Lumen: database - I• Creazione del DATABASE

– Avviare MySQL Server dal pannello di controllo di XAMPP(NON avviate Apache: il Web Server è già running!)

– To use phpMyAdmin as a UI to MySQL, copy the folder phpMyAdmin from xampp to …corsoTWconLumen\public\ then access it at http://localhost/phpmyadminfrom your browser

– Creare un nuovodatabase fumettiConLumen

Page 12: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 12

Lumen: database - II– La filosofia di molti framework è quella di costruire il database a partire dal

software... – In Lumen si utilizzano le migrazioni (migrations): attraverso opportuni

comandi creiamo automaticamente dei file php che poi possiamo modificare ed eseguire → questi migration files creano le tabelle del nostro database (corsoTWconLumen)

Attraverso i seeding files (anch'essigenerati automaticamente e volendomodificati) possiamo anche popolareil database (per i dettagli si vedaISTRUZIONI_Lumen.pdf)

NB Per qualche misteriosa ragione, il Seeder NON FUNZIONA! E la tabella NON viene riempita... :-( La riempiremo a mano, invocando per primo un paio di volte il servizio CREATE... ;-)

Page 13: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 13

Lumen: API REST - I• Creazione dei ROUTE ENDPOINTS (servizi REST)

in web.php (cartella routes):$router->group(['prefix'=>'api/v1'],function() use($router){

// tutti i fumetti$router->get('/fumetti','FumettosController@index');

// crea un nuovo fumetto$router->post('/fumetti','FumettosController@store');

// cancella un fumetto$router->delete('/fumetti/{id}','FumettosController@destroy');

// info su un fumetto$router->get('/fumetti/{id}', 'FumettosController@show');

});

Page 14: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 14

Lumen: API REST - IIcioè...

http://localhost/api/v1/fumetti (method GET) invoca la funzione index (def. in FumettosController.php)

http://localhost/api/v1/fumetti (method POST) invoca la funzione store (def. in FumettosController.php)

http://localhost/api/v1/fumetti/2 (method DELETE) invoca la funzione destroy (def. in FumettosController.php)

http://localhost/api/v1/fumetti/2 (method GET) invoca la funzione show (def. in FumettosController.php)

Page 15: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 15

Lumen: models e controllers - I• Creazione dei MODELS (in app/Models/)

– The models are used to interact with the database– You must have one model per table– ⇒ we will have a model called Fumetto.php– (NB attenzione! Se il model si chiama Fumetto, la tabella deve chiamarsi

fumettos !)

• Creazione dei CONTROLLERS– in app/Http/Controllers/FumettosController.php importiamo il model

Fumetto.php e ne creiamo un'istanza ($fumetto), a cui poi chiederemo i dati– leggi tutti i fumetti (GET)

public function index() {$fumettos = $this->fumetto->all();return $fumettos;

}

funzioni predefinite nel modelcostruito automaticamente [https://laravel.com/docs/8.x/eloquent: "Think of each Eloquent model as a powerful query builder allowing you to fluently query the database table associated with the model"]

Page 16: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 16

Lumen: models e controllers - II– crea un nuovo fumetto (POST)

public function store(Request $request) {$fumetto = $this->fumetto->create([

'nome' => $request->input('nome'),'descrizione' => $request->input('descrizione'),'prezzo' => $request->input('prezzo'),'categoria' => $request->input('categoria'),]);return $fumetto;

}

– cancella un fumetto (DELETE)public function destroy($fumettoId) {

$fumetto = $this->fumetto->find($fumettoId);if (empty($fumetto)){return "No data found";}$fumetto->delete();return $fumetto;

}

Page 17: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 17

Lumen: models e controllers - II– leggi le info su un fumetto (GET)

public function show($fumettoId) {$fumetto = $this->fumetto->find($fumettoId);if (empty($fumetto)){return "No data found.";}

return $fumetto;}

Page 18: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 18

Lumen: test con Postman - I• Test degli endpoint (servizi REST)

– Call the /fumetti endpoint with GET method (http://localhost/api/v1/fumetti) using PostmanYou should now see your data from the database being returned in a JSON format

Page 19: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 19

Lumen: test con Postman - II– Send a POST request to the /fumetti endpoint

(http://localhost/api/v1/fumetti) using PostmanNB in Postman, impostare il metodo POST, selezionare il tab Body (della request) e, come formato dei dati, selezionare raw e JSON !! Inserire qualcosa come il seguente:{

"nome": "Tex Willer","descrizione": "primo numero di Tex","prezzo": 50,"categoria": "TEX"

}

Attenzione a eventuali segnali di errori sintattici...!!

Page 20: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 20

Lumen: test con Postman - III– Send a DELETE request to the /fumetti/<id> endpoint

(http://localhost/api/v1/fumetti/2) using PostmanNB in Postman, impostare il metodo DELETE, selezionare il tab Params (della request)

Page 21: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 21

Lumen: test con Postman - IV– Send a GET request to the /fumetti/<id> endpoint

(http://localhost/api/v1/fumetti/2) using PostmanNB in Postman, impostare il metodo GET, selezionare il tab Params (della request)

Page 22: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

CASE STUDY: edicola fumetti (versione 3)Aggiorniamo il case study con il nuovo backend realizzato con Lumen

• Costuiamo un nuovo backend seguendo le istruzioni in ISTRUZIONI_Lumen.pdf DORU says: Congratulations if you have got so far. You should now have a basic PHP API running locally. There are many things that could be improved, like throwing proper HTTP errors in JSON format in case of failure and using resources to return the data in a standardized way. Remember that you can access and use all the source code for this project from GitHub. For more advanced topics or help please get in touch [www.dorusomcutean.com/api-how-to-create-lumen-basic-api]

ANNA says: Collegare la client app Bootstrap

PUT ALL TOGETHER & TRY YOURSELF!

22RIF ISTRUZIONI_Lumen.pdf → cartella corsoTWconLumen…

Page 23: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

Collegare la client app Bootstrap ai servizi definiti nel backend Lumen

(1) Per utilizzare il Web Server(e l'interprete PHP) fornitoda Lumen, copiamo la cartella app_client_Bootstrapda xampp/htdocs/... a .../corsoTWconLumen/public/(come abbiamo fatto per phpMyAdmin)

(2) Dobbiamo apportare alcune modifiche...

Adattiamo la client app al nuovo backend - I

23RIF ISTRUZIONI_Lumen.pdf → cartella corsoTWconLumen…

Page 24: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

Siccome non abbiamo implementato né il servizio di update né quello di search... • cancelliamo le import di update-product.js e search-product.js (in

index.html)

Adattiamo la client app al nuovo backend - II

24RIF cartella public/app_client_Bootstrap

Page 25: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

• cancelliamo il campo di ricerca e i pulsanti Edit dalla UI (in read-products.js )

Adattiamo la client app al nuovo backend - III

25RIF cartella public/app_client_Bootstrap

Page 26: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

Modifichiamo le chiamate AJAX...In read-products.js modifichiamo l'URL nella HTTP request (GET), sostituendo il vecchio endpoint con il nuovo

Adattiamo la client app al nuovo backend - IV

26RIF cartella public/app_client_Bootstrap

Page 27: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

In read-one-product.js facciamo lo stesso (passandogli anche l'id)

In create-product.js cambiamo solo l'URL

In delete-product.js cambiamo l'URL (passandogli l'id) e cancelliamo la dichiarazione del tipo (JSON) della request e il contenuto del body

Adattiamo la client app al nuovo backend - V

27RIF cartella public/app_client_Bootstrap

Page 28: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

Attenzione! Il formato dei dati restituiti dal servizio è leggermente diverso...Vecchio: {products:[{p1},{p2}, ...]}Nuovo: [{p1},{p2}, ...]

Inoltre i nomi usati dal servizio nell'oggetto JSON (response) che rappresenta un prodotto sono diversi! Quindi in read-products.js dobbiamo modificare leggermente la funzione readProductsTemplate(data)...

Adattiamo la client app al nuovo backend - VI

28RIF cartella public/app_client_Bootstrap

l'array è disponibile direttamente in data (se NON in data.products)!

Page 29: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

In read-one-product.js il servizio restituisce l'oggetto JSON corrispondente al fumetto cercato, quindi devo solo cambiare i nomi...

In create-product.js e delete-product.js NON ci sono nomi da modificare...

Adattiamo la client app al nuovo backend - VII

29RIF cartella public/app_client_Bootstrap

Page 30: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

Inoltre, in create-product.js devo

• cambiare il tipo di campo di input per la categoria, che da numero diventa stringa

• controllare i nomi dei campi... l'unico da modificare è cat_id → categoria

Adattiamo la client app al nuovo backend - VIII

30RIF cartella public/app_client_Bootstrap

Page 31: Tecnologie Web: approcci avanzatigoy/materiale/2021/10_TecWeb2021... · 2020. 11. 21. · Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 6 Lumen - I • Lumen [lumen.laravel.com]

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

A questo punto... la nostra app è completa:

• il backend (servizi REST) è basato su Lumen

• il frontend è il "nostro" client (basato su Bootstrap)

1. avviamo il DBMS2. avviamo il Web Server

3. dal browser: http://localhost/app_client_Bootstrap/

PUT ALL TOGETHER & TRY YOURSELF!

31RIF cartella corsoTWconLumen (backend) + cartella public/app_client_Bootstrap (frontend)

non dimenticate lo slash finale!!!

Ricordatevi di fermare i server quando avete finito!!DBMS: pulsante Stop sul pannello di XAMPPWeb Server Lumen: ctrl+C nel prompt dei comandi