L’Azure Storage Type Provider propose un accès typé aux sources de données des différents modes de stockage Azure : Blob, Table et Queue. Isaac Abraham, qui maintient le projet, a récemment présenté comment interagir avec ces sources de données à l’aide du Type Provider.
L’initialisation du Type Provider est la même pour toutes les sources :
open FSharp.Azure.StorageTypeProvider
// Connect to a live account using a two-part name and key.
type Storage = AzureTypeProvider<"name", "key">
Blob
Le Blob storage d’Azure est un service permettant de stocker des fichiers dans le cloud. Le Type Provider offre un accès statiquement typé aux conteneurs et aux fichiers qu’ils contiennent :
let container = Storage.Containers.samples
let theBlob = container.``folder/``.``childFile.txt``
printfn "Blob '%s' is %d bytes big." theBlob.Name theBlob.Size
let totalSize =
[ container.``file1.txt``
container.``file2.txt``
container.``file3.txt``
container.``sample.txt`` ]
|> List.sumBy(fun blob -> blob.Size)
printfn "These files take up %d bytes." totalSize
Table
Le Table storage d’Azure est une base NoSQL clé/valeur dans le cloud. La base de données est dépourvue de schéma, ce qui signifie que toutes les lignes n’ont pas à contenir les mêmes propriétés. Les tables Azure offrent des possibilités de requêtage, dans une certaine limite : il est possible de récupérer des lignes par leur clé et de filtrer par propriété. Le point d’entrée pour le requêtage s’appuie sur le protocole OData. Le Type Provider apporte les opérations de CRUD basiques, nécessaires pour la gestion de la donnée. Il y a plusieurs façons de faire des requêtes, la plus simple étant la recherche par clé :
let employeeTable = Storage.Tables.employee
let firstEmployee = employeeTable.Get(Row "1", Partition "women")
let allWomen = employeeTable.GetPartition("women")
Le Type Provider met à disposition un IQueryable permettant de filtrer par propriété. Cependant, cette solution est limitée par l’ensemble restreint des opérations supportées par les tables Azure. Une alternative est d’utiliser les conditions auto générées par le Type Provider :
let longerQuery = employeeTable.Query()
.``Where Years Working Is``.``Greater Than``(14)
.``Where Name Is``.``Equal To``(“Fred”)
.``Where Is Manager Is``.True()
Queues
Azure Queue est un service de messaging disposant d’une API REST. Ce service permet également de gérer des tâches asynchrones et la construction de workflows. Une API traditionnelle de manipulation des Queues ne s’appuyant pas sur un schéma et ne disposant pas de capacités de requêtage extensives, un Type Provider n’aura pas grand chose à offrir à ce niveau. Cependant, celui-ci propose plusieurs fonctions pour le développement et le debugging. En utilisant F# Interactive, il est possible d’explorer les queues directement depuis l’IDE.
let queue = Azure.Queues.``sample-queue``
async {
printfn "Enqueuing a message!"
do! queue.Enqueue("Hello from Azure Type Provider")
printfn "Queue length is %d." (queue.GetCurrentLength())
// Get the message back off the queue
let dequeuedMessage = (queue.Dequeue() |> Async.RunSynchronously).Value
printfn "%A" dequeuedMessage
printfn "Deleting the message."
do! queue.DeleteMessage dequeuedMessage.Id
printfn "Queue length is %d." (queue.GetCurrentLength())
} |> Async.RunSynchronously
L’Azure Storage Type Provider est un projet open source disponible sur GitHub.