Ce long post est résumable en une petite question :
comment appeler une représentation particulière d'une ressource depuis HTML ?
De l'enthousiasme au blocage
Comme certains ici, je me suis interessé à REST, l'architecture qui prétend utiliser les technos du Web à leur plein potentiel.
Voilà les principes de REST, tels que je les ai compris :
- l'URI est seulement nom, (presque) jamais une action
- à chaque URI correspond une unique ressource, à chaque ressource correspond une unique URI
- les pages HTML ne sont que des représentations de ces ressources
- les flux RSS, les fichiers XML et RDF divers, les images et autres fichiers multimédias sont d'autres représentations de ces ressources
- les représentations n'ont pas d'URI, car ce ne sont pas des ressources
- mais elles sont accessibles avec les headers HTTP, notamment Accept (types de contenu) et Accept-Language (langues)
- pour manipuler ces ressources, on utilise toutes les méthodes de HTTP : GET et POST, évidemment, mais aussi PUT et DELETE
- l'identification se fait par HTTP à chaque requête
Une fois bien renseigné, je me suis mis à programmer la partie serveur d'un mini CMS en Python et j'ai été conquis. Réfléchir en termes de ressources est très efficace et l'architecture obtenue est très belle. On confie plein de boulot à HTTP. J'ai vraiment eu l'impression de revenir aux sources du Web.
En suite, j'ai fait des tests avec l'extension firefox restclient et ça marche du tonnerre.
Cependant, les clients Web utilisés par les vrais gens ne sont pas d'obscurs clients REST mais les navigateurs (Firefox, IE, Opera...). Et là, catastrophe !
Un exemple
Un exemple : imaginons que je fais un site sur les Simpsons.
Je commence par lister les ressources :
http://example.com/simpsons/personnage/homer
http://example.com/simpsons/personnage/marge
http://example.com/simpsons/episode/45320
http://example.com/simpsons/lieu/centrale-nucleaire
etc...
Ensuite, je créé les résultats des différentes requêtes HTTP.
Notamment, pour la méthode GET, je défini les représentations selon les types de contenu :
- http://example.com/simpsons/personnage/homer a une représentation HTML mais aussi une représentation en FOAF/RDF et une représentation image en PNG
- La ressource http://example.com/simpsons/episode qui liste les épisodes a une représentation en HTML mais aussi une en Atom ou en RSS.
- Le fichier OpenSearch est une autre représentation de la ressource http://example.com/simpsons/search déjà représentée en HTML avec formulaire
Mais aussi selon les langues, car toutes les ressources de mon exemple ont des représentations en Anglais et en Français si possible.
Le problème
Le problème est que je ne sais pas comment appeler une représentation particulière d'une ressource depuis du HTML interprété par un navigateur Web.
<link href="">, <a href=""> et <img src=""> génèrent des requêtes HTTP GET mais ne permettent pas de spécifier les Headers HTTP.
C'est dommage, car je pensais que les attributs @TYPE et @HREFLANG servaient justement à ça.
En gros, je voudrais que sur la représentation HTML de http://example.com/simpsons/personnage/homer soit embarquée la représentation PNG en écrivant juste :
Je voudrais que sur la représentation HTML de http://example.com/simpsons/episode soit incluse une référence au fichier Atom ou RSS de cette manière :
Je voudrais pouvoir mettre un switcheur de langues aussi simplement que ceci :
Avec à chaque fois la même URI pour toutes les représentations.
Donc...
Ai-je compris l'architecture REST de travers ? Ou sont-ce les navigateurs qui n'exploitent pas les attributs sus-cité convenablement ?
Qu'en pensez-vous ?
Modifié par pierredureau (10 Nov 2009 - 08:49)
comment appeler une représentation particulière d'une ressource depuis HTML ?
De l'enthousiasme au blocage
Comme certains ici, je me suis interessé à REST, l'architecture qui prétend utiliser les technos du Web à leur plein potentiel.
Voilà les principes de REST, tels que je les ai compris :
- l'URI est seulement nom, (presque) jamais une action
- à chaque URI correspond une unique ressource, à chaque ressource correspond une unique URI
- les pages HTML ne sont que des représentations de ces ressources
- les flux RSS, les fichiers XML et RDF divers, les images et autres fichiers multimédias sont d'autres représentations de ces ressources
- les représentations n'ont pas d'URI, car ce ne sont pas des ressources
- mais elles sont accessibles avec les headers HTTP, notamment Accept (types de contenu) et Accept-Language (langues)
- pour manipuler ces ressources, on utilise toutes les méthodes de HTTP : GET et POST, évidemment, mais aussi PUT et DELETE
- l'identification se fait par HTTP à chaque requête
Une fois bien renseigné, je me suis mis à programmer la partie serveur d'un mini CMS en Python et j'ai été conquis. Réfléchir en termes de ressources est très efficace et l'architecture obtenue est très belle. On confie plein de boulot à HTTP. J'ai vraiment eu l'impression de revenir aux sources du Web.
En suite, j'ai fait des tests avec l'extension firefox restclient et ça marche du tonnerre.
Cependant, les clients Web utilisés par les vrais gens ne sont pas d'obscurs clients REST mais les navigateurs (Firefox, IE, Opera...). Et là, catastrophe !
Un exemple
Un exemple : imaginons que je fais un site sur les Simpsons.
Je commence par lister les ressources :
http://example.com/simpsons/personnage/homer
http://example.com/simpsons/personnage/marge
http://example.com/simpsons/episode/45320
http://example.com/simpsons/lieu/centrale-nucleaire
etc...
Ensuite, je créé les résultats des différentes requêtes HTTP.
Notamment, pour la méthode GET, je défini les représentations selon les types de contenu :
- http://example.com/simpsons/personnage/homer a une représentation HTML mais aussi une représentation en FOAF/RDF et une représentation image en PNG
- La ressource http://example.com/simpsons/episode qui liste les épisodes a une représentation en HTML mais aussi une en Atom ou en RSS.
- Le fichier OpenSearch est une autre représentation de la ressource http://example.com/simpsons/search déjà représentée en HTML avec formulaire
Mais aussi selon les langues, car toutes les ressources de mon exemple ont des représentations en Anglais et en Français si possible.
Le problème
Le problème est que je ne sais pas comment appeler une représentation particulière d'une ressource depuis du HTML interprété par un navigateur Web.
<link href="">, <a href=""> et <img src=""> génèrent des requêtes HTTP GET mais ne permettent pas de spécifier les Headers HTTP.
C'est dommage, car je pensais que les attributs @TYPE et @HREFLANG servaient justement à ça.
En gros, je voudrais que sur la représentation HTML de http://example.com/simpsons/personnage/homer soit embarquée la représentation PNG en écrivant juste :
<img src="http://example.com/simpsons/personnage/homer" type="image/png" />
Je voudrais que sur la représentation HTML de http://example.com/simpsons/episode soit incluse une référence au fichier Atom ou RSS de cette manière :
<link rel="alternate" type="applictaion/atom+xml" href="http://example.com/simpsons/episode" />
Je voudrais pouvoir mettre un switcheur de langues aussi simplement que ceci :
<ul>
<li><a href="http://example.com/simpsons/episode/45320" hreflang="en">English</a></li>
<li><a href="http://example.com/simpsons/episode/45320" hreflang="fr">Français</a></li>
</ul>
Avec à chaque fois la même URI pour toutes les représentations.
Donc...
Ai-je compris l'architecture REST de travers ? Ou sont-ce les navigateurs qui n'exploitent pas les attributs sus-cité convenablement ?
Qu'en pensez-vous ?
Modifié par pierredureau (10 Nov 2009 - 08:49)