Retrofit Nedir? Ne Değildir ?

İnanç Yılmaz
3 min readDec 5, 2020

Selam herkese,

Bu yazıda size retrofit’i olabildiğince detaylı şekilde anlatmaya çalışacağım. Yazı bir rehber şeklinde olacaktır.

Retrofit Rehberi

  • Retrofit temelleri
  • Retrofit’i kullanalım
  • Metotlar
  • Queryler
  • Headerlar
  • Interceptors

RETROFIT BASICS (Retrofit’in Temelleri)

Haydi başlayalım. Öncelikle bir road map üzerinden ilerlemeden anlatacağımız teknolojinin hangi problemlerini çözdüğünü öğrenmek bizim için önemli. Haydi başlayalım.

Retrofit nedir?

Retrofit temel olarak bir kütüphane, bir network kütüphanesidir. Retrofit açık kaynak kodlu bir rest istemcisidir.

https://github.com/square/retrofit

Bir yapı nasıl çalışırdan önce onu neden kullanacağımızdan konuşalım öyleyse. Öncelikle uzak sunucudan diğer veri çekme metotlarını inceleyecek olursak;

AsyncTask yapısı bir çözümdü. Daha doğrusu çözümümsüydü. İlk sorunu yavaşlığı olmasına rağmen view işlemleri komplike hale dönüşmüştü. Ancak sonralardan anlaşılan, asynctask’ın Memory Leak’e sebebiyet veriyor olması dolayısıyla bu teknolojinin kullanışsız hale geleceği düşünülmekteydi ki öyle de oldu. Asyntask’ı, kadim dostumuzu deniz ötesinde bulunduğu söylenen hiçbir insanın gözüyle gidip görmediği deprecated diyarına göndermek zorunda kaldık.

Sonrasında Volley diye bir kütüphane icat ettik. Volley network katmanıyla olan işlerimizi çok çabuk bir şekilde halletmesinin yanında o iş öyle olur mu deyip, kartallarla götürülen yüzük misali daha az kod yazmamıza yardımcı oldu. Ve network işlemlerimizi asynchronous şekilde de halledebiliyordu. Asynctask yapma elin öyle kalır oğlum.

Güç yüzüğümüzü takıp Volley’i icat ettik etmesine de kim bilirdi ki 5.günün şafağında Retrofit’in geleceğini. Tam olarak 5.gün mü bilinmez ancak kullanışlı bir kütüphane square tarafından hizmete sunulmuş oldu. Retrofit abimiz, daha sonradan anlatacağım şuanda spoiler’ını verdiğim birkaç terimden biri olan Baseurl’ni, basit annotationlar ile manipule edebilirsin haberini verdikten sonra heyecanlanmamak elde değil tabi. Volley’de bunları kadim elflerin bir de Gökhan ÖZTÜRK’ün elleriyle yaptıkları söylenir.

O zaman bir toplayalım.

  • Retrofit url’yi dynamic olarak değiştirebiliyor.
  • Retrofit en hızlı network kütüphanesi.
  • Retrofit’in içindeki callbackler ile sayesinde error handling’i destekler.
  • Retrofit ile Json Parsing, Gson ile kolayca yapılabiliyor.
  • Retrofit senkron veya asenkron network communication’ı sağlayabiliyor.

Retrofit Basics

Retrofit’in 3 temel ögesi vardır.

  • Pojo Class(Data Class)
  • Interface
  • Service

Hadi bunlardan biraz daha detaylı bahsedelim.

Data Class

Javadaki pojo class’lardır aslında response içindeki hiyerarşiyi sağladığımız basit yapılardır. Uzak sunucudan bizlere dönecek json formatındaki verinin çeşitli coverterlar yardımı ile cast-map edileceği sınıflardır. Hadi bir örnekle daha güzel açıklamaya çalışalım.

Daha sonra kendi request’imizi yapmadan önce bu basit örnek üzerinden açıklayacak olursak, network isteği attığımızda gelen cevabın isim ve soyisim şekilde olacağını varsayalım. Bu durumda bir class açtık ve data class olarak belirttik ve içine userName ve firstName şeklinde iki veri geleceğeni belirttik.

Interface

Aslında demin bahsettiğimiz url manipulation’ın devreye gireceği, network isteklerimizi daha sonra oluşturacağımız service üzerinden fonksiyonel şekilde istek atabileceğimiz yapılardır. Atacağımız istek sırasında bu istekle ilgili baseUrl’in devamında gideceğimiz, servisin uzantı linki, isteğin metodu, parametlerini, bunları headerda mı body’de mi yoksa link path’inde mi göndereceğimizi, dönecek response json yapısının hangi class’a cast-map edileceğini söylediğimiz bölümlerdir.

Örneğin burada UserApi diye bir interface tanımladık. daha sonra “@GET” annotation’ı ile retrofit’e get metodunu kullanması gerektiğini söyledik. Bundan hemen bir sonraki bölümde retrofit’in metotlarını inceleyeceğiz. Ancak şuanlık “@GET” metodu ile bir istek atacağımızı belirttik, ve bu isteği atarken BaseUrl dediğimiz isteği atacağımız linkin sonuna uzantıyı koymuş olduk. BaseUrl basitçe istek atacağımız sayfanın ana url’idir. Url manipulation’ın da detaylıca işleyeceğiz. Örneğimizde BaseUrl’imiz www.example.com/ olarak geçeceğinden şuan “@GET” fonksiyonu içinde yazan getUser uzantısı, callGetUser metodu çağrıldığı anda www.example.com/getUser sayfasına bir istek atacak ve dönen cevap Call nesnesi içinde demin kurduğumuz DataClass’a gönderilecek. :)

Servis

Servis kısmı için aslında basitçe isteği attığımız object diyebiliriz.

UserService adında bir object oluşturduk ki daha sonraları bunun neden singleton yapısında olması gerektiğini de konuşacağız ancak şuanda buraya girmiyorum.

Burada sırayla yaptıklarımız

  • BASE_URL dediğimiz istek atacağımız sayfanın ana url’sini belirttik.
  • userApi adındaki objeye Retrofit’in builder sınıfını kullanarak atacağımız isteğin baseurl’ini belirttik.
  • addConverterFactory aslında dönen yanıt tipini neye çevireceğini söyleyen bir yapı. Biz json’ı java objelerine çevireceğiz ancak burada daha sonra diğerleri içinde bazı örnekler söylemek için boş bırakıyorum.
  • Daha sonra build edip create ederken kendi hazırladığımız interface’imizi gönderiyoruz. Böylece interface’te hazırladığımız o metotlara bu obje üzerinden artık ulaşabiliriz.

Aslında temelde bütün componentleri öğrendik hadi bir sonraki yazıda gerçek bir uygulama yapıp bunları orada görelim.

--

--