Interceptors -Http Responses

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

--

Bu yazı retrofit rehberinin 5.bölümüdür. Daha önceki bölümleri okumadıysanız aşağıdaki linkten önceki yazılara ulaşabilirsiniz.

INTERCEPTORS

Interceptorlar’ı header eklemek, kaldırmak veya dönüştürmek için kullanabiliyoruz. Ayrıca istekleri gözlemleyebilirler. Hatta gelen istekleri, bir interceptor ekleyerek log ekranına bastırmak için bir örnek yapmıştık sizle. Zaten konu genel itibarı ile basit. Ancak isterseniz interceptor ile bir custom class yazıp Interceptorler sayesinde atılacak istekleri daha kolay manipule edebilir veya gözlemleyebilirsiniz. Hadi o zaman başlayalım.

Aslında yapmamız gereken tek şey Service kısmı içerisinde api objesinde erişmek yerine buna bir fonksiyon yazmak örneğin getApi fonksiyonunu yazalım içine api oluşturulmadan şimdi açıklayacağımız bu kod satırlarını eklemeniz yeterli. Peki burada ne yaptık? Logging örneklerimizde zaten bir istemci yaratmıştık(2. bölümdeki örnekte mevcut) yapacağımız tek şey bu istemciye interceptor ekleyip daha sonra gene client’ı api’ye eklemek. addInterceptor metodu lambda expression ile chain değişkenini verdi. Chain için atılan istekte çalıştırılacak Interceptorları tetikleme sırası diyebiliriz. (Bazı durumlarda bu yapıyı kullanmamız gerekebiliyor.) Ancak biz sadece bir header ekleyeceğiz. Hemen bize verilen ilgili chain’den request’imizi alıp addHeader metodu ile bir user-agent ekledik. daha sonra build edip hali hazırdaki chain’imize bu isteği işliyoruz. Ve işlem tamam daha artık bundan sonra bu Interceptor ile çalışan bütün isteklerde bu header otomatik olarak eklenecektir. :) Bir kere yaz her yerde kullan diyerek java’ya da diss’imizi atıp devam edelim.

SYNCHRONOUS & ASYNCHRONOUS İSTEKLER

Retrofit kardeşimizi aslında boşuna kullanmıyoruz demiştik. Neydi bizim için önemli olan kısımlar? Senkron ve Asenkron istek atabiliyor demiştik bu kütüphane için. Senkron ve asenkron kavramlarını açıklayalım daha sonra devam edelim. Senkron istekler isteği atıp bir sonraki metodu çalıştırmak için isteğin başarılı ya da başarısız olarak dönmesini bekleyen isteklerdir. Asenkron istekler ise hali hazırda yürütülen iş parçacağını ilgilendirmez. Kendi arka planda istekleri atar ve cevabını bekler.

Retrofit Çözümleri

Asynchronous

call.enqueue dediğimizde isteği asenkron olarak atmış oluruz.

Synchronous

bu yapı ise isteği senkron çağırmamızı sağlayan bir yapıdır. (Spoiler: direkt bu şekilde çağırırsak hata verecektir. Main thread’i response gelene kadar kitler ve uygulamamız çöker. :))

Canceling Requests

Retrofit ile attığımız istekleri cancel() kullanarak iptal edebiliyoruz.

Aslında buraya kadar her şey güzel ancak aslında coroutine’lerin yardımına ihtiyaç duyabileceğimiz bazı yapılar da mevcut.

Peki Coroutine’leri neden kullanmalıyız?

  • Temiz syntax
  • Retrofit’i desteklemesi
  • Ui ve main thread gibi işlemlerini kolayca handle edebiliyoruz
  • Eğer daha önce biraz ilgilendiyseniz SupervisorJob ile bütün istekleri çok kolay şekilde yönetebiliyoruz
  • Async ya da sync işlemleri sorunsuz yapabiliyoruz
  • Suspend, async -await, runBlocking, launch, flow gibi yapılarla rxjava’nın bize sağladığı ve sağlamadığı bir çok thread base işlemi yapabilmemizi sağlar

Profesyonel projelerde çalışacağınız yapılardır. Ancak coroutineler ile ilgili örnekleri bu rehberde yapmayacağım.

Http Responses

En çok karşımıza çıkabilecek bazı status codelardan bahsedelim.

Başarılı 2xx

Bu durum kodu sınıfı, client’in talebinin başarıyla alındığını gösterir.

200 Ok

İstek başarılı oldu. Yanıtla birlikte döndürülen bilgiler, istekte istenilen parametrelere bağlıdır.

201 Created

İstek yerine getirildi ve yeni bir kaynağın oluşturulmasıyla sonuçlandı.

202 Accepted

İstek proses’e dahil edildi, ancak işlem tamamlanmadı.

400 Bad Request

Yanlış biçimlendirilmiş sözdizimi nedeniyle istek sunucu tarafından anlaşılamadı. İstemci, talebi değişiklik yapmadan TEKRARLAMAMALIDIR.

401 Unauthorized

İstek, kullanıcı kimlik doğrulaması gerektiriyor.

404 Bulunamadı

Sunucu, İstek-URI ile eşleşen hiçbir şey bulamadı

Bu yazıda retrofit’i tanımayı, kullanmayı dilim döndüğünce anlatmaya çalıştım. Öğrendikçe geliştikçe ekleyeceğim. Dilerim faydalı olmuştur. Coroutine rehberinde görüşmek üzere! :)

Gökhan ÖZTÜRK ve Burak Karabulut’a katkıları için teşekkür ederim.

--

--

İnanç Yılmaz
İnanç Yılmaz

Written by İnanç Yılmaz

Android Developer, Industrial Engineer

No responses yet