Questo post è parte di una serie su windows azure. Ecco il link per la lista di tutti i post precedenti.
In un post precedente abbiamo definito in linea di massima le capabilities del windows azure blob storage. Anche da un overview sommaria la prima cosa che si nota è che, nel blob storage, non c’è alcun riferimento al concetto di “directory”: ogni file è un blob, ogni blob appartiene ad un container, ma non sembra sia possibile, definire una sorta di gerarchia che possa catalogare, in modo molto simile a quanto siamo abituati a fare con il file system, i nostri file (blob).
Nonostante quanto detto sia assolutamente vero, è possibile simulare comunque il concetto di directory, in modo, direi, alquanto facile.
Il primo modo, il più diretto, è quello di utilizzare il nome del file per simulare l’appartenenza ad una gerarchia, come avviene nell’esempio seguente:
Un altro modo, più lineare, è quello di utilizzare le API messe a disposizione dall’SDK e descrivere il processo di upload in modo un po’ più più dettagliato, ma anche più leggibile, definendo esplicitamente le proprie intenzioni:
Analizzando quello che succede, attraverso il management portal, abbiamo la conferma di quanto asserito in precedenza: non c’è alcune traccia del concetto di directory. Infatti, all’interno del container, abbiamo una visualizzazione piatta dei file caricati, siano essi nella root o in qualche “directory virtuale”.
Il concetto di “virtual directory”, però, non è scomparso e interagendo con il container, tramite le API (ma anche con i servizi REST messi a disposizione dalla piattaforma) abbiamo la possibilità di navigare all’interno di questa gerarchia. Nell’esempio precedente, ciclando sui blob contenuti nella root del container, otteniamo il seguente risultato:
Ovvero, anche se non fisicamente, la directory è effettivamente presente. Cerchiamo ora di capire cosa avviene “dietro le quinte”, utilizzando fiddler. A fronte dell’operazione di listing dei blob del container o di una virtual folder, le API, internamente, eseguono una GET verso l’url che identifica il blob storage, utilizzando dei parametri “ad hoc” nella query string:
Nel nostro caso, le due chiamate differiscono per un semplice parametro: “prefix”. Come documentato, questo parametro permette di fare delle “sub-select” di tutti i blob che rispettano il pattern.
In questo, semplice, modo abbiamo la possibilità di simulare la gerarchia simile a quella del file system, anche sul windows azure blob storage.