Retrofit - interceptory

Kliknij i wspomóż mnie :)

Android

Wstęp

Ten materiał jest częścią kursu Retrofit2 w Android na platformie Udemy. W kursie przeprowadzam Cię od podstaw teorii architektury REST przez konsumowanie danych, aż po projekt własnego API.

Kilka darmowych odcinków można znaleźć tutaj:

Kurs Retrofit2

1. Co to jest Retrofit?

Retrofit 2 jest bezpiecznie typowanym klientem HTTP stworzonym przez Square.

Oznacza to tyle, że wykorzystując tą bibliotekę i podając jedynie endpointy (adresy url do odpowiedzi np. w formacie JSON) otrzymamy sparsowane obiekty do wygodnej obsługi w kodzie.

2. Interceptor, czyli przechwytywanie w locie ✈

Bezpośrednie pobieranie czy wysyłanie danych poprzez Retrofit'a jest dosyć trywialne i o to chodziło 😁

Co jednak, kiedy chcemy wykonać coś z naszą odpowiedzią zanim zostanie ona sparsowana i wykorzystana?

Rozwiązaniem są tutaj interceptory. Ich położenie wygląda tak: [odpowiedź z serwera] -> [Interceptor] -> [Klient].

Oznacza to, że mogą one przekazać przetworzoną odpowiedź lub po prostu stanowić jakiś 'side-effect'.

3. Kiedy przydają się interceptory?

Najczęstszym przypadkiem, kiedy ich używamy jest na pewno logowanie danych do konsoli. Jest nawet specjalna klasa HttpLoggingInterceptor w paczce okhttp.

Znane mi zastosowania interceptorów:

  • Logowanie
  • Podmiana adresu URL
  • Interpretacja błędów
  • Szyfrowanie danych
  • Przepisywanie nagłówka
  • Autoryzacja

W tym artykule pokażę jak obsłużyć logowanie oraz obsługę błędów, jako, że są to raczej najpowszechniejsze użycia na podstawowym etapie 🤓

4. Logowanie odpowiedzi za pomocą HttpLoggingInterceptor

Na początku musimy zaimportować bibliotekę:

Następnie utworzyć instancję klasy HttpLoggingInterceptor:

Bardzo ważne jest ustawienie szczegółowości logowania

Dostępne do wyboru są: BASIC, BODY, HEADERS, NONE. Dokładną specyfikację można przeczytać tutaj:

HttpLoggingInterceptor.Level

Dodatkowo warto ustalić redagowanie nagłówka w celu uniknięcia logowania wrażliwych danych.

Builder Retrofit'a przyjmuje jako parametr instancję OkHttpClient, także trzeba opakować nasz interceptor w powyższego klienta 📦

Gotowa funkcja zwracająca gotowy interceptor może wyglądać tak:

5. Parsowanie błędów z API

Jest pewna grupa błędów z API, które bez względu na rodzaj zapytania chcemy interpretować tak samo.

Błąd 401 czyli autoryzacji czy 500 jako błąd serwera, a nie naszej aplikacji.

Takie błędy dobrze by było wyłapywać globalnie i np. Od razu kierować użytkownika do ekranu logowania.

W tym przykładzie pokażę, jak samemu zdefiniować własny interceptor.

Jak zwykle zaczynamy od zdefiniowania budowniczego dla klienta.

Następnie dodajemy do niego interceptor i tutaj zamiast zmiennej przekazuję klasę anonimową z metodą intercept. Jak widać musi ona przekazać dalej jakąś odpowiedź.

Pierwsze co robimy w ciele funkcji to pobranie zapytania z łańcucha.

Następnie wykonujemy to zapytanie i otrzymujemy odpowiedź.

Finalnie z odpowiedzi możemy otrzymać kod odpowiedzi, który będzie definiować czy operacja się powiodła czy nie.

Ja parsuję kod błędu w osobnej klasie:

Kody błędów można znaleźć tutaj:

Kody odpowiedzi HTTP

Bardzo ważne, żeby na sam koniec zwrócić odpowiedź 😉

6. Jak dodać interceptor do Retrofit'a?

Tak na prawdę cała praca została już wykonana i dodanie interceptorów jest bardzo łatwe.

Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊

O mnie

Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.

Zobacz więcej

Najnowsze posty

Kliknij i wspomóż mnie :)

Zostańmy w kontakcie

* Wymagane
Kliknij i wspomóż mnie :)
shop
Otwórz Sklep Play

Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.