Comment j’ai expliqué REST à ma femme

Par Ryan Tomayko

Ma femme : Qui est Roy Fielding ?

Moi : Un type. Plutôt brillant.

Ma femme : Oh ? Qu'est-ce qu'il a fait ?

Moi : Il a aidé à développer les premiers serveurs Web et ensuite a fait bon nombre de recherches sur le pourquoi du fonctionnement du Web. Son nom est dans le document technique définissant le protocole utilisé pour rapatrier des pages d'un serveur vers ton navigateur.

Ma femme : Comment ça marche ?

Moi : Le Web ?

Ma femme : Ouais.

Moi : Hmm. Eh bien, c'est assez étonnant. Et le truc amusant est que c'est vraiment sous-estimé. Le protocole dont je parlais, HTTP, peut faire plein de choses vraiment géniales que bon nombre de gens ignorent pour une raison ou une autre.

Ma femme : Tu veux dire http comme le début de la ligne que je tape dans le navigateur ?

Moi : Oui. Cette première partie dit au navigateur quel protocole utiliser. Ce truc que tu tapes là est l'une des avancées les plus importantes de l'histoire de l'informatique.

Ma femme : Pourquoi ?

Moi : Parce que cela décrit la localisation de quelque chose n'importe où dans le monde à partir de n'importe où dans le monde. C'est le principe fondateur du Web. Une façon de l'imaginer serait les coordonnées GPS pour la connaissance et l'information.

Ma femme : Pour les pages Web ?

Moi : Pour n'importe quoi. Vraiment. Ce type, Roy Fielding, en parle beaucoup dans ses travaux de recherche. Le Web est construit sur un style d'architecture appelé REST. REST fournit la définition d'une ressource, qui est ce vers quoi on pointe.

Ma femme : Une page Web est une ressource ?

Moi : En quelque sorte. Une page Web est la représentation d'une ressource. Les ressources sont juste des concepts. Les URLs -ces trucs que tu tapes dans le navigateur...

Ma femme : Je sais ce qu'est un URL...

Moi : Oh, d'accord. Ceux-ci disent au navigateur qu'il y a un concept quelque part. Un navigateur peut alors aller demander une représentation particulière du concept. De manière spécifique, le navigateur demande la représentation page Web du concept.

Ma femme : Quels sont les autres types de représentations disponibles ?

Moi : En fait, les représentations sont une de ces choses qui ne sont pas souvent utilisées. Dans la plupart des cas, une ressource a seulement une unique représentation. Mais, il y a espoir que les représentations seront utilisées plus souvent dans le futur parce qu'il y a un nombre important de formats qui apparaissent un peu partout.

Ma femme : Comme quoi ?

Moi : Hmm. Eh bien, il y a ce concept que les gens appellent « services Web ». Cela recouvre beaucoup de choses différentes pour différentes personnes mais le concept élémentaire est que les machines pourraient utiliser le Web de la même façon que les gens le font.

Ma femme : Encore un truc du genre robot ?

Moi : Non, pas vraiment. Je ne pense pas que les machines s'assoiront à une table et navigueront sur le Web. Mais les ordinateurs peuvent utiliser les mêmes protocoles pour s'envoyer des messages de l'un à l'autre. Nous avons fait cela depuis très longtemps mais aucune des techniques que nous utilisons aujourd'hui ne fonctionne très bien lorsque nous avons besoin de parler à toutes les machines dans le monde entier.

Ma femme : Pourquoi cela ?

Moi : Parce qu'elles n'ont pas été conçues pour fonctionner comme ça. Quand Fielding et ses potes ont commencé à construire le Web, être capable de parler à toutes les machines n'importe où dans le monde était une exigence première. La plupart des techniques que nous utilisons au travail pour faire communiquer les ordinateurs entre eux n'ont pas eu cette exigence. On avait juste besoin de parler avec un petit groupe de machines.

Ma femme : Et maintenant, on a besoin de parler à toutes les machines ?

Moi : Oui - et plus. On a besoin de parler à toutes les machines à propos de toutes ces choses contenues dans les autres machines. Nous avons besoin d'un moyen pour qu'une machine parle à une autre machine à propos d'une ressource qui est peut-être disponible sur une troisième machine.

Ma femme : Quoi ?

Moi : Disons que tu parles à ta soeur et qu'elle veuille t'emprunter ta moto ou quelque chose mais que tu ne l'as pas - ta mère l'a. Donc tu dis à ta soeur de la prendre directement chez ta mère. Ceci arrive en permanence dans la vie courante et cela arrive tout le temps quand les machines commencent à parler également.

Ma femme : Donc comment les machines se disent l'une à l'autre où se trouvent les choses ?

Moi : L'URL, bien sûr. Si toutes les choses dont les machines ont besoin de parler possèdent un URL correspondant, nous avons créé l'équivalent machine d'un nom commun. Que toi, moi et le reste du monde ayons décidé de parler des noms de la même façon est assez important, hein ?

Ma femme : Ouais.

Moi : Les machines n'ont pas de noms universels - c'est pourquoi elles sont nulles. Chaque langage de programmation, chaque base de données, ou tout autre système a une façon différente de parler des noms. C'est pourquoi l'URL est tellement important. Cela permet à tous les systèmes d'échanger avec tous les autres à propos de leurs noms.

Ma femme : Mais quand je regarde une page Web, je n'y pense pas de cette façon.

Moi : Personne. Sauf Fielding et quelques personnes. C'est bien pour cela que les machines sont toujours aussi nulles.

Ma femme : Et à propos des verbes, des pronoms et des adjectifs ?

Moi : Amusant que tu demandes car c'est un autre aspect important de REST. En tout cas, les verbes le sont.

Ma femme : Je blaguais, seulement.

Moi : C'est une drôle de blague mais ce n'est pas vraiment une blague en fait. Les verbes sont importants. Il existe un concept puissant en programmation et en théorie de l'informatique appelé polymorphisme. C'est une façon technique de dire que les différents noms peuvent se voir appliquer le même verbe.

Ma femme : Je pige pas.

Moi : Bon... Regarde la table basse. Quels sont les noms communs ? Tasse, plateau, journal, télécommande. Maintenant, quelles sont les choses que tu peux faire avec toutes ces choses ?

Ma femme : Je ne pige toujours pas...

Moi : Tu peux les prendre, hein ? Tu peux les attraper. Tu peux les cogner. Tu peux les brûler. Tu peux appliquer tous ces verbes sur chacun de ces objets.

Ma femme : Ouais... et alors ?

Moi : Eh bien, c'est important. Si au lieu de dire, « prends la tasse, » ou « prends le journal, » ou « prends la télécommande » que se passerait-il si nous avions besoin d'utiliser des verbes différents pour chacun des noms communs ? Je ne pourrais pas utiliser le mot « prendre » universellement, mais à la place penser un nouveau mot pour chaque combinaison verbe-nom commun.

Ma femme : Houlà. Bizarre !

Moi : Oui, en effet. Nos cerveaux sont en quelque sorte assez intelligents pour savoir que le même verbe peut être appliqué à différents noms communs. Certains verbes sont plus spécifiques que d'autres et ne peuvent être utilisés que sur un petit ensemble de noms communs. Par exemple, je ne peux pas conduire une tasse et je ne peux pas boire une voiture. Mais certains verbes sont universels comme prendre (GET), placer (PUT) et effacer (DELETE).

Ma femme : Tu ne peux pas effacer une tasse.

Moi : Bien sûr, mais tu peux la jeter. C'était une autre blague, hein ?

Ma femme : Ouais.

Moi : Enfin. HTTP -ce protocole que Fielding et ses copains ont créé- est entièrement consacré à l'application des verbes sur des noms communs. Par exemple, quand tu vas sur une page Web, le navigateur fait un HTTP GET de l'URL que tu as tapé et en retour obtient une page Web.

Les pages Web ont habituellement des images, ok ? Celles-ci sont des ressources séparées. La page Web donne juste les URLs vers les images et le navigateur fait des HTTP GETs supplémentaires sur elles jusqu'à ce que toutes les ressources soient obtenues et la page affichée. Mais la chose importante est que des noms communs de nature très différente peuvent être traités de la même façon. Que le nom soit une image, un texte, une vidéo, un mp3, un diaporama, quoi que ce soit. Je peux tous les prendre de la même façon avec un URL.

Ma femme : Il semble que GET est un verbe plutôt important.

Moi : En effet. Particulièrement quand tu utilises un navigateur Web parce que les navigateurs ne font pratiquement que prendre (GET) les choses. Ils ne font pas grand-chose d'autre, peu d'autres types d'interaction avec les ressources. C'est un problème car cela a incité de nombreuses personnes à croire que HTTP ne sert juste qu'à prendre (GET). Mais HTTP est vraiment un protocole général pour appliquer des verbes sur des noms communs.

Ma femme : Cool. Mais je ne vois toujours pas le pourquoi du comment. De quels types de noms et de verbes as-tu besoin ?

Moi : Eh bien les noms sont là mais pas dans le bon format.

Par exemple, quand tu navigues sur le site fnac.fr pour chercher des choses à m'offrir pour Noël. Imagine que chaque produit soit un nom. Maintenant, s'il existait dans une représentation que la machine pouvait comprendre, tu pourrais faire plein de choses sympas avec.

Ma femme : Pourquoi une machine ne peut-elle pas comprendre une simple page Web ?

Moi : Parce que les pages Web sont écrites pour être comprises par les gens. Une machine n'est pas intéressée par la présentation et le style. Pratiquement, les machines ont juste besoin des données. Idéalement, chaque URL aurait une version lisible par un humain et une représentation pour une machine. Quand la machine prend une ressource, elle demandera la version appropriée lisible par la machine. Quand un navigateur prend la ressource pour un humain, il demandera celle lisible par un humain.

Ma femme : Donc les gens auront à rendre toutes leurs pages lisibles par les machines.

Moi : Si c'est profitable. Regarde, nous avons parlé de tout ceci avec de nombreuses abstractions. Passons à un exemple concret. Tu es enseignante - à l'école je parie que vous avez un gros système informatique, ou trois ou quatre systèmes probablement, qui vous permettent de gérer les étudiants : dans quelles classes sont-ils, quels cours ils suivent, les contacts en cas d'urgence, l'information à propos des livres de cours, etc. Maintenant, prends l'URL pour chacun de ces noms suivants : élève, enseignant, classe, livre, salle de classe, etc. De nos jours, demander l'URL avec un navigateur te permet d'obtenir une page Web. S'il existait une version machine de la représentation pour chaque URL, il serait trivial de créer de nouveaux outils sur le système car toute cette information serait « consommable » d'une façon normalisée. Il serait aussi plus facile pour chacun des systèmes de communiquer entre eux. Ou, tu pourrais construire un système national ou régional qui serait capable de communiquer avec chacun des systèmes individuels des écoles pour compiler les bulletins scolaires. Les possibilités sont infinies.

Chacun des systèmes obtiendrait l'information des autres en utilisant un simple HTTP GET. Si un système a besoin d'ajouter quelque chose à un autre système, il utiliserait HTTP POST. Si un système veut mettre à jour quelque chose dans un autre système, il utilise un HTTP PUT. L'apparence des données restant la seule chose qui doit être définie.

Ma femme : Donc, c'est ce sur quoi, toi et tous les ingénieurs en informatique travaillent en ce moment ? Décider à quoi doivent ressembler les données ?

Moi : Malheureusement, non. À la place, la grande majorité de ceux-ci sont occupés à définir des couches de spécifications complexes pour traiter ce problème d'une façon différente qui est loin d'être aussi utile ou claire. Les noms ne sont pas universels et les verbes ne sont pas polymorphes. Nous sommes en train de jeter des dizaines d'années d'utilisation concrète et de techniques éprouvées et commençons avec quelque chose qui ressemble beaucoup à d'autres systèmes qui ont précédemment échoué. La seule raison pour laquelle nous utilisons HTTP est de nous épargner des discussions avec nos responsables réseaux et sécurité. Nous sacrifions la simplicité pour des outils flashy et magiques.

Ma femme : Pourquoi ?

Moi : J'en ai aucune idée.

Ma femme : Pourquoi tu n'en dis rien ?

Moi : Je le ferai peut-être un jour.

Fiche technique

À propos de l'auteur

Comme on peut le voir sur son site personnel, Ryan Tomayko est aussi passionné par tout ce qui touche à la programmation, au web et à la culture du « libre ».

Articles similaires

Voici la liste des dix articles les plus récents en rapport avec cet article :

Tous niveaux

Technique

© 2001-2016 Pompage Magazine et les auteurs originaux - Hébergé chez Nursit.com ! - RSS / ATOM - About this site