REST client pozwala na skomunikowanie się z API oraz pobranie z niego danych. W zależności od implementacji klient może pobierać dane w postaci surowej (najczęściej JSON lub XML), lub też dokonywać automatycznego mapowania odpowiedzi na obiekty.
Zbiór otwartych API
Przed przystąpieniem tworzenia klienta, musimy wybrać API z którym się połączymy. Jeśli nie masz sprecyzowanego API, a chcesz od razu przećwiczyć tworzenie klienta to rekomenduję Ci:
https://github.com/public-apis/public-apis
Jest to otwarta lista usług, które możesz też wykorzystać do budowy swoich projektów.
Rest Client w Java
W klasycznej aplikacji Java sami dobieramy bibliotekę, która będzie nam umożliwiała komunikacje z usługą REST.
Gson
Chociaż Gson jest biblioteką służącą do mapowania JSON -> POJO, to w połączeniu ze standardowym API Java I/O możemy utworzyć bardzo funkcjonalnego klienta HTTP.
Instrukcje jak wykorzystać możliwości dostarczane przez Gson przedstawiam w materiale wideo, który od podstaw prezentuje jak połączyć się z API Google Maps oraz pobrać z niego interesujące obiekty, które finalnie zostaną wyświetlone.
Jako alternatywę zaprezentowałem również JsonObject, który zwalnia nas z konieczności tworzenia modelu danych i pozwala na wyciąganie danych prosto z obiektu.
OkHttp i Unirest
OkHttp to jedna z najbardziej podstawowych bibliotek do tworzenia klientów HTTP. Zgodna z protokołami SPDY i HTTP/3. Jest również bardzo często wykorzystywana w aplikacjach mobilnych – dostarcza wsparcie dla Java i Kotlin.
Unirest z kolei stanowi bardzo lekką i łatwą alternatywę dla OkHttp.
Oba te rozwiązania jest bardzo łatwo zaimplementować dzięki wbudowanemu w Postman’a generatora kodu źródłowego.
Dla przykładu wykorzystajmy następujące API:
https://cat-fact.herokuapp.com/facts/random
Po wykonaniu żądania możemy zobaczyć w Postman’nie zakładkę Code
Generator kodu pozwala na dostarczenie implementacji dla wielu języków, oraz rozmaitych bibliotek:
Pozostałe popularne biblioteki
- Apache HTTP Components – biblioteka, która jest na ten moment dominującym rozwiązaniem i najczęściej wykorzystywanym według danych Maven Repository. Łatwy w użyciu, pozwala również na komunikację asynchroniczną.
- Ning Async-http-client – zapewnia obsługę NIO. Wcześniej znany jako Async-http-client wspierany przez Sonatype.
- Retrofit – zmienia interfejs API HTTP w interfejs Java. Wewnątrz kodu odwołujemy się do API tak samo jakbyśmy wywoływali metody klasy z narzuconym interfejsem. Samo odczytywanie, dodawanie i pozostałe operacje dostępne przez API nie różnią się zbytnio od operacji na klasach w obrębie jeden aplikacji.
- Feign – rozwiązanie bazujące na Retrofit, bardzo dobrze integruje się ze Spring.
- Volley – biblioteka rozwijana przez Google, głównie na potrzeby Android’a.
- Google HTTP Client Library For Java – jak nazwa wskazuje 🙂 Rozwiązanie dla wymagających.
- Resteasy – wrapper przeznaczony na JakartaEE, rozwiązanie utrzymywane przez JBoss.
- REST Assured – bardzo popularne rozwiązanie, które wykorzystywane jest na potrzeby realizacji testów.
Rest Client w Spring
Spring oferuje rozwiązania, które są wrapperami do istniejących bibliotek, co sprawia, że wykorzystanie ich w ramach tego framewroka jest dużo łatwiejsze. W zależności od wersji i potrzeb możemy wykorzystać:
- RestTemplate – klient HTTP dostarczanym w Spring Web – domyślne, jednak blokujące rozwiązanie;
- WebClient – reaktywny klient HTTP od Spring WebFlux – bazującym na nieblokującym Reactor Netty. Dostępne od wersji Spring 5/Spring Boot 2
- Retrofit/Feign – alternatywny, uproszczony sposób odpytywania klienta.