dimanche 5 juillet 2009

JSR 311 : écrire des services RESTful avec Jersey - Partie 2

Dans la première partie de cet article, nous avons vu comment récupérer des données en appelant un service REST. Nous allons maintenant voir comment envoyer des données vers le serveur pour mettre à jour une ressource et une collection.

Dans un premier temps, installez le plugin Poster pour Firefox. Ce plugin permet d'envoyer du contenu vers une URL en utilisant les verbes HTTP POST et PUT. Nous n'aurons besoin de rien d'autre pour faire notre appel, une simple requete HTTP étant suffisante pour invoquer un service REST.

Reprenons la classe que nous avions commencé à écrire dans la partie précédente. Nous allons y ajouter une méthode permettant d'ajouter des personnes dans la base de données.


@PUT
@Consumes("text/xml")
public void addPerson(JAXBElement<Person> person){
directoryDAO.addPerson(person.getValue());
}


L'annotation @PUT permet de préciser que l'on va utiliser le verbe HTTP PUT. L'objet de type JAXBElement passé en paramètre correspond au code XML que l'on va passer dans la requête HTTP. L'appel de la méthode getValue() sur cet objet permet de récupérer le "vrai" objet décrit par notre code XML, ici une instance de la classe Person.

Nous allons également enrichir notre classe Person de quelques annotations :

@XmlRootElement
public class Person {

private String name;

private String town;

public Person() {
}

public Person(String name) {
super();
this.name = name;
}


@XmlAttribute
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@XmlAttribute
public String getTown() {
return town;
}

public void setTown(String town) {
this.town = town;
}

}



L'annotation @XmlAttribute permet de préciser que l'on va passer les élements name et town en attributs XML lorsque l'on va construire notre objet JAXBElement pour représenter une personne.

Passons maintenant à l'utilisation de Poster. Après avoir installé le plugin et redémarré Firefox, vous pourrez voir une petite icone jaune en bas à droite, dans la barre d'état du navigateur.



Dans la fenêtre qui apparait, nous allons renseigner l'url du service, le verbe à utiliser, ici POST, et le contenu à envoyer, c'est à dire une personne décrite au format XML, composée d'un nom et d'une ville de résidence.



En cliquant sur GO (à côté du PUT), on envoie la reqûete au serveur.

On peut ensuite vérifier que l'enregistrement a bien été fait en utilisant la méthode créée dans la première partie de ce tutoriel, dans le cas présent en appelant l'URL http://localhost:8080/JerseyTest/directory/Grenoble .


Cette exemple montre bien la légèreté du style REST par rapport au protocole SOAP, ici pas besoin de WSDL, pas besoin non plus de générer du code (Stubs) pour faire communiquer le client et le serveur, quelques annotations et quelques requêtes HTTP suffisent pour répondre à notre problématique. Ce genre de services web va très certainement se démocratiser rapidement, notamment avec l'arrivée de Java EE 6 dont la JSR 311 fait partie.