Retrofit

Kamil Kurzyna

Zaktualizowaliśmy ten tekst dla Ciebie!
Data aktualizacji: 9.01.2024
Autor aktualizacji: Paulina Janowska

Retrofit to biblioteka w języku Java stworzona z myślą o łatwym wywoływaniu REST API. Jak zostanie pokazane poniżej, będziemy potrzebować jedynie prostej reprezentacji POJO (Plain Old Java Object) oczekiwanego wyniku API, interfejsu do jego zdefiniowania oraz obiektu odpowiedzialnego za korzystanie z Retrofit.

Przykład

Najpierw potrzebujemy reprezentacji POJO naszego oczekiwanego wyniku JSON

public class MyApiPojo {
    private int id;
    private String value;
}

Następnie możemy utworzyć prosty interfejs, który będzie wykonywał wywołanie do API

public interface MyApiService {
    @GET("/myapi")
    Call<MyApiPojo> getMyApi();
}

Teraz czas na ostatni krok czyli stworzenie buildera Retrofit

import retrofit2.Retrofit;

public class MyApiServiceProvider {

    private MyApiService myApiService;

    public MyApiServiceProvider() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.github.com/")
                .build();
        myApiService = retrofit.create(MyApiService.class);
    }


    public MyApiService getService() {
        return myApiService;
    }
}

Dzięki tym prostym klasom możemy już korzystać z REST API do endpointu „myapi”:

MyApiServiceProvider provider = new MyApiServiceProvider();
MyApiService myApiService = provider.getService();
Call<MyApiPojo> result = myApiService.getMyApi();
Response<MyApiPojo> response = result.execute();
MyApiPojo pojo = response.body();

Jak widać jest to bardzo proste. Obiekty Call i Response pochodzą bezpośrednio z biblioteki Retrofit.

Niektórzy z was mogą pomyśleć „A co, jeśli chcę użyć parametrów w ścieżce lub zapytaniach?” Bez obaw, Retrofit obsługuje również takie sytuacje:

public interface MyApiService {
    @GET("/myapi/{pathValue}")
    Call<MyApiPojo> getMyApi(@Path("pathValue") String pathValue, @Query("queryParam") String queryParam);
}

Autoryzacja? Oczywiście! Definiowanie nagłówków? Też jest! Potrzebujesz czegoś więcej? Retrofit prawdopodobnie to obsłuży.

Ok, ale co tu się właściwie dzieje?

Prześledźmy to linijka po linijce 

@GET("/myapi")
Call<MyApiPojo> getMyApi();

Pierwszą rzeczą, którą należy wiedzieć jest to, że Retrofit korzysta z biblioteki okhttp3. Można nawet powiedzieć, że retrofit jest wrapperem dla tej biblioteki, stąd tak mała ilość kodu potrzebna do działania. W powyższym kodzie interesujący może wydawać się obiekt generyczny Call,  który jest po prostu wrapperem dla javowej klasy Executor.

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.github.com/")
        .build();
myApiService = retrofit.create(MyApiService.class);

Tworzymy instancję Retrofit, która przy użyciu refleksji stworzy proxy dla interfejsu MyApiService (zgodnie z wzorcem projektowym Proxy).

Call<MyApiPojo> result = myApiService.getMyApi();
Response<MyApiPojo> response = result.execute();
MyApiPojo pojo = response.body();

Tutaj widzimy, że result to zwykły executor w Javie, a response to wrapper okhttp3. Jak wspomniano na początku, głównym celem Retrofit jest maksymalne uproszczenie wywołań REST API dla użytkownika.
I to wszystko!

Poznaj mageek of j‑labs i daj się zadziwić, jak może wyglądać praca z j‑People!

Skontaktuj się z nami