Konfiguracja Azure Functions i Table Storage, czyli jak prosto przechować swoje dane – część 2

Konfiguracja Azure Functions i Table Storage, czyli jak prosto przechować swoje dane - część 2

Konfiguracja Azure Functions i Table Storage za nami. Dzisiaj zajmiemy się pobieraniem danych z Table Storage.

O Azure Functions pisałem już w poprzednich częściach artykułów do, których serdecznie zapraszam

  1. Azure Functions na macOS? Pokażę Ci jak zacząć
  2. Jaki rodzaj rozliczania wybrać dla Azure Functions?
  3. Jak w 5 minut zbudować swoje pierwsze mock API w Azure Functions?
  4. Konfiguracja Azure Functions Routing Na 3 Sposoby
  5. Jak skonfigurować różne wersje interfejsu API w Azure Functions?
  6. Azure Functions i Swagger, czyli jak profesjonalnie zaprezentować nasze API
  7. Konfiguracja Azure Functions i Table Storage, czyli jak prosto przechować swoje dane – część 1

Natomiast jeżeli chcielibyście poczytać ogólnie o serverless możecie to zrobić tutaj.
Serverless, do czego może się przydać w aplikacjach mobilnych?

Jak pobrać dane zapisane w Table Storage?

Od wersji v2 Azure Functions możemy w tym celu wykorzystać obiekt CloudTable z namespace Microsoft.WindowsAzure.Storage.Table. Dzięki niemu możemy w prosty sposób odczytać zapisane dane.

[Table("todoTable", Connection = "MyConnectionString")]
CloudTable todoTable

Co my tutaj mamy ciekawego?
W powyższym zapisie znajduje się dobrze już nam znany obiekt Table konfigurujący połączenie do naszej tabeli. Znajduje się tutaj również obiekt CloudTable.

Ale co zrobić aby przeczytać dane?
Musimy w tym celu stworzyć zapytanie które odczyta nam dane. Do tego celu służy obiekt TableQuery.

Sam proces odczytania danych jest bardzo prosty i ogranicza się do dwóch linijek kodu

var query = new TableQuery<TodoModel>().Select(new List<string> { "PartitionKey", "RowKey", "Title", "Project", "IsCompleted" } );
var result = await todoTable.ExecuteQuerySegmentedAsync(query, null);

Ważnym elementem jest zdefiniowanie listy kolumn, które chcemy odczytać z naszej bazy.

Cały kod funkcji prezentuje się następująco.

using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;
using Newtonsoft.Json;

using ServlessTodo.Demo.ApiModels;
using ServlessTodo.Demo.Models;
using System;

namespace ServlessTodo.Demo
{
    public static class GetTodo
    {
        [FunctionName("GetTodo")]
        [StorageAccount("macsamples")]
        public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = "todo/{project}")]
            HttpRequest request,
            string project,
            [Table("todoTable", Connection = "MyConnectionString")]
            CloudTable todoTable,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            log.Info($"Executed route GET - {request.Path}");

            var query = new TableQuery<TodoModel>().Select(new List<string> { "PartitionKey", "RowKey", "Title", "Project", "IsCompleted" } );
            var result = await todoTable.ExecuteQuerySegmentedAsync(query, null);
            
            var response = result.Results.ConvertAll<GetTodoDTO>(new Converter<TodoModel, GetTodoDTO>(ConvertModelToDTO));

            return new OkObjectResult(response);
        }

        static GetTodoDTO ConvertModelToDTO(TodoModel model)
        {
            return new GetTodoDTO 
            {
                PartitionKey = model.PartitionKey,
                RowKey = model.RowKey,
                Title = model.Title,
                IsCompleted = model.IsCompleted
            };
        }
    }
}

Podsumowanie

Dzisiaj krótko o tym jak można oczytać dane zapisane w Table Storage ale jak widzicie jest to wręcz dziecinnie proste. Dzięki temu możemy się skupić na dostarczaniu wartości biznesowej nie martwiąc o konfiguracje bazy danych, połączeń i innych „mało ciekawych” rzeczy.

Dzięki szybkości i prostocie całego procesu można bardzo szybko dostarczyć produkt MVP (Most Viable Product).

Chcesz być na bierząco z najnowszymi zmianami na blog i newsami ze świata mobilnego, oraz chmury?

Zapisz się na mój newsletter zajmie to tylko parę sekund.

Share