Bölüm 1: Basit ve Temiz Network Katmanı Yazalım

Kurtuluş Ahmet TEMEL
3 min readApr 14, 2020

--

Unsplash

Selamlar Arkadaşlar,

Bu yazımızda Clean Swift Mimarisi ve SpaceX API ile geliştireceğimiz uygulamamızın network katmanını oluşturacağız.

https://docs.spacexdata.com/?version=latest

Yukarıda gördüğünüz üzere SpaceX firması sunduğu bu Public API ile bize elindeki roket, uzay gemisi gibi bilgileri sunuyor. Ayrıca bu API herhangi bir authentication işlemi de istemiyor.

Öncelikle uygulamamız için tek bir workspace ile çoklu proje yapısı kurmayı uygun gördüm. Bu şekilde bir yapı kurmamın sebebi projeyi daha modüler hale getirmektir. Bu kısım için ilgili linkten yardım alabilirsiniz. Buna ek olarak çoklu proje yapısındaki workspace için cocoapods kullanımı yazımı inceleyerek kendi geliştirme ortamınızı hazır hale getirebilirsiniz. Ne gereği var diyerek bildiğiniz gibi de yapabilirsiniz. 😁

Ek olarak biz bu katmanı yazarken çoğu iOS Uygulama Geliştiricisi’nin bildiği ve severek kullandığı Alamofire kütüphanesinden destek alacağız.

Network katmanımıza CNetwork (Clean Network) ismini seçtim 😁

Constans Yapısını Oluşturma

Öncelikle kullanacağımız bazı sabitleri bir dosyada toplayalım. Bunun için bir Constants.swift dosyasını oluşturuyoruz. İçerisinde şimdilik baseUrl ve enum olarak HttpHeaderField ve ContentType değerlerini tutalım. Constans dosyamız aşağıdaki gibi olacaktır.

API Router Yapısını Oluşturma

Uygulamamız içerisinde kullanacağımız endpoint bilgilerini burada oluşturuyoruz. Buraya kısmen projenin bel kemiği niteliğinde diyebiliriz. Emin olun kullanırken size oldukça kolaylık sağlayacak. Oluşturduğumuz router içerisinde endpoint’e ait HTTP method, HTTP headers, path ve parameters gibi bilgiler yer alacak.

Ben şimdilik SpaceX API içerisinde yer alan roketleri ve roket detaylarını getiren endpoint bilgilerini kullanacağım. Bu endpointler GET olarak çağrılıyor. Oluşturduğumuz CNetworkRouter.swift dosyasının son hali aşağıdaki gibidir.

Siz bu Router’ı kendi uygulamanızda hem GET hem de POST istekleri yapmak için uyarlayabilirsiniz.

Şimdi İstekleri Gerçekleştirme Zamanı

Enpointlerimizi ayarladıktan sonra sıra istekleri gerçekleştireceğimiz bir Executer yazmaya geldi. Önce katmanımızda kullanmak üzere bir error enum oluşturuyoruz.

Ardından CNetwork.swift dosyasını oluşturuyoruz. Bu dosyamızda singleton bir sınıf yer alacak ve şimdilik içerisinde sadece execute metodunu bulunduracak. Bu metodumuz Alamofire ile isteğimizi yapacak ve sonucu verdiğimiz response modeline (M) dönüştürüp bize sunacak.

İlk parametre olarak yukarıda anlattığımız CNetworkRouter değerini alacak. İkinci parametre olarak dönüştürmek istediğimiz response model type değerini alacak. Sonraki parametre ile istek esnasında bir loader gösterip göstermeyeceğimiz bilgisini veriyoruz. Son olarak metoda completion closure bilgilerini veriyoruz. Burada Swift.Result yapısını kullanıyoruz. Success durumunda M tipinde bir model döneceğimizi, failure durumunda ise önceki satırlarda bahsettiğim CNetworkError tipinde bir Error nesnesi döneceğiz.

CNetwork sınıfımızın son hali aşağıdaki gibi olacak;

Yazdığımız execute metodunun kullanımı ise aşağıdaki gibi olacaktır.

Bir sonraki yazımızda artık Clean Swift mimarisini ve yazdığımız network katmanını kullanarak ekranlarımızı geliştirmeye başlayacağız. Bu seri kapsamında Rockets ve RocketDetail ekranlarını yazacağız.

En kısa sürede görüşmek üzere… 👋

--

--