Vodič za RESTEasy

1. Uvod

JAX-RS (Java API za RESTful Web Services) skup je Java API-ja koji pruža podršku u stvaranju API-ji REST. A okvir dobro koristi napomene za pojednostavljivanje razvoja i primjene ovih API-ja.

U ovom uputstvu koristit ćemo RESTEasy, JBoss je omogućio prijenosnu implementaciju JAX-RS specifikacije, kako bi se stvorile jednostavne RESTful web usluge.

2. Postavljanje projekta

Idemo dva razmotriti dva moguća scenarija:

  • Samostalno postavljanje - namijenjeno radu na svakom aplikacijskom poslužitelju
  • Postavljanje JBoss AS - uzeti u obzir samo za postavljanje u JBoss AS

2.1. Samostalno postavljanje

Krenimo od korištenja JBoss WildFly 10 sa samostalnim postavljanjem.

JBoss WildFly 10 dolazi s RESTEasy verzijom 3.0.11, ali kao što ćete vidjeti, konfigurirat ćemo pom.xml s novom verzijom 3.0.14.

I zahvaljujući resteasy-servlet-inicijalizator, RESTEasy pruža integraciju sa samostalnim Servlet 3.0 kontejneri preko ServletContainerInitializer integracijsko sučelje.

Pogledajmo pom.xml:

 3.0.14.Končni org.jboss.resteasy resteasy-servlet-inicijalizator $ {resteasy.version} org.jboss.resteasy resteasy-client $ {resteasy.version} 

jboss-deployment-structure.xml

Unutar JBoss-a sve što je raspoređeno kao WAR, JAR ili EAR je modul. Ti se moduli nazivaju dinamički moduli.

Pored njih, postoje i neke statičke modula u $ JBOSS_HOME / moduli. Kao što JBoss ima RESTEasy statički moduli - za samostalno raspoređivanje, jboss-deployment-structure.xml je obavezan kako bi se neki od njih izuzeli.

Na taj način svi razredi i JAR datoteke sadržane u našem RAT će se učitati:

2.2. JBoss kao postavljanje

Ako ćete pokretati RESTEasy s verzijom JBoss 6 ili novijom, možete odabrati usvajanje biblioteka koje su već upakovane u aplikacijski poslužitelj, pojednostavljujući pom:

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

Primijeti da jboss-deployment-structure.xml više nije potreban.

3. Šifra na poslužitelju

3.1. Servlet verzija 3 web.xml

Krenimo sada na brzinu pogledati web.xml našeg jednostavnog projekta ovdje:

  Primjer RestEasy resteasy.servlet.mapping.prefix / rest 

resteasy.servlet.mapping.prefix potreban je samo ako želite dodati relativni put do API aplikacije.

U ovom je trenutku vrlo važno primijetiti da nismo prijavili nijednu Servlet uweb.xml jer odmoran inicijator servleta je dodan kao ovisnost u pom.xml. Razlog tome je - RESTEasy pruža org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer razred koji provodi javax.server.ServletContainerInitializer.

ServletContainerInitializer je inicijalizator i izvršava se prije nego što bilo koji kontekst servleta bude spreman - ovaj inicijalizator možete koristiti za definiranje servleta, filtara ili slušatelja za vašu aplikaciju.

3.2. Razred primjene

The javax.ws.rs.core.Prijava klasa je standardna JAX-RS klasa koju možete implementirati kako biste pružili informacije o svojoj implementaciji:

@ApplicationPath ("/ rest") javna klasa RestEasyServices proširuje Application {private Set singletons = new HashSet (); javni RestEasyServices () {singletons.add (novi MovieCrudService ()); } @Override public Set getSingletons () {return singletons; }}

Kao što vidite - ovo je jednostavno klasa na kojoj su navedeni svi korijenski resursi i dobavljači JAX-RS, a označena je s @ApplicationPath bilješka.

Ako vratite bilo koji prazan skup za po razredima i pojedinačnim tonovima, WAR će se skenirati za JAX-RS napomene i klase dobavljača.

3.3. Klasa implementacije usluga

Konačno, pogledajmo ovdje stvarnu definiciju API-ja:

@Path ("/ movies") javna klasa MovieCrudService {privatni inventar karte = novi HashMap (); @GET @Path ("/ getinfo") @Produces ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) javni film movieByImdbId (@QueryParam ("imdbId") String imdbId) {if (inventory.containsKey (imdbId return inventory) .get (imdbId); } else {vratiti nulu; }} @POST @Path ("/ addmovie") @Consumes ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) javni odgovor addMovie (Filmski film) {if (null! = Inventory.get (movie.getImdbId ())) { vrati Response .status (Response.Status.NOT_MODIFIED) .entity ("Film je već u bazi podataka."). build (); } inventory.put (movie.getImdbId (), movie); vratiti Response.status (Response.Status.CREATED) .build (); }}

4. Zaključci

U ovom smo brzom vodiču predstavili RESTEasy i sa njim smo izgradili super jednostavan API.

Primjer korišten u ovom članku dostupan je kao ogledni projekt u GitHubu.