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
- Azure Functions na macOS? Pokażę Ci jak zacząć
- Jaki rodzaj rozliczania wybrać dla Azure Functions?
- Jak w 5 minut zbudować swoje pierwsze mock API w Azure Functions?
- Konfiguracja Azure Functions Routing Na 3 Sposoby
- Jak skonfigurować różne wersje interfejsu API w Azure Functions?
- 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
真诚赞赏,手留余香
使用微信扫描二维码完成支付
comments powered by Disqus