Azure Functions Serisi #14 – Return Table Storage

Merhaba,

Azure Functions yazı serimizin bir önceki Bindings konusunu ele aldığımız içeriğinde, işlem hacmimizi genişletecek bir tasarım üzerinden seyretiğimiz Table Storage ile ilgili örneklendirmede bulunmuştuk. Bu içeriğimizde ise ilgili örnekte var olan ve birazdan nazarınıza sunacağım kod ve iş mantığı maliyetlerini düşürerek daha pratik bir kod ve geliştirme süreciyle karşılaşmamızı sağlayacak olan Return Table Storage üzerine konuşuyor olacağız.

Return Table Storage Nedir?
Bindings makalesinde Table Output Binding işlemini gerçekleştirirken aşağıdaki geliştirmede bulunmuştuk;

.
.
.
    async public static Task<IActionResult> Post(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = routeName)] HttpRequest req,
        ILogger log, [Table(tableName: "products", Connection = "StorageConnectionString")] CloudTable cloudTable)
    {
        string body = await new StreamReader(req.Body).ReadToEndAsync();
        Product product = JsonConvert.DeserializeObject<Product>(body);
        await cloudTable.CreateIfNotExistsAsync();
        TableOperation operation = TableOperation.Insert(product);
        TableResult tableResult = await cloudTable.ExecuteAsync(operation);
 
        return new OkObjectResult(tableResult.Result);
    }
.
.
.

Burada dikkat ederseniz eğer; bir data’yı Table Storage’a ekleyebilmek için bir ‘CloudTable’ tanımlamakta ve ardından ‘TableOperation’ nesnesi ile uzun uzun işlemler gerçekleştirerek nihai olarak ‘Execute’ etmekteyiz. Halbuki Function’ın ekleyeceği datayı geriye döndürerek Table Storage’a direkt olarak kaydedebilseydi ve ekstradan herhangi bir işlem yapmamıza gerek kalmasaydı nasıl olurdu? Evet… Duyar gibiyim 🙂 İyi olurdu 🙂 İşte Return Table Storage bu tarz basit ve efektif bir süreci inşa edebilmek için kullanılmaktadır.

Return Table Storage kullanımına örnek olması için aşağıdaki kodu inceleyiniz;

    public static class Function1
    {
        const string routeName = "products";
        [FunctionName("Post")]
        [return: Table(tableName: "products", Connection = "StorageConnectionString")]
        async public static Task<Product> Post(
            [HttpTrigger(AuthorizationLevel.Function, "post", "get", Route = routeName)] HttpRequest req,
            ILogger log)
        {
            string body = await new StreamReader(req.Body).ReadToEndAsync();
            Product product = JsonConvert.DeserializeObject<Product>(body);
            return product;
        }
    }

Görüldüğü üzere ‘Post’ fonksiyonu ne ‘CloudTable’ almakta ne de içerisinde herhangi bir ekstradan table storage’a veri ekleyebilmek için operasyon yürütmektedir. İlgili fonksiyon, 5. satırda olduğu gibi ‘return’ target’ıyla ‘Table’ attribute’u ile işaretlenmekte ve böylece bu metottan dönecek olan product nesnesini hangi table storage’a ekleyeceğini bilmektedir.

Bu işlem neticesinde uygulamayı derleyip, çalıştırdığımızda aşağıdaki gibi sadece product data’sının post edilmesi hedef table storage’a verinin eklenmesi için yeterli olacaktır.
Azure Functions Serisi #14 - Return Table Storage
Azure Functions Serisi #14 - Return Table Storage

Böylece kodumuzu fazla kirletmeden dönen değerin direkt olarak table storage’a eklenmesini sağlamakta ve efektif bir inşa ile rahat ve daha sade bir gelişimsel süreçte bulunulmuş olmaktadır.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 21 Ağustos 2020

    […] Azure Functions Serisi #14 – Return Table Storage […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*