Un guide pour RESTEasy

Un guide pour RESTEasy

1. introduction

JAX-RS (API Java pour les services Web RESTful) est un ensemble d'API Java qui prend en charge la création deREST APIs. Et le cadre utilise bien les annotations pour simplifier le développement et le déploiement de ces API.

Dans ce tutoriel, nous utiliserons RESTEasy, le JBoss a fourni une implémentation portable de la spécification JAX-RS, afin de créer des services Web RESTful simples.

2. Configuration du projet

Nous allons deux envisager deux scénarios possibles:

  • Configuration autonome - destinée à fonctionner sur tous les serveurs d'applications

  • Configuration de JBoss AS - à prendre en compte uniquement pour le déploiement dans JBoss AS

2.1. Configuration autonome

Commençons par utiliserJBoss WildFly 10 avec une configuration autonome.

JBoss WildFly 10 est fourni avec RESTEasy version 3.0.11, mais comme vous le verrez, nous allons configurer lespom.xml avec la nouvelle version 3.0.14.

Et grâce auxresteasy-servlet-initializer, RESTEasy permet une intégration avec des conteneursServlet 3.0 autonomes via l'interface d'intégration deServletContainerInitializer.

Jetons un coup d'œil auxpom.xml:__


    3.0.14.Final


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

jboss-deployment-structure.xml

Dans JBoss, tout ce qui est déployé en tant que WAR, JAR ou EAR est un module. Ces modules sont appelésdynamic modules.

À côté de ceux-ci, il y a aussi desmodules statiques dans$JBOSS_HOME/modules. Comme JBoss a le RESTEasystatic modules - pour un déploiement autonome, lejboss-deployment-structure.xml est obligatoire afin d'en exclure certains.

De cette façon, toutes les classes et fichiersJAR contenus dans nosWAR seront chargés:


    
        
            
        
        
            
            
            
        
        
    

2.2. Configuration de JBoss AS

Si vous allez utiliser RESTEasy avec JBoss version 6 ou supérieure, vous pouvez choisir d’adopter les bibliothèques déjà fournies dans le serveur d’application, ce qui simplifie le fonctionnement de pom:


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

Notez quejboss-deployment-structure.xml n'est plus nécessaire.

3. Code côté serveur

3.1. Servlet Version 3 web.xml

Jetons maintenant un coup d'œil au web.xml de notre projet simple ici:




   RestEasy Example

   
      resteasy.servlet.mapping.prefix
      /rest
   

resteasy.servlet.mapping.prefix n'est nécessaire que si vous souhaitez ajouter un chemin relatif à l'application API.

À ce stade, il est très important de noter que nous n'avons déclaré aucunServlet dans lesweb.xml carresteasyservlet-initializer a été ajouté en tant que dépendance danspom.xml . La raison en est - RESTEasy fournit la classeorg.jboss.resteasy.plugins.servlet.ResteasyServletInitializer qui implémentejavax.server.ServletContainerInitializer.

ServletContainerInitializer est un initialiseur et il est exécuté avant que tout contexte de servlet ne soit prêt - vous pouvez utiliser cet initialiseur pour définir des servlets, des filtres ou des écouteurs pour votre application.

3.2. La classe d'application

La classejavax.ws.rs.core.Application est une classe JAX-RS standard que vous pouvez implémenter pour fournir des informations sur votre déploiement:

@ApplicationPath("/rest")
public class RestEasyServices extends Application {

    private Set singletons = new HashSet();

    public RestEasyServices() {
        singletons.add(new MovieCrudService());
    }

    @Override
    public Set getSingletons() {
        return singletons;
    }
}


Comme vous pouvez le voir, il s'agit simplement d'une classe qui répertorie toutes les ressources et fournisseurs racine JAX-RS, et elle est annotée avec l'annotation@ApplicationPath.

Si vous renvoyez un ensemble vide pour par des classes et des singletons, le fichier WAR sera analysé pour la classe d'annuaire de ressources et de fournisseurs d'annotation JAX-RS.

3.3. Une classe d'implémentation de services

Enfin, voyons une définition d'API réelle ici:

@Path("/movies")
public class MovieCrudService {

    private Map inventory = new HashMap();

    @GET
    @Path("/getinfo")
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Movie movieByImdbId(@QueryParam("imdbId") String imdbId) {
        if (inventory.containsKey(imdbId)) {
            return inventory.get(imdbId);
        } else {
            return null;
        }
    }

    @POST
    @Path("/addmovie")
    @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Response addMovie(Movie movie) {
        if (null != inventory.get(movie.getImdbId())) {
            return Response
              .status(Response.Status.NOT_MODIFIED)
              .entity("Movie is Already in the database.").build();
        }

        inventory.put(movie.getImdbId(), movie);
        return Response.status(Response.Status.CREATED).build();
    }
}

4. Conclusions

Dans ce rapide tutoriel, nous avons présenté RESTEasy et nous avons construit une API super simple avec celui-ci.

L'exemple utilisé dans cet article est disponible en tant quesample project in GitHub.