Microsoft Xamarin Istanbul Development Meetup “Xamarin Resilient Network Services Bölüm 1”
Herkese Selamlar, biraz geç olsa da 25 ekim günü Microsoft Türkiye‘de yaptığımız etkinlikteki konuyla ilgili yazma fırsatı ancak bulabiliyorum. Güzel bir etkinlik günü geçirdik, 3 farklı değerli arkadaşımla beraber aşağıdaki konulara değinmiştik.
• .Net Core ile Dependency Injection (Özgür Kaplan)
• Xamarin ile Dependency Injection (Yiğit Özaksüt)
• Xamarin ile Resilient Network Services (bunu ben anlattım ve burada da uzunca değineceğim detaylarına.)
• C# hakkında doğru bilinen yanlışlar ve performans ipuçları (Cihan Yakar)
Benim anlattığım Xamarin ile Resilient Network Services sunumum ile ilgili proje ve dosyaları buradan inceleyebilirsiniz.
Katılan dinleyici ve konuşmacı tüm arkadaşlara teşekkür ederek kendi konumun detaylarına giriş yapıyorum.
Bu konu ile ilgili aslında yazmak istediğim birkaç blog serisi var. Aslında genel bakış açısını burada belirtip detaylarına diğer blog postlarımda değineceğim.
İlk olarak şu Resilient(Esnek) kelimesinden başlayalım. Ne demek bir yapının esnek olması. Bu aslında şu demek;
- Kurduğumuz yapı, belli hatalar karşısında nasıl davranacığını önceden bilen, öncelikleri belli ve değiştirilebilir esnek kırılmaz bir yapı olmalı.
Bu yapı, diğer tüm yazılım projelerinde, uygulamayı mümkün olduğunca sağlıklı bir şekilde ayakta tutmak için kullanılan mimari bölümlerin(Ölçeklenebilir olması, esnek olması, hızlı olması, güvenilir olması vs vs..) küçük bir parçası aslında. Bu sistemin ben yazılım projelerinin olmaz ise olması Networking üzerinde anlattım, çünkü danışmanlıklarımda gördüğüm ve eğitimler de hissettiğim en büyük açık burada mevcut idi.
using (var client = new HttpClient()) { client.BaseAddress = new Uri("https://randomuser.me/api/"); var content = await client.GetStringAsync("?results=10&page=1"); var result = JsonConvert.DeserializeObject<ResponseModel>(content); }
Yıkarıda ki kod bloğunu bir bakalım. Birçok projede bir API haberleşmesi için gördüğüm kod bu kadar da kalıyor. Daha üzerine düşünülmüş olanlarda ise bu şekilde bir kullanım generic bir class içerisine yerleştirilmiş ve onun içerisinden haberleşme çağırılıyor oluyor. Fakat içeriği pek de değişmiyor. Peki bu koddaki yanlış nedir? Yada var mıdır?
Benim gördüğüm kadarı ile şöyle;
Koda ilk bakışta bir yanlış gözükmüyor olabilir. Evet derlenir ve çalışır da, hatta herşey iyi giderse response u alıp gerekli çevirme işlemlerini de yapar. Ama işte bu kod bloğunda birçok şey yolunda gider varsayılmış. Http client objesinin static tanımlanmamış olması ve bunun sıkıntılarına başka zaman değineceğim bunu şimdilik göz ardı edelim diğer konulara bakalım.
- Internette bir sorun olduğunda bu request ne olacak
- Server dan 500 aldığında request im ne yapmalı, 503 olduğunda ne olmalı.
- Time out yersem ne yapmalıyım? yeniden göndermeli miyim requesti? Eğer gönderecek isem kaç kere göndermeliyim, ne kadar ara vermeliyim?
- Response cachlenebilir bir response mu eğer öyle ise bunu da devreye koysam güzel olmaz mı?
- Bu request uygulama içerisinde gidecek olan diğer requestlere göre bir farkı önceliği var mı?
gibi gibi sorular aklıma geliyor. İşte tüm bu konular üzerinden bir xamarin projesinde kullanmamız ve güzel bir networking altyapısı kurmanız için size 5 farklı ve değerli kütüphaneden bahsedeceğim. Ve bunların hepbirden nasıl uyumlu olarak kullanabiliriz buna değineceğim.
Kütpühaneleri şunlar;
- Refit: The automatic type-safe REST library for .NET Core, Xamarin and .Net
- Fusillade: An opinionated Http library for mobile development
- ModernHttpClient: Platform spesific networking libraries to Xamarin applications
- Akavache: An Asynchronous Key-Value Store for Native Applications
- Polly: .Net resilience and transient-fault-handling library
kısaca açıklamlarını direk kendi github adreslerindeki gibi yazdım kenarlarına. Detaylarına ve örneklerine sırası ile diğer postlarımda başlayacağım. Hepsinden bahsettikten sonra da bir arada bir xamarin projesinde nasıl kullanılırız buna bakacağız.
Bir sonraki yazımda görüşmek üzere.