Services Web REST

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