Retrofit jest klientem HTTP zorientowanym na typowanie obiektów zapytań, używającym do żądań bibliotekę OkHttp. Umożliwia w łatwy sposób pobieranie i przesyłanie danych w formie obiektów lub schemacie JSON za pośrednictwem usługi internetowej opartej na REST. Ponadto pozwala na wykonywanie zapytań w sposób synchroniczny i asynchroniczny z uwzględnieniem uwierzytelniania i rejestrowania stanu operacji. Aby rozpocząć pracę z Retrofit należy dokonać definicji klasy modelu danych, interfejsu deklarującego możliwe operacje HTTP oraz instancji klasy Retrofit.Builder, której zadaniem jest zbudowanie usługi w oparciu o wskazane zależności.
Model
Konwerter podejmuje próbę konwersji otrzymanego wyniku do zadaklerowanego typu klasy modelu o strukturze danych reprezentującej oczekiwany rezultat. Wartości zostają przypisane tylko do właściwości zachowujących zgodność z formatem odpowiedzi, tzn. brakujące lub nadmiarowe pola są ignorowane. Poniższy listing przedstawia przykładową strukturę modelu Product i Producer dla zadanej odpowiedzi w formacie JSON.
Interfejs
Rolą interfejsu jest zadeklarowanie metod odwołujących się do zasobów sieciowego API. Za pomocą adnotacji @GET, @POST, @PUT, @DELETE możliwe jest określenie rodzaju zapytania dla architektury REST. Zapytania mogą być parametryzowane przy użyciu argumentów metody oznaczonych jako @Path i @Query. Poza wysyłaniem danych w formie text/plain wspierana jest także obsługa zapytań typu application/x-www-form-urlencoded (adnotacja @FormUrlEncoded) oraz multipart/form-data (adnotacja @Multipart). Dodatkowo możliwe jest ustawienie metadanych nagłówka w adnotacji @Headers.
Budowniczy
Aby wykorzystać stworzone API w interfejsie należy zbudować instancje typu Retrofit przy pomocy budowniczego Retrofit.Builder podając przynajmniej bazowe URL oraz opcjonalnie m.in. konwerter (np. Gson, Protobuf, Simple XML), adapter i klienta HTTP. Następnie wykorzystując obiekt Retrofit stworzyć instancję wybranego interfejsu API.
Zapytanie
Żądanie sieciowe dla metody zapytania zwracającego instancje typu Call może zostać wykonane synchronicznie przy użyciu metody execute lub asynchronicznie metodą enqueue wraz z przekazaniem obiektu zwrotnego typu Callback.
Autoryzacja
W sytuacji, gdy zapytania wymagają autoryzacji możliwe jest dodanie tokenu autoryzacyjnego do zapytania przy użyciu adnotacji @Header("Authorization"), jednakże w takim przypadku autoryzacja dotyczy tylko tego żądania. Aby dodać autoryzację do wszystkich zapytań należy dodać obiekt typu Interceptor do konfiguracji klienta.
RxJava
Retrofit umożliwia współpracę z RxJava (metody mogą zwracać Observable) poprzez dodanie adaptera RxJava2CallAdapterFactory do konfiguracji budowniczego co sprawia, że tworzenie aplikacji z wykorzystaniem obu bibliotek staje się prostsze. Dzięki temu Retrofit jest nierzadko wybierany jako podstawowy klient sieciowy w aplikacji używających RxJava.