Séances 4 et 5 : API et manipulation de ressource¶
Notion d’API Web¶
Définition¶
En programmation classique, on appelle API (Application Programming Interface) l’ensemble des classes et des fonctions que propose une bibliothèque, dédiée à la manipulation d’une certaine catégorie d’objets.
Une API Web est l’ensemble des requêtes HTTP que propose un serveur, permettant la manipulation des ressources de ce serveur.
Autres verbes¶
PUT
¶
Ce verbe sert à envoyer un contenu à une ressource pour modifier son état.
En général,
le contenu du PUT
correspond à une version modifiée du contenu retourné par un précédent GET
.
DELETE
¶
Ce verbe sert à supprimer une ressource du serveur.
Votre travail¶
Votre travail¶
En vous appuyant sur la documentation de l’API du blog éphémère, vous devez écrire deux classes, permettant d’accéder à ce blog.
En d’autre terme, vous devez proposer une API Java qui donne accès à l’API Web du blog éphémère.
Classe Article
¶
public class Article {
public Article(URL url) {}
protected void refresh() {}
protected void update() {}
public URL getURL() {}
public String getTitle() {}
public String getBody() {}
public String getDate() {}
public void setTitle(String newTitle) {}
public void setBody(String newBody) {}
public void delete() {}
}
Le « constructeur » ne crée pas un nouvel article ; il crée un objet Java qui permet d’accéder à l’article pré-existant sur le Web.
C’est la méthode
Blog.createArticle
(cf. ci-aprèsà qui permettra de créer un nouvel article.
La méthode protégée
refresh
est celle qui effectue la requêteGET
pour récupérer les données XML de l’article. Elle doit être appelée à chaque fois que c’est nécessaire :ni trop (pas la peine de faire une requête HTTP inutile),
ni trop peu (pensez bien que l’article peut-être modifié sur le serveur par un autre programme, y compris pendant que vous l’utilisez).
La méthode protégée
update
est celle qui effectue la requêtePUT
pour mettre à jour les données XML de l’article. Elle doit être appelée à chaque fois que c’est nécessaire.
Classe Blog
¶
public class Blog {
public Blog(URL url) {}
public URL getURL() {}
public Iterable<Article> iterArticles() {}
public Iterable<Article> iterArticles(String filtre) {}
public Article createArticle(String title, String body) {}
}
Ici encore, le « constructeur » ne sert pas à créer le blog éphémère (qui évidemment existe déjà) mais à créer un objet Java qui permet d’interagir avec le blog.
Le constructeur prend une URL en paramètre, car il peut exister d’autres blogs compatibles avec cette API Web.
La méthode
createArticle
pourra s’inspirer de ce que vous avez fait à la séance précédente, mais vous devez poster du XML plutôt que des données de formulaire.
Analyser du XML en Java¶
URL url; // l'URL que vous venez de requêter
InputStream cxIs; // le flux contenant la réponse du serveur
javax.xml.parsers.DocumentBuilder db =
javax.xml.parsers.DocumentBuilderFactory
.newInstance().newDocumentBuilder();
org.w3c.dom.Document doc = db.parse(cxIs, url.toString());
org.w3c.dom.NodeList nl = doc.getDocumentElement().getChildNodes();
Sérialiser du XML en Java¶
org.w3c.dom.Document doc; // le document à sérialiser
DOMImplementationLS domImplementation =
(DOMImplementationLS) doc.getImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
lsSerializer.getDomConfig()
.setParameter("xml-declaration", Boolean.FALSE);
String xml = lsSerializer.writeToString(doc);
Pour aller plus loin¶
Utilisation des etags¶
Les etags (entity tags) permettent d’économiser de la bande passante, tout en garantissant que les données sont à jour.
L”etag est une chaîne de caractère associée à la ressource, qui change à chaque fois que la ressource est modifiée (une espèce de « numéro de série »).
Le serveur fournit l”etag de la ressource dans l’en-tête Etag
.
Lors de la première requêre GET
qu’il fait à une ressource,
le client mémorise cet etag.
Lors des requêtes GET
suivantes,
le client fournit l”etag dans l’en-tête If-None-Match
.
Si la ressource n’a pas été modifiée, le serveur répond avec le code
304 Not modified
sans contenu (et économise ainsi du temps et de la bande passante).Si la ressource a été modifiée, le serveur répond normalement avec le code
200 OK
avec le nouveau contenu et le nouvel etag.
NB: les etags participent, avec d’autres en-têtes, à la gestion des caches.