Az utólagos felszerelés integrálása az RxJava-val

1. Áttekintés

Ez a cikk arra összpontosít, hogyan lehet egy egyszerű RxJava-kompatibilis REST klienst megvalósítani a Retrofit használatával.

Készítünk egy példaalkalmazást, amely együttműködik a GitHub API-val - a szokásos Retrofit megközelítés használatával, majd az RxJava segítségével továbbfejlesztjük a reaktív programozás előnyeinek kiaknázására.

2. Sima utólagos felszerelés

Készítsünk először egy példát a Retrofit alkalmazással. A GitHub API-k segítségével válogatott listát kapunk az összes olyan közreműködőről, akiknek több mint 100 hozzájárulása van bármelyik tárban.

2.1. Maven-függőségek

A Retrofit alkalmazással indítsuk el ezeket a Maven-tárgyakat:

 com.squareup.retrofit2 utólagos 2.3.0 com.squareup.retrofit2 átalakító-gson 2.3.0 

A legújabb verziók megtekintéséhez tekintse meg a Maven Central adattárának utólagos felszerelését és a konverter-gson-t.

2.2. API interfész

Hozzunk létre egy egyszerű felületet:

nyilvános felület GitHubBasicApi {@GET ("users / {user} / repos") HíváslistaRepos (@Path ("user") String felhasználó); @GET ("repos / {user} / {repo} / közreműködők") HíváslistaRepoContributors (@Path ("user") String felhasználó, @Path ("repo") String repo); }

A listRepos () A metódus lekérdezi az adott felhasználó elérési útjának paramétereként átadott adattárak listáját.

A listRepoContributers () A metódus lekérdezi az adott felhasználó és adattár közreműködőinek listáját, mindkettő elérési útként paraméterként továbbítva.

2.3. Logika

Végezzük el a szükséges logikát a Retrofit használatával Hívás objektumok és normál Java kód:

osztály GitHubBasicService {privát GitHubBasicApi gitHubApi; GitHubBasicService () {Retrofit retrofit = new Retrofit.Builder () .baseUrl ("// api.github.com/") .addConverterFactory (GsonConverterFactory.create ()) .build (); gitHubApi = retrofit.create (GitHubBasicApi.class); } A getTopContributors lista (String felhasználónév) dobja az IOException {List repos = gitHubApi .listRepos (felhasználónév) .execute () .body (); repos = repos! = null? repók: Collections.emptyList (); return repos.stream () .flatMap (repo -> getContributors (userName, repo)) .sorted ((a, b) -> b.getContributions () - a.getContributions ()) .map (Contributor :: getName). külön () .rendezve () .collect (Collectors.toList ()); } privát adatfolyam getContributors (String felhasználónév, Repository repo) {List közreműködők = null; próbáld ki a {közreműködők = gitHubApi .listRepoContributors (felhasználónév, repo.getName ()) .execute () .body (); } catch (IOException e) {e.printStackTrace (); } közreműködők = közreműködők! = null? közreműködők: Collections.emptyList (); visszatérő közreműködők.stream () .filter (c -> c.getContributions ()> 100); }}

3. Integráció az RxJava-val

Az utólagos felszerelés lehetővé teszi számunkra, hogy a szokásos helyett egyedi kezelőkkel fogadjuk a hívások eredményeit Hívás objektumot az Utánépítés használatával Hívás adapterek. Ez lehetővé teszi az RxJava használatát Megfigyelhetők és Folyékony itt.

3.1. Maven-függőségek

Az RxJava adapter használatához bele kell foglalnunk ezt a Maven-műtárgyat:

 com.squareup.retrofit2 adapter-rxjava 2.3.0 

A legújabb verzióért kérjük, ellenőrizze az adapter-rxjava alkalmazást a Maven központi adattárában.

3.2. Regisztrálja az RxJava hívásadaptert

Tegyük hozzá RxJavaCallAdapter az építtetőnek:

Retrofit retrofit = új Retrofit.Builder () .baseUrl ("// api.github.com/") .addConverterFactory (GsonConverterFactory.create ()) .addCallAdapterFactory (RxJavaCallAdapterFactory.create ()) .build ();

3.3. API interfész

Ezen a ponton megváltoztathatjuk az interfész metódusainak visszatérési típusát Megfigyelhető inkább mint Hívás. Használhatunk más Rx típusokat is Megfigyelhető, Folyékony, Egyetlen, Talán, Teljes.

Módosítsuk az API felületünket Megfigyelhető:

nyilvános felület GitHubRxApi {@GET ("users / {user} / repos") Megfigyelhető listRepos (@Path ("user") karakterlánc felhasználó); @GET ("repos / {user} / {repo} / közreműködők") Megfigyelhető listRepoContributors (@Path ("user") String felhasználó, @Path ("repo") String repo); }

3.4. Logika

Végezzük el az RxJava használatával:

osztály GitHubRxService {privát GitHubRxApi gitHubApi; GitHubRxService () {Retrofit retrofit = new Retrofit.Builder () .baseUrl ("// api.github.com/") .addConverterFactory (GsonConverterFactory.create ()) .addCallAdapterFactory (RxJavaCallAdapterFactory.). gitHubApi = retrofit.create (GitHubRxApi.class); } Megfigyelhető getTopContributors (Karakterlánc felhasználónév) {return gitHubApi.listRepos (felhasználónév) .flatMapIterable (x -> x) .flatMap (repo -> gitHubApi.listRepoContributors (felhasználónév, repo.getName ()) }flatMap (x) xFlatMap .filter (c -> c.getContributions ()> 100) .sorted ((a, b) -> b.getContributions () - a.getContributions ()) .térkép (Contributor :: getName) .distinct (); }}

4. Következtetés

Összehasonlítva a kódot az RxJava használata előtt és után, azt tapasztaltuk, hogy a következő módszerekkel javult:

  • Reaktív - mivel adatunk most folyik az áramokban, ez lehetővé teszi számunkra, hogy aszinkron folyam feldolgozást végezzünk nem blokkoló ellennyomással
  • Világos - deklaratív jellege miatt
  • Tömör - az egész művelet egy műveleti láncként ábrázolható

A cikk összes kódja elérhető a GitHubon.

A csomag com.baeldung.retrofit.basic tartalmazza az alapvető utólagos felszerelési példát, míg a csomag com.baeldung.retrofit.Az rx tartalmazza az RxJava integrációval ellátott utólagos felszerelési példát.


$config[zx-auto] not found$config[zx-overlay] not found