Nell'articolo precendente abbiamo iniziato la realizzazione di una semplice applicazione Web che sfrutta lo storage sul cloud offerto da Windows Azure per permettere l'upload di alcune foto in modo da averle sempre disponibili online attraverso una pagina Web. Abbiamo analizzato ed utilizzato i servizi del Blob Storage per memorizzare file ed immagini, ora aggiungeremo la possibilità per gli utenti di lasciare un commento sfruttando il Windows Azure Table Storage.
Le "Table" consentono di memorizzare entità all'interno di tabelle non relazionali, assomigliando quindi più ad un modello NoSQL che ad un database tradizionale. All'interno di una Table, le righe sono identificate univocamente attraverso una coppia di valori, chiamati Partition Key e Row Key.
Tutti i dati sono sempre accessibili tramite chiamate REST al servizio (verso URL della forma http://myaccountname.table.core.windows.net
), permettendo di fatto di accedere utilizzando qualunque linguaggio e piattaforma di sviluppo che sia in grado di effettuare chiamate HTTP.
PHPTableComments
Utilizziamo come base di partenza l'applicazione Web che abbiamo iniziato nello scorso appuntamento e sfruttiamo anche il Windows Azure storage account creato sempre nello scorso articolo.
Come prima cosa, creiamo una nuova classe PHP che rappresenta i dati che vogliamo persistere all'interno del Table Storage, cioè i commenti lasciati dagli utenti del nostro servizio. Aggiungiamo quindi un file che possiamo chiamare Comment.php che conterrà il seguente codice:
Come sempre, analizziamo insieme queste poche righe di codice:
- Innanzitutto importiamo una libreria fornita dall'SDK per facilitare l'utilizzo del Table Storage service
- La nostra classe estende
Microsoft_WindowsAzure_Storage_TableEntity
- Le proprietà dell'oggetto che vogliamo siano persistite all'interno della Table sono annotate con la sintassi
@azure
, specificando il nome della rispettiva colonna nella Table - Nel costruttore della classe, assegnamo una coppia di Partition Key e Row Key che siano univoci, utilizzando la data corrente e un GUID generato casualmente ogni volta
Persistere entità nel Table Storage
Cominciamo quindi a costruire la pagina che permetterà agli utenti del nostro servizio di pubblicare i propri commenti in modo che siano visibili a tutti.
Per prima cosa, creiamo una nuova pagina PHP che chiameremo comments.php. In cima a questo file definiamo, come già fatto nello scorso appuntamento, alcune costanti utili per l'accesso al Table Storage, in modo da avere un punto centralizzato in cui poter modificare queste informazioni se necessario:
I dati che abbiamo definito, in questo caso, sono:
- Una costante che stabilisce se la nostra applicazione è in esecuzione all'interno dell'ambiente di emulazione piuttosto che sul vero cloud di Windows Azure
- Il nome dell'account di Storage nel quale vogliamo andare ad inserire le foto che caricheremo: è il nome che abbiamo scelto al momento della creazione dell'account sul portale di gestione di Windows Azure, nel nostro caso è "phpblobphotos"
- La chiave di accesso per l'utilizzo di questo storage account, che si può trovare sempre nel portale di gestione selezionando l'account e premendo il tasto "Visualizza" in alto a destra, nel riquadro "Chiave di accesso primaria"
- Il nome della tabella in cui vogliamo memorizzare i commenti sotto forma di entità
- Il nome e la chiave dell'account di storage dovranno ovviamente essere modificati per riflettere le stringhe specifiche del nostro servizio di archiviazione creato su Windows Azure
Creeremo un semplice form HTML in cui l'utente potrà inserire il suo nome e il commento che vuole lasciare. Aggiungiamo quindi in fondo al file comments.php il codice HTML della pagina Web, che contiene per ora solo il form HTML:
<html>
<head>
<title>PHPTableComments</title>
</head>
<body>
<form action="comments.php" method="post">
<div>
<label for="txtName">Il tuo nome:</label>
<input type="text" name="txtName" />
</div>
<div>
<label for="txtName">Il tuo commento:</label>
<textarea name="txtMessage"></textarea>
</div>
<div>
<input type="submit" value="Pubblica" />
</div>
</form>
</body>
</html>
Una volta pronto il form possiamo aggiungere, subito sotto alle righe iniziali con le costanti di configurazione, il codice per il salvataggio dei file sul cloud storage:
Approfondiamo rapidamente queste poche istruzioni scritte:
- La prima riga utilizza
require_once
per includere la libreria fornita dall'SDK per l'utilizzo del Table Storage dalla nostra applicazione Web - Creando una nuova istanza della classe
Microsoft_WindowsAzure_Storage_Table
possiamo specificare alcuni parametri se abbiamo intenzione di utilizzare uno storage reale su Windows Azure, oppure nessun parametro se vogliamo fare uso dello storage emulato in locale. Utilizziamo perciò la costante USING_EMULATOR per stabilire in quale ambiente di esecuzione ci troviamo - Tramite il metodo
createTableIfNotExists
ci assicuriamo di creare la tabella che useremo per persistere i commenti degli utenti - Verifichiamo a questo punto se l'utente sta cercando di inserire un nuovo commento: se sì, salviamolo nello cloud storage. Per farlo, istanziamo un oggetto Comment ed impostiamo le sue proprietà in base ai dati inseriti dall'utente
- Per ultimo, richiamiamo il metodo insertEntity passandogli come parametro il nome della Table all'interno della quale vogliamo persistere il commento e l'oggetto Comment stesso
Includiamo quindi anche la classe Comment
che abbiamo creato in precedenza
Leggere dati dal Table Storage
Una volta completata la parte di codice relativa all'aggiunta di nuove entità nella tabella, non resta che scrivere le poche righe che vadano a leggere tutti commenti dal Table Storage e li mostrino all'utente.
È sufficiente inserire il seguente frammento di codice dopo il form HTML e prima del tag di chiusura </body>
:
Analizziamo anche questa volta il codice:
- Il metodo
retrieveEntities
prende come parametri, nell'ordine, il nome della tabella da cui leggere, un eventuale filtro per le entità, e il nome della classe PHP da istanziare per ogni entità ottenuta dallo storage - A questo punto, non resta che scorrere l'array di commenti e per ognuna scrivere pochi tag HTML che mostrino nome, messaggio e data di ognuno
La nostra applicazione completa apparirà quindi in modo simile alla figura qui di seguito:
Ora che abbiamo completato la nostra semplice applicazione che fa uso dello storage in the cloud offerto da Windows Azure, nel prossimo appuntamento non resta che vedere la sua soluzione di database relazionale: Microsoft SQL Azure.