RESTEasy Client API

1. Úvod

V predchádzajúcom článku sme sa zamerali na RESTE Ľahko implementácia servera na serveri JAX-RS 2.0.

JAX-RS 2.0 predstavuje nové klientske rozhranie API, aby ste mohli odosielať požiadavky HTTP do vašich vzdialených webových služieb RESTful. Jersey, Apache CXF, Restlet a RESTEasy sú iba podmnožinou najpopulárnejších implementácií.

V tomto článku preskúmame, ako konzumovať REST API zasielaním žiadostí s a RESTEasy API.

2. Nastavenie projektu

Pridajte do svojho pom.xml nasledujúca závislosť:

 3.0.14.Final org.jboss.resteasy resteasy-client $ {resteasy.version} ... 

3. Kód na strane klienta

Implementácia klienta je celkom dobrá a skladá sa z 3 hlavných tried:

    • Zákazník
    • WebTarget
    • Odozva

The Zákazník rozhranie je staviteľ servera WebTarget inštancie.

WebTarget predstavuje samostatnú adresu URL alebo šablónu adresy URL, z ktorej môžete vytvoriť ďalšie podzdrojové webové ciele alebo na ktoré môžete vyvolať žiadosti.

Existujú skutočne dva spôsoby, ako vytvoriť klienta:

  • Štandardným spôsobom pomocou org.jboss.resteasy.client.ClientRequest
  • RESTeasy Proxy Framework: pomocou ResteasyClientBuilder trieda

Tu sa zameriame na RESTEasy Proxy Framework.

Namiesto použitia anotácií JAX-RS na mapovanie prichádzajúcej požiadavky na vašu metódu RESTFul Web Service vytvára klientske rozhranie požiadavku HTTP, ktorú používa na vyvolanie na vzdialenej RESTful Web Service.

Začnime teda písať rozhranie Java a používať anotácie JAX-RS na metódy a na rozhranie.

3.1. The ServicesClient Rozhranie

@Path ("/ films") verejné rozhranie ServicesInterface {@GET @Path ("/ getinfo") @Produces ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) Movie movieByImdbId (@QueryParam ("imdbId"); reťazec imdbId @POST @Path ("/ addmovie") @Consumes ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) Odpoveď addMovie (filmový film); @PUT @Path ("/ updatemovie") @Consumes ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) Response updateMovie (filmový film); @DELETE @Path ("/ deletemovie") Odpoveď deleteMovie (@QueryParam ("imdbId") Reťazec imdbId); } 

3.2. Filmová trieda

@XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "film", propOrder = {"imdbId", "title"}) verejná trieda Film {chránený reťazec imdbId; chránený názov reťazca; // zakladatelia a zakladatelia}

3.3. Vytvorenie žiadosti

Teraz vygenerujeme proxy klienta, ktorého môžeme použiť na využitie API:

Reťazcový transformátorImdbId = "tt0418279"; Movie transformerMovie = nový film ("tt0418279", "Transformer 2"); final String path = "//127.0.0.1:8080/RestEasyTutorial/rest"; Klient ResteasyClient = nový ResteasyClientBuilder (). Build (); ResteasyWebTarget target = client.target (UriBuilder.fromPath (cesta)); ServicesInterface proxy = target.proxy (ServicesInterface.class); // POST Response filmsResponse = proxy.addMovie (transformerMovie); System.out.println ("HTTP code:" + moviesResponse.getStatus ()); moviesResponse.close (); // ZÍSKAJTE filmové filmy = proxy.movieByImdbId (transformerImdbId); // PUT transformerMovie.setTitle ("Transformer 4"); moviesResponse = proxy.updateMovie (transformerMovie); moviesResponse.close (); // ODSTRÁNIŤ moviesResponse = proxy.deleteMovie (batmanMovie.getImdbId ()); moviesResponse.close (); 

Upozorňujeme, že API klienta RESTEasy je založené na Apache HttpClient.

Upozorňujeme tiež, že po každej operácii budeme musieť zavrieť odpoveď, aby sme mohli vykonať novú operáciu. Je to nevyhnutné, pretože klient má v predvolenom nastavení k dispozícii iba jedno pripojenie HTTP.

Na záver si všimnite, ako pracujeme priamo s DTO - nezaoberáme sa logikou maršala / unmaršala do az JSON alebo XML; to sa deje v zákulisí použitia JAXB alebo Jackson od Film trieda bola správne anotovaná.

3.4. Vytvorenie požiadavky s fondom pripojení

Jedna poznámka z predchádzajúceho príkladu bola, že sme mali k dispozícii iba jedno pripojenie. Ak sa napríklad pokúsime urobiť:

Odpoveď batmanResponse = proxy.addMovie (batmanMovie); Response transformerResponse = proxy.addMovie (transformerMovie); 

bez dovolania Zavrieť() na batmanResponse - pri spustení druhého riadku bude vyvolaná výnimka:

java.lang.IllegalStateException: Neplatné použitie BasicClientConnManager: pripojenie je stále pridelené. Pred pridelením ďalšieho nezabudnite uvoľniť pripojenie. 

Opäť - to sa jednoducho stáva, pretože predvolené HttpClient používa RESTEasy je org.apache.http.impl.conn.SingleClientConnManager - ktorý samozrejme sprístupňuje iba jedno pripojenie.

Teraz - obísť toto obmedzenie - RestEasyClient inštancia musí byť vytvorená inak (s fondom pripojení):

PoolingHttpClientConnectionManager cm = nový PoolingHttpClientConnectionManager (); CloseableHttpClient httpClient = HttpClients.custom (). SetConnectionManager (cm) .build (); cm.setMaxTotal (200); // Zvýšenie maximálneho celkového počtu pripojení na 200 cm.setDefaultMaxPerRoute (20); // Zvýšenie predvoleného maximálneho počtu pripojení na jednu cestu na 20 ApacheHttpClient4Engine engine = nový ApacheHttpClient4Engine (httpClient); Klient ResteasyClient = nový ResteasyClientBuilder (). HttpEngine (engine) .build (); ResteasyWebTarget target = client.target (UriBuilder.fromPath (cesta)); ServicesInterface proxy = target.proxy (ServicesInterface.class);

Teraz môžeme ťažiť zo správneho fondu pripojení a môže cez nášho klienta bežať niekoľko požiadaviek, bez toho, aby bolo nutné zakaždým uvoľňovať spojenie.

4. Záver

V tomto rýchlom návode sme predstavili RESTEasy Proxy Framework a vytvorili sme s ním super jednoduché klientske rozhranie API.

Rámec nám poskytuje niekoľko ďalších pomocných metód na konfiguráciu klienta a dá sa definovať ako zrkadlo oproti špecifikáciám na strane servera JAX-RS.

Príklad použitý v tomto článku je k dispozícii ako vzorový projekt v GitHub.


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