Sprievodca po RESTEasy

1. Úvod

JAX-RS (Java API for RESTful Web Services) je sada Java API, ktorá poskytuje podporu pri vytváraní REST API. Rámec dobre využíva anotácie na zjednodušenie vývoja a nasadenia týchto rozhraní API.

V tomto tutoriále použijeme RESTEasy, JBoss poskytnutú prenosnú implementáciu špecifikácie JAX-RS, aby sme vytvorili jednoduché RESTful webové služby.

2. Nastavenie projektu

Ideme dvaja a zvážime dva možné scenáre:

  • Samostatné nastavenie - určené na prácu na každom aplikačnom serveri
  • Nastavenie JBoss AS - zvážiť iba nasadenie v JBoss AS

2.1. Samostatné nastavenie

Začnime používaním JBoss WildFly 10 so samostatným nastavením.

JBoss WildFly 10 prichádza s verziou RESTEasy 3.0.11, ale ako uvidíte, nakonfigurujeme ju pom.xml s novou verziou 3.0.14.

A vďaka resteasy-servlet-initializer, RESTEasy poskytuje integráciu so samostatnými Servlet 3.0 kontajnery cez ServletContainerInitializer integračné rozhranie.

Poďme sa pozrieť na pom.xml:

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

jboss-deployment-structure.xml

V rámci JBoss je všetko, čo je nasadené ako WAR, JAR alebo EAR, modul. Tieto moduly sa označujú ako dynamické moduly.

Okrem nich existujú aj niektoré statické modulov v $ JBOSS_HOME / moduly. Pretože JBoss má RESTEasy statické moduly - pre samostatné nasadenie, jboss-deployment-structure.xml je povinné, aby sa vylúčili niektoré z nich.

Týmto spôsobom všetky triedy a JAR súbory obsiahnuté v našom VOJNA bude načítané:

2.2. JBoss ako Setup

Ak sa chystáte spustiť program RESTEasy s JBoss verzie 6 alebo vyššej, môžete si zvoliť adoptovanie knižníc, ktoré sú už priložené k aplikačnému serveru, a tým zjednodušíte pom:

  org.jboss.resteasy resteasy-jaxrs $ {resteasy.version} 

Všimni si jboss-deployment-structure.xml už nie je potrebný.

3. Kód na strane servera

3.1. Verzia servletu 3 web.xml

Poďme sa teraz rýchlo pozrieť na web.xml nášho jednoduchého projektu tu:

  Príklad RestEasy resteasy.servlet.mapping.prefix / rest 

resteasy.servlet.mapping.prefix je potrebný iba v prípade, že chcete pridať relatívnu cestu k aplikácii API.

V tejto chvíli je veľmi dôležité všimnúť si, že sme žiadne nevyhlásili Servlet vweb.xml pretože pokojný servlet-inicializátor bol pridaný ako závislosť v pom.xml. Dôvod je - RESTEasy poskytuje org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer triedy, ktorá implementuje javax.server.ServletContainerInitializer.

ServletContainerInitializer je inicializátor a vykoná sa skôr, ako bude pripravený akýkoľvek kontext servletu - tento inicializátor môžete použiť na definovanie servletov, filtrov alebo poslucháčov pre vašu aplikáciu.

3.2. Trieda aplikácie

The javax.ws.rs.core.Application class je štandardná trieda JAX-RS, ktorú môžete implementovať, aby ste poskytli informácie o svojom nasadení:

@ApplicationPath ("/ rest") verejná trieda RestEasyServices rozširuje aplikáciu {private Set singletons = new HashSet (); public RestEasyServices () {singletons.add (nový MovieCrudService ()); } @Override public Set getSingletons () {return singletons; }}

Ako vidíte - toto je jednoducho trieda, ktorá obsahuje zoznam všetkých koreňových zdrojov a poskytovateľov JAX-RS a je anotovaná @ApplicationPath anotácia.

Ak vrátite ľubovoľnú prázdnu množinu podľa tried a singletonov, bude WAR skontrolovaný na zdroje anotácií JAX-RS a triedy poskytovateľov.

3.3. Trieda implementácie služieb

Nakoniec sa pozrieme na skutočnú definíciu API tu:

@Path ("/ films") verejná trieda MovieCrudService {súkromný inventár mapy = nový HashMap (); @GET @Path ("/ getinfo") @Produces ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public Movie movieByImdbId (@QueryParam ("imdbId") String imdbId) {if (inventory.containsKey) imdbI .get (imdbId); } else {return null; }} @POST @Path ("/ addmovie") @Consumes ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) verejná odpoveď addMovie (filmový film) {if (null! = Inventory.get (film.getImdbId ())) { return Response .status (Response.Status.NOT_MODIFIED) .entity ("Film je už v databáze."). build (); } inventory.put (film.getImdbId (), film); vrátiť Response.status (Response.Status.CREATED) .build (); }}

4. Závery

V tomto rýchlom výučbe sme predstavili program RESTEasy a vytvorili sme s ním super jednoduché API.

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