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: 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é: 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: Všimni si jboss-deployment-structure.xml už nie je potrebný. Poďme sa teraz rýchlo pozrieť na web.xml nášho jednoduchého projektu tu: 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. The javax.ws.rs.core.Application class je štandardná trieda JAX-RS, ktorú môžete implementovať, aby ste poskytli informácie o svojom nasadení: 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. Nakoniec sa pozrieme na skutočnú definíciu API tu: 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. 3.0.14.Final org.jboss.resteasy resteasy-servlet-initializer $ {resteasy.version} org.jboss.resteasy resteasy-client $ {resteasy.version}
2.2. JBoss ako Setup
org.jboss.resteasy resteasy-jaxrs $ {resteasy.version}
3. Kód na strane servera
3.1. Verzia servletu 3 web.xml
Príklad RestEasy resteasy.servlet.mapping.prefix / rest
3.2. Trieda aplikácie
@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; }}
3.3. Trieda implementácie služieb
@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