uCloudy : l’accesso al cloud dal .Net Micro Framework è servito!

2728.ucloudy_thumb_55C1D3A0

Questa è la volta di un progetto completamente dedicato al Cloud ma sempre con l’obiettivo di fornire ulteriori funzionalità e potenzialità ad un sistema embedded.

uCloudy è infatti una libreria che ha come obiettivo quello di mettere a disposizione una serie di client per il .Net Micro Framework per la connessione ai principali servizi Cloud. Il primo e per adesso unico servizio supportato in questa prima release è Windows Azure Mobile Services.

Come ben sappiamo, la Microsoft fornisce una serie di SDK per poter usufruire di questo servizio all’interno delle applicazioni Windows Store, Windows Phone, iOS, Android e Web. Io ho cercato di portare questa funzionalità anche nei sistemi embedded dotati di .Net Micro Framework. Tutto ciò è stato reso possibile grazie all’interfaccia RESTful che i mobile services forniscono per potersi interfacciare ad essi. Grazie al client HTTP che ho ultimamente integrato nella uPLibrary, ho realizzato una serie di classi attraverso le quali poter eseguire le quattro operazioni principali sulle tabelle dei mobile services : insert, update, delete e query.

Il client in questione è implementato attraverso la classe MobileServiceClient alla quale, attraverso il costruttore, è necessario fornire l’URI dell’applicazione (es. <miapplicazione>.azure-mobile.net) ed una delle chievi (master key o application key) oppure un authentication token, per poter stabilire i permessi con cui il client stesso può effettuare le operazioni.

L’unico metodo fornito dal client è GetTable() al quale è necessario passare il nome della tabella sulla quale voler effettuare un’operazione, per vedersi ritornare un oggetto che implementa l’interfaccia IMobileServiceTable e sul quale è possibile invocare i seguenti metodi :

  • Insert : per inserire una riga nella tabella attraverso un oggetto IMobileServiceEntity;
  • Update : per aggiornare una riga nella tabella attraverso un oggettoIMobileServiceEntity;
  • Delete : per cancellare una riga nella tabella fornendone l’ID;
  • Query : per eseguire una query nella tabella;

Ogni oggetto che viene mappato su una riga di una tabella deve implementare l’interfacciaIMobileServiceEntity, il cui metodo principale è ToJson() che deve restituire la rappresentazione JSON dell’oggetto comprensiva del relativo ID. Non ho volutamente realizzato una classe base (astratta) con un’implementazione di questo metodo che si basasse sulla Reflection, per evitare inutili rallentamenti a runtime. In questi casi, è più performante implementare il metodo nella propria classe conoscendone direttamente i campi.

Immaginiamo che il nostro oggetto da mappare sia il seguente :

public class MockEntity : IMobileServiceEntity
{
    public int Id { get; set; }

    public string FieldA { get; set; }
    public int FieldB { get; set; }

    public string ToJson()
    {
        return "{ \"FieldA\" : \"" + FieldA + "\", \"FieldB\" : " + FieldB + "}";
    }

    public void Parse(string json)
    {
        throw new NotImplementedException();
    }
}

Come si può osservare, il metodo ToJson() è semplice ed immediato da eseguire, in quanto non fa uso della reflection, in quanto i campi sono assolutamente noti al momento dell’implemetazione.

public static void Main()
{
    Uri appUri = new Uri("http://myapp.azure-mobile.net");

    MobileServiceClient client = new MobileServiceClient(appUri, "applicationkey");

    // insert records
    client.GetTable("mock").Insert(new MockEntity() { FieldA = "Temp1", FieldB = 100 });
    client.GetTable("mock").Insert(new MockEntity() { FieldA = "Temp2", FieldB = 200 });
    client.GetTable("mock").Insert(new MockEntity() { FieldA = "Temp3", FieldB = 300 });
    client.GetTable("mock").Insert(new MockEntity() { FieldA = "Temp4", FieldB = 400 });

    // delete id = 1
    client.GetTable("mock").Delete(1);

    // update record id = 2
    MockEntity mock = new MockEntity() { Id = 2, FieldA = "Temp2_update", FieldB = 201 };
    client.GetTable("mock").Update(mock);

    // query
    client.GetTable("mock").Query("$orderby=FieldB");
}

Dall’esempio di utilizzo, si evince che il client rispecchia in parte la corrispondente versione presente negli SDK forniti dalla Microsoft.

Ovviamente, la storia di questa libreria è appena iniziata e l’obiettivo è di integrarla nel tempo con ulteriori client per l’accesso ad altri servizi Cloud !

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s