Services Web REST MDOC Qu’est ce qu’un service web ? Web Services Deux types : ● REST ● SOAP Web Services REST est décrit par la spécification JAX-RS Plusieurs implémentations Nous parlerons de RESTEasy Web Services JBoss REASTEasy est une implémentation de JAX-RS Embarquée dans JBoss 7 JBoss RESTEasy MDOC JBoss RESTEasy Implémentation complète de JAX-RS Client framework Asynchronisme, compression, cache, … JBoss RESTEasy Pourquoi JAX-RS plutôt que Servlet API ? @Path Annotation décrivant le chemin où se trouve la ressource Propre à une classe ou une méthode @GET / @POST / @PUT Annotations spécifiant le protocole HTTP Propre à une méthode renvoyant un objet Response Exemple : Hello World @Path(“/message”) public class MessageService { @GET @Path(“/hello”) public Response hello() { return Response.ok(“Hello World”).build(); } } Paramètres Plusieurs types de paramètres peuvent être récupérés ● ● ● ● @PathParam @QueryParam @FormParam @HeaderParam @PathParam Permet de récupérer un paramètre défini dans l’URL @Path(“/hello/{hello_param}”) public Response hello(@PathParam(“hello_param”) String hello) { return Response.ok(hello).build(); } La requête a effectuée sera : /message/hello/helloworld @QueryParam Permet de récupérer un paramètre dans l’ URL @Path(“/hello”) public Response hello(@QueryParam(“hello_param”) String hello) { return Response.ok(hello).build(); } La requête a effectuée sera : /message/hello?hello_param=helloworld @DefaultValue Permet de donner une valeur par défaut à un paramètre s’il n’est pas spécifié. @Path(“/hello”) public Response hello(@QueryParam(“hello_param”) @DefaultValue (“hello default”) String hello) { return Response.ok(hello).build(); } @Consumes Permet de spécifier les types que peut recevoir le service web. Propre à la classe ou à une méthode @Produces Permet de spécifier le types que peut renvoyer le service web. Propre à la classe ou à une méthode Exemple @Path(“/message”) @Produces(“text/plain”) @Consumes(“application/json”) public class MessageService { @GET @Path(“/hello”) public Response hello() { return Response.ok(“Hello World”).build(); } } Compression Ajout de l’annotation GZIP @Path(“/hello”) @GZIP public Response hello(@QueryParam(“hello_param”) String hello) { return Response.ok(hello).build(); } JSON / XML MDOC JSON La gestion est automatique dès lors que vous avez les dépendances (jackson pour JSON). Exemple : JSON public class Product implements Serializable { private String name; private int quantity; // Getters, setters, contructors } Exemple : JSON @Path(“/product/json”) @Produces(“application/json”) @Consumes(“application/json”) public class ProductService { @GET @Path(“/get”) public Product getDefaultProduct() { return new Product(“apples”, 5); } @POST @Path(“/consume”) public Response consumeProduct(Product p) { return Response.ok(p.toString()).build(); } } XML Via l’API JAXB Uniquement des … annotations Exemple : XML @XmlRootElement(name = “product”) @XmlAccessType(FIELD) public class Product implements Serializable { @XmlElement(name = “name”, nillable = false, required = true) private String name; @XmlElement(name = “quantity”, nillable = false) private int quantity; // Getters, setters, contructors } Exemple : XML @Path(“/product/xml”) @Produces(“text/xml”) @Consumes(“text/xml”) public class ProductService { @GET @Path(“/get”) public Product getDefaultProduct() { return new Product(“apples”, 5); } @POST @Path(“/consume”) public Response consumeProduct(Product p) { return Response.ok(p.toString()).build(); } } Asynchronisme MDOC Asynchronisme Le client réalise des appels asynchrones. Similaire à AJAX Exemple : Asynchronisme @GET @Path(“/get”) public void getProduct( final @Suspend(10000) AsynchronousResponse response) throws Exception { Thread thread = new Thread(new Runnable() { public void run() { Response jaxrs = Response.ok(“hello_world”).type(MediaType. TEXT_PLAIN).build(); response.setResponse(jaxrs); } }); thread.start(); } Conclusion MDOC Conclusion Mécanisme puissant et évolutif Programmation par annotations Intégration avec Spring, EJB, JUnit possible
© Copyright 2025 ExpyDoc