Kotlin ile Retrofit Kütüphanesi Entegrasyonu

En son güncellendiği tarih: May 30

Retrofit kütüphanesi; REST servisler ile çalışmamız gereken durumlarda işimizi oldukça kolaylaştıran bir networking kütüphanesidir. REST; sunucudaki kaynakların, HTTP protokolü ile GET, POST, DELETE gibi metodlarla kullanılmasıdır. Bu işlemleri gerçekleştirebilmek için alternatif olarak Volley kütüphanesine de göz atabilirsiniz.


Volley için: https://github.com/google/volley


Görsel Referansı


Kütüphanenin nasıl çalıştığını daha iyi anlamak için bir örnek üzerinden devam edeceğiz.

Örneğimizde bir Film Api'sinden liste çekeceğiz. Bu Api'yi ücretsiz olarak hesap oluşturup kullanabilirsiniz. (https://www.themoviedb.org/)


Bu adresten hesap oluşturmanız durumunda bir api_key elde edeceksiniz. Bunu servis çağırımında parametre olarak kullanacağız.


Öncelikle uygulamamıza internet izni vermemiz gerekiyor. Bunun için "manifests" klasörü altında bulunan AndroidManifest.xml dosyasına giriyoruz.



İnternet kullanımı için izin kodunu ekliyoruz.

<uses-permission android:name="android.permission.INTERNET" />



Retrofit Kütüphanesinin İmplementasyonu


Şimdi işe Retrofit kütüphanesini projeye nasıl uygulayacağımızı (Implementation) göstererek başlayacağım. Öncelikle projemizin Gradle Scripts kısmında bulunan build gradle(Module:app)'e tıklayarak dependencies içine geliyoruz. Buraya Retrofit kütüphanemizi ekleyeceğiz.











Bunu da implementation anahtar kelimemizle gerçekleştiriyoruz. Burada güncel Retrofit kütüphanesini kullanmak için https://github.com/square/retrofit/releases adresini kontrol etmelisiniz.



Retrofit ile Çağırılacak Servisin Postman ile Denenmesi


Şimdi GET ile çağıracağımız servisin json çıktısına bir göz atalım. Bu bize, oluşturacağımız Model ile ilgili fikir verecek.


Postman ile API'ımıza bir istek atıp kontrol edelim. themoviedb.org'dan çağıracağımız servis hesap oluştururken elde ettiğimiz api_key ile çalışıyor. Bu nedenle postman'de api key bilgisini vererek json response'u elde ediyoruz. Aşağıdaki url'e tıklayıp dönen alanları browser'dan da inceleyebilirsiniz.


https://api.themoviedb.org/4/list/1?api_key=d2a157ab9b412aedbc3362c383bbab7f&page=1




Aşağıdaki bağlantı ile export edilmiş json dosyasına erişebilir ve postman'e import ederek de direk deneyebilirsiniz.

https://drive.google.com/file/d/1i2w6f5eleqVosEDjjkXtAgXvD857zbTK/view?usp=sharing



Model Oluşturma


Bir sonraki adımda model oluşturuyoruz. Model oluştururken data class'ları kullanıyoruz. Kullanım amacımız bazı fonksiyonları otomatik tanımlamasıdır. (constructor. Fields. Getter ve setter fonksiyonları gibi.) Constructor'daki değişken isimlerini Json'daki field'larla birebir aynı veriyoruz. Amacımız parse işleminin doğru şekilde tamamlanabilmesini sağlamak.


Interface Oluşturma


Şimdi sıra interface oluşturmaya geldi. Burada öncelikle bir ApiService (isim değişebilir) adında interface sınıfı oluşturuyoruz. Kullanacağımız endpoint'lerin konfigürasyonunu burada gerçekleştiriyoruz. Endpoint'in GET, POST vs istek türünü annotation olarak yazıp içine de base URL'den kalan URL kısmını string olarak belirtiyoruz.


@GET("list/1")


Burada eğer endpoint'imiz GET parametresi alıyorsa, bu parametreyi, Query annotation'ı ile metod'a input olarak geçiyoruz. Diğer Parametre türleri içinse farklı annotation'lar bulunmaktadır. Dönüş tipini(model) call sınıfına template olarak veriyoruz. Oluşturduğumuz response modelin adı MovieResponse'du.


fun getMovies(@Query("api_key") apiKey:String, ...):Call<MovieResponse>



Burada bir de POST ile ilgili örnek vermek istiyorum. Aşağıdaki örnekte @Body annotaion'ı ile POST servise User adında body objesinin iletildiğini görebilirsiniz.


GET örneğimize devam edelim.


Retrofit Config


İşlemlerimizi uyguladıktan sonra Retrofit konfigürasyonu yapmamız gerekiyor. Bunun için ApiClient sınıfını oluşturuyoruz.


Sınıfımız içerisinde getApiService metodu içerisinde Retrofit builder objesini oluşturup dönmemiz gerekli. Bu objeyi oluştururken gerekli base url'imizi ekliyoruz, çektiğimiz json verilerini Gson nesnelerine dönüştürmek için gerekli olan factory objesini oluşturup addConverterFactory ile builder'a ekliyoruz. Son olarak nesnemizi build ediyoruz.


Sunucuda erişeceğimiz endpoint'lerin istek türlerini (POST-GET), dönüş modellerini, istek modellerini belirttiğimiz interface'i create fonksiyonuna parametre olarak vererek bir retrofit nesnesini oluşturduk.



Data Çekme İşlemi


Hazırlık aşamamız burada bitti. Artık datayı çekeceğimiz kodları yazacağız.


  • ApiClient.getApiService ile retrofit builder'a erişiyoruz,

  • .getMovies(Constants.API_KEY,page) diyerek hangi endpoint'i kullandığımızı belirtiyoruz,

  • .enqueue(object : Callback<MovieResponse> ile de retrofit kuyruğuna isteğimizi ekliyoruz.



Daha sonra onFailure ve onResponse metodlarımızı override ediyoruz.


  • İsteğimiz ile ilgili yaşadığımız hatalar onFailure 'a düşüyor.(400,401,503 gibi)

  • İsteğimizin cevabının başarılı döndüğü durumlardaysa onResponse çalışır. Burada sadece convert ile ilgili yaşanan hatalar görünür. Modelimize göre convert edilmiş dataya, response.body() üzerinden erişebiliriz.



Sunucudan data çekme işlemini bitirmiş olduk. Bir sonraki yazıda POST, PUT ve DELETE metodlarını da Retrofit kütüphanesiyle kullanacağız.


Projeye aşağıdaki github linkinden erişebilirsiniz

https://github.com/BatikanUgur/Movies


#refrofit #android #kotlin #restAPI


Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın