Retrofit
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


