Retrofit Rehberi: Avantajları ve Android’de Retrofit ile RESTful API Etkileşimi

Mustafa Kürşad Başer
4 min readNov 27, 2023

--

Retrofit article cover

Merhaba, bu yazımda, Android uygulama geliştirme sürecinde sıklıkla kullanılan ve HTTP isteklerini yönetmek, RESTful API’larla etkileşim kurmak için ideal bir çözüm sunan Retrofit kütüphanesine odaklanacağız.

RESTful API’larla etkileşim kurmak için ideal bir çözüm sunan Retrofit kütüphanesine odaklanacağız. Bu açık kaynaklı networking kütüphanesi, kullanım kolaylığı ve modüler yapısıyla öne çıkıyor. Özellikle, servis arayüzleriyle basit API tanımlama, modüler yapı oluşturma, gelişmiş hata izleme, RxJava ile asenkron yapıyı destekleme ve özelleştirilebilir istek yapısı gibi avantajlarıyla Retrofit, Android geliştiricileri tarafından tercih ediliyor.

Yazının devamında, Retrofit’in temel sınıfları ve kullanım avantajlarına daha detaylı bir bakış atacağız.

https://github.com/square/retrofit

Kısaca: Nedir Bu Retrofit?

Square tarafından geliştirilen Retrofit kütüphanesi, HTTP isteklerini yönetmek ve RESTful API’larla etkileşim kurmak için geliştirilmiş, açık kaynak kodlu bir networking kütüphanesidir.

Retrofit, Android için geliştirilmiş bir network kütüphanesidir. Ayrıca, iOS uygulamaları için Alamofire, URLSession kütüphaneleri en popüler alternatifleridir. Flutter için DIO ve HTTP kütüphaneleri, React Native içinse Axios kütüphanesi, o platformlara özel Retrofit benzeri API çağrıları için çözüm oluşturan kütüphanelerdir.

Retrofit gibi, Volley ve AsyncTask’de, Android uygulamalarında network isteklerini yönetmek için kullanılan yaklaşımlardır. Retrofit, kısaca belirttiğimiz ve yazının devamında daha detaylı değineceğim gibi; güçlü bir kullanım kolaylığı ve modüler yapı sağlayarak öne çıkar. AsyncTask, basit senaryolarda kullanışlı olabilir ancak karmaşık uygulamalarda sorunlara yol açabilir. Volley ise özellikle resim ve metin gibi farklı kaynaklardan ağ istekleri yapmak için idealdir ancak bazı durumlarda esneklik konusunda sınırlamalar getirebilir.

Android Asynch HTTP Clients: Volley vs Retrofit

Retrofit Kullanmanın Avantajları

1. Anlaşılır ve Kolay Kullanım

Retrofit, servis arayüzleriyle basit ve okunabilir bir API tanımlama sağlar.

Bu örnekte, getUser metodu, belirli bir kullanıcının bilgilerini çekmek için kullanılan basit bir GET isteğini temsil eder.

2. Modüler Yapı

Modüler yapı, Retrofit kullanıcılarına servis arayüzlerini ve istek yapılandırmalarını ayrı dosyalarda veya sınıflarda tanımlama esnekliği sunar. Bu, projenizi daha düzenli ve bakımı daha kolay hale getirir. Örneğin, kullanıcı ve gönderi işlemleri için iki farklı servis arayüzünü ayrı dosyalarda tanımlamak şu şekildedir:

Bu örnekte, UserService ve PostService adlı iki ayrı servis interface’i, ilgili işlemlerin düzenli bir şekilde gruplandığı modüler bir yapı sağlar. Bu yaklaşım, projenizin büyüdükçe daha fazla servis eklemeyi ve her birini ayrı dosyalarda düzenlemeyi kolaylaştırır.

3. Gelişmiş Hata İzleme ve Ayıklama

Retrofit’in hata izleme özelliği sayesinde, oluşan hataların ayrıntılı raporları alınabilir.

Bu örnekte, Response sınıfı kullanılarak Retrofit isteğinin yanıtı alınır. isSuccessful metodu ile başarılı bir yanıt kontrol edilir ve yanıt içeriği yani body alınarak işlemlere devam edilir. Eğer yanıt başarılı değilse, HTTP hata durumları işlenir ve duruma göre özel işlemler gerçekleştirilebilir. Ayrıca, IOException ile ağ hatası veya dönüş değeri alınamazsa işlenir.

4. RxJava ile Asenkron Yapıyı Destekler

Retrofit, asenkron programlama modelini kullanmayı kolaylaştıran RxJava entegrasyonunu destekler. Örneğin, bir kullanıcının bilgilerini çekmek için yapılan bir GET isteği:

Bu örnekte, Single<User> dönüş tipi kullanılarak, RxJava’nın sağladığı asenkron operasyonları entegre edebiliyoruz, bu sayede, kullanıcı bilgilerini çekme işlemi asenkron bir şekilde gerçekleştirilebilir.

5. Özelleştirilebilir İstek (Request) Yapısı

Retrofit, isteklere özel ayarlar eklemek için esnek bir yapı sunar. Örneğin, belirli bir isteğe özel bir başlık eklemek istediğinizde, @Headers anotasyonunu kullanabiliriz. Aşağıdaki örnekte, bir kullanıcının bilgilerini çekmek için yapılan isteğe "Cache-Control" başlığını ekliyoruz:

“Accept” başlığı, bir HTTP isteği gönderildiğinde, istemcinin sunucuya hangi türde bir yanıt beklediğini belirtir. Bu örnekte “application/json” değeri, istemcinin JSON formatında bir yanıt beklediğini ifade eder. Yani, sunucudan gelecek olan verinin JSON formatında olması beklenir.

Öte yandan, “Cache-Control” başlığı, önbellekleme davranışını kontrol eder. “max-age=640000” ifadesi, sunucudan alınan yanıtın önbellekte belirtilen süre boyunca (bu örnekte 640000 saniye) kullanılabilir olmasını sağlar. Böylece, aynı veriyi tekrar tekrar almak yerine, istemci belirtilen süre içinde önbelleğe alınan veriyi kullanabilir.

Bu şekilde, “Accept” ve “Cache-Control” gibi başlıkları kullanarak Retrofit kullanıcıları, her API çağrısını daha spesifik ve ihtiyaca yönelik bir şekilde özelleştirebilirler. Örneğin, farklı API’lerle çalışırken hangi veri formatının kullanılacağını belirleyebilir veya önbellekleme sürelerini isteğe bağlı olarak ayarlayabilirler.

Retrofit’de Kullanılan Temel Sınıflar (Class):

1. Model Sınıfları (Model Class): Model sınıfları, JSON formatındaki verileri Java nesnelerine dönüştürmek için kullanılır. JSON dosyalarından elde edilecek nesneleri içerirler ve genellikle API’nin yanıtlarını temsil ederler. Örneğin, kullanıcı bilgilerini içeren bir JSON yanıtını temsil etmek üzere bir “User” sınıfı oluşturulabilir.

Bu şekilde, Retrofit, JSON formatındaki kullanıcı bilgilerini bu Java sınıfına otomatik olarak dönüştürebilir.

2. Retrofit Instance: Retrofit Instance, bir API’ye HTTP isteği göndermek için kullanılan temel Java sınıfıdır. Bu sınıf, API ile iletişim kurmak için gerekli olan tüm ayarları ve özellikleri içerir. Örneğin, bir Retrofit Instance oluşturarak belirli bir API’ye bağlanabilir ve bu instance üzerinden istekleri yönetebilirsiniz.

Bu örnekte, bir Retrofit Instance oluşturulmuş ve bu instance üzerinden “ApiService” adındaki bir interface kullanılarak API’ye istek göndermeye hazır hale getirilmiştir.

3. Arayüz Sınıfları (Interface Class): Retrofit, API ile iletişim kurmak için arayüz sınıflarını kullanır. Bu sınıflar, API’nin endpoint’lerini, istek metodlarını ve dönen veri tiplerini belirtir. Arayüz sınıfları, uygulama kodu ile Retrofit arasında bir köprü görevi görür. Örneğin, kullanıcı bilgilerini getiren bir API endpoint’ini temsil eden bir arayüz sınıfı şu şekilde olabilir:

Bu örnekte, ApiService adlı interface sınıfı, “users/{userId}” endpoint’ine bir GET isteği gönderen ve User sınıfıyla uyumlu bir yanıt bekleyen bir metod içerir.

Sonuç

Retrofit, Square, Inc. tarafından geliştirilen bir networking kütüphanesi olarak öne çıkıyor. Android uygulamaları için optimize edilmiş bu kütüphane, HTTP isteklerini yönetmek ve RESTful API’larla etkileşim kurmak amacıyla tasarlanmış açık kaynaklı bir araçtır.

Retrofit’in avantajları arasında anlaşılır ve kolay kullanım, modüler yapı, gelişmiş hata izleme ve ayıklama özellikleri bulunmaktadır. Ayrıca, RxJava ile asenkron yapıyı desteklemesi ve özelleştirilebilir istek yapılarıyla esnekliği artırması, geliştiricilere geniş bir kullanım alanı sunmaktadır. Bu sayede, Android uygulama geliştiricileri, projelerini daha düzenli bir şekilde yönetebilir ve özelleştirilmiş isteklerle daha güçlü bir iletişim kurabilirler.

Bu yazımı beğendiyseniz diğer yazılarıma da göz atmanızı öneririm, aynı zamanda kişisel blog’umdaki yazılarıma bu bağlantıdan göz atabilirsiniz.

--

--