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

Posted by Maciej Gos on Monday, August 13, 2018

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

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).

Photo by chuttersnap on Unsplash

Maciej Gos

真诚赞赏,手留余香

使用微信扫描二维码完成支付


comments powered by Disqus