Séances 4 et 5 : API et manipulation de ressource§
Pierre-Antoine Champin & Michael Mrissa
Département Informatique, IUT Lyon 1Ce travail est sous licence Creative Commons Attribution-ShareAlike 3.0 France.
Pierre-Antoine Champin & Michael Mrissa
Département Informatique, IUT Lyon 1Ce travail est sous licence Creative Commons Attribution-ShareAlike 3.0 France.
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.
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.
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.
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() {}
}
Blog.createArticle
(cf. ci-aprèsà
qui permettra de créer un nouvel article.Article
§refresh
est celle qui effectue la requête GET
pour récupérer les données XML de l’article.
Elle doit être appelée à chaque fois que c’est nécessaire :update
est celle qui effectue la requête PUT
pour mettre à jour les données XML de l’article.
Elle doit être appelée à chaque fois que c’est nécessaire.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) {}
}
Blog
§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.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();
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);
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
.
304 Not modified
sans contenu (et économise ainsi du temps et de la bande passante).200 OK
avec le nouveau contenu et le nouvel etag.NB: les etags participent, avec d’autres en-têtes, à la gestion des caches.