Retrofit Nedir? Nasıl Kullanılır?

Retrofit, Android Developerlar arasında sıklıkla kullanılan bir networking kütüphanesidir. Retrofit’in bu kadar popüler olmasında REST API’lara kolaylıkla erişebilme, test edilebilir ve kolay kullanımı etkendir.

Bu yazıda Retrofit’in nasıl kullanılacağından bahsetmeye çalışacağım.

Kurulum

Öncelikle build.gradle dosyasına alttaki gibi dependency ekliyoruz.

JSON çıktılarını POJO classlara dönüştürmek için GSON kullanacağız. Retrofit bize GSON için ayrı bir converter kütüphanesi sağlıyor. Bunu da aynı şekilde dependecy lere ekliyoruz.

Network istekleri yapacağımız için projemizde INTERNET iznini de almamız gerekiyor. Onun için Manifest dosyasına alttaki izni ekliyoruz.

Artık Retrofit kullanmaya başlayabiliriz.

Kullanım

Yapacağımız örnekte fake API çağrıları yapabilmemizi sağlayan JSONPlaceholder API kullanacağız.

Retrofit nesnesini içerisinde oluşturacağımız NetworkService adında bir class oluşturuyoruz. Üstte sınıfın constructor metodunda retrofit nesnesini oluşturduk. Burada baseUrl() metoduna üzerinde çalışağımız API adresini yazdık. addConverterFactory() metodu içerisinde üstte convert için dahil ettiğimiz kütüphanenin GsonConverterFactory.create() metodunu ekledik. Burada farklı converter kütüphaneleri kullanılabilir. Örneğin converter olarak Moshi kullanıyorsanız bunun gerekli converter kütüphanesini dahil edip addConverterFactory() metoduna parametre olarak vereceksiniz. getInstance() metodunda ise oluşturduğumuz retrofit nesnesini döndüren bir yapı kurduk. Burada singleton design pattern kullandık. Her seferinde yeni bir nesne oluşturmak yerine bir kere oluşturup sonrasında var olan nesneyi çağırdık.

API’dan okuyacağımız verileri POJO classlara aktarmamız gerekiyor.

Kullanacağımız API’da posts/5 endpointe istek attığımızda alttaki gibi bir istek geliyor. Bu çıktıyı alttaki gibi bir POJO classa çevirebiliriz. Gördüğünüz gibi JSON çıktısındaki verileri aynı isimle @SerializedName annotation kullanarak alıp propertylere atadık ve onların getter, setter metodlarını yazdık. Şimdi kullanacağımız API isteklerini yazacağımız bir arayüz oluşturacağız. Bunu da ApiInterface olarak adlandıralım.

Bu arayüzün içine istek türleri (GET, POST, PUT, DELETE) ile birlikte endpointleri ve gerekli parametreleri ekleyeceğiz.

Örneğin bizim istek atacağımız endpoint posts/5 şeklinde olacak. Burada bize id ye göre 1 tane post objesi döndürüyor. Buna uygun olarak ApiInterface arayüzünü yazalım. GET requesti yaptığımız için Retrofit’in @GET annotation kullandık ve buna parametre olarak endpointi yazdık. Dikkat ederseniz id değeri değişken olabildiği için bu kısmı süslü parantezler içinde yazdık ve alttaki metoda bunu @Path annotation kullanarak parametre olarak verdik.

Dönüş değeri olarak yine bir Retrofit classı olan Call arayüzünü kullanarak buna yazdığımız Post classını Call<Post> şeklinde verdik.

Şimdi Retrofit’ten bize ApiInterface arayüzümüzün oluşturulmasını isteyeceğiz. Bunun için NetworkService classını güncellememiz gerekiyor.

Gördüğünüz gibi classın en altında getJSONApi() metodu ile bu işlemi gerçekleştirdik.

Şimdi son aşama olarak yazdığımız api isteklerini nerede yapacaksak onu orada çağırmamız gerekiyor. Örneğin bir activity içerisinde alltaki gibi bir çağrım yapabiliriz.

Burada enqueue metodu ile yeni bir CallBack<Post> objesi oluşturduk. Bunun içerisinde 2 adet metod override ediliyor. onResponse request başarılı olduysa, onFailure ise herhangi bir hata olduysa çalışır. onResponse parametlerinden Response<Post> içerisinde gelen değerleri barındırır.

Aynı API üzerinden farklı istekler yapalım. Örneğin /posts endpointini kullanarak bütün postları alalım. Bunun için arayüzde yazmamız gereken kod alttaki gibi olacaktır.

Ya da /posts?userId=2 şeklinde bir çağrım yapmak istersek o zaman isteğimiz şöyle olacaktır.

Burada endpointe userId şeklinde query eklediğimiz için queryi, Retrofit’in @Query annotationa query ile aynı isimde parametre olarak veriyoruz.


POST işlemi yapmak istenildiğinde ise kodumuz alttaki gibi olacaktır.

Burada @Body annotation ile post edilecek verileri direk olarak obje şeklinde gönderebiliyoruz.

Retrofit kullanımı basit olarak bu şekilde. Eğer daha fazla bilgi almak istiyorsanız retrofit dökümantasyona göz atabilirsiniz.

https://square.github.io/retrofit/

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.