Ragnarok 04 – Firebase’e Giriş

Daha önceki yazılarda veri tabanı konusunda hiçbir şey söylemediğimi fark ettim. Elbette ki bu projede bir veri tabanı olacak ancak henüz hangi veri tabanını kullanacağıma karar veremedim. MSSQL, MySQL, MongoDB gibi alternatiflerin yanı sıra, DynamoDB, Firebase gibi henüz bilgi sahibi olmadığım ve bilgi edinmek istediğim veri tabanları da birer seçenek olarak duruyor. Bende bu konuda karar verebilmek için öncelikle bilmediğim veri tabanları hakkında biraz alıştırma yapmaya karar verdim ve Firebase ile işe koyuldum.

 

Firebase Google Cloud Platform tarafından sağlanan bir real-time database servisi. Projemin servis katmanında ASP.NET Core Web API kullanacağımı daha önce söylemiştim. Araştırmalarım sonucunda şu an için Firebase de .NET desteğinin tam anlamıyla olmadığını gördüm. Bazı 3. parti kütüphaneler mevcut ancak onlarda genel olarak .NET için yazılmış ve .NET Core için tam olarak güncellenmemiş. Dolayısıyla kullanılacak yöntem olarak şu an Firebase REST API hizmeti bir adım öne çıkmış gibi görünüyor.

 

Bu konuda yaptığım testler sonucunda kafamda bu projede böyle bir veri tabanı ne kadar mantıklı olur henüz tam olarak karar veremedim. Ancak ilerlemeye devam edeceğim. En azından fikir sahibi olurum. Günün sonunda proje için uygun olmadığına kanaat getirirsem öğrendiklerim yanıma kar kalır. Belki hiç olmazsa mobil uygulama tarafında kullanacağım zaman yardımı dokunur bu öğreneceklerimin.

 

Firebase de nasıl veri tabanı açılır şeklinde bir içerik yazmayacağım. Zaten Google ve Amazon gibi firmalar benim buraya yazacaklarımdan çok daha faydalı dokümanlarıyla kullanıcılara yardımcı oluyorlar. İnternette de birçok doküman bulunuyor. İhtiyaç halinde en güncel yöntemi bulmak daha yardımcı olabilir. Bugün itibariyle Firebase’de “Realtime Database” olarak bir hizmet başlattığınızda size https://proje_id.firebaseio.com şeklinde bir URL veriliyor. REST API ile bu URL üzerinden GET, POST, PUT ve DELETE istek metotları ile işlemlerinizi yapabilirsiniz. Bu işlemleri test ederken Firebase’de güvenlik kurallarını herkese açık hale getirdim ki şu an için yetkilendirme problemi ile karşılaşmayalım. Öncelikli amacımız neyi nasıl kullanacağımız öğrenmek olduğu için bu ayarın şu an böyle kalması sorun değil. Gerçek ortamda elbette ki bu kuralı düzenlememiz gerekiyor.

 

Firebase dokümanında GET isteği için;

 

curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'

 

şeklinde bir komut belirtiliyor. Buradan anlamamız gereken şey daha önce temin ettiğimiz URL’in sonuna .json eklememiz gerektiği. Biz ana dizinden tüm kayıtları çekeceğimiz için baseaddress olarak 'https://[PROJECT_ID].firebaseio.com/.json’ şeklinde bir kayıt girmemiz gerekiyor.

 

Veritabanımız (JSON):

 

{

    "brands": {

        "-M8Fd45N8gw8Zu-irlqa": {

            "name": "Microsoft",

            "website": "https://www.microsoft.com"

        },

        "-M8Fd6t9X704AqgCretl": {

            "name": "Apple",

            "website": "https://www.apple.com"

        },

        "-M8Fd9J7sXPsTToI8rmw": {

            "name": "Google",

            "website": "https://www.google.com"

        },

        "-M8Fdl9HwdAXam02o70m": {

            "name": "Amazon",

            "website": "https://www.amazon.com"

        }

    },

    "users": {

        "-M8Fc9548yXalvDE9SZF": {

            "firstName": "Joe",

            "lastName": "Doe"

        },

        "-M8FcARKpnFYoCc11dp0": {

            "firstName": "Jane",

            "lastName": "Doe"

        },

        "-M8FcDm1LcGjNeEakhbI": {

            "firstName": "John",

            "lastName": "Doe"

        },

        "-M8FgkS6Q29B9HQvd9GX": {

            "firstName": "Jack",

            "lastName": "Doe"

        }

    }

}

 

Modelimiz:

 

public class User

    {

        public string firstName { get; set; }

        public string lastName { get; set; }

    }

 

    public class Brand

    {

        public string name { get; set; }

        public string website { get; set; }

    }

 

    public class ResponseResult

    {

        public Dictionary<string, User> users { get; set; }

        public Dictionary<string, Brand> brands { get; set; }

    }

 

Kodumuz:

 

using (var httpClient = new HttpClient())

            {

                using (var response = await httpClient.GetAsync("https://proje_id.firebaseio.com/.json"))

                {

                    string apiResponse = await response.Content.ReadAsStringAsync();

                    var result = JsonConvert.DeserializeObject<ResponseResult>(apiResponse);

                }

            }

 

Bu kodlar ile bir http client oluşturup ilgili adrese GET isteği atarak gelen sonucu Json Deserialize işlemi ile C# nesnesine dönüştürüyoruz. Artık result değişkenini istediğimiz gibi kullanabiliriz.

 

Eğer tüm kayıtlar yerine alt kayıtlardan bir tane çekmek istersek bu sefer base addresi ihtiyacımıza göre değiştirmemiz gerekiyor. Örneğin users kayıtlarını çekmek istiyorsak 'https://[PROJECT_ID].firebaseio.com/users.json’ şeklinde bir base addresi çağırabiliriz.

 

Diğer HTTP isteklerini de benzer şekilde kullanabiliriz. Ben örnek bir proje hazırlayıp GitHub’a ekledim. Bu örnek projede kayıt okuma, kayıt ekleme, kayıt güncelleme ve kayıt silme işlemlerine ait CRUD operasyonlarının nasıl yapılabileceğini görebilir ve ihtiyaçlarınıza göre geliştirebilirsiniz. Projeye erişmek için;

 

https://github.com/aykutkaskaya/firebase

Yorumlar

Henüz hiç yorum yok.

Yorum Yap