L'approche REST

Quelques raccourcis :

Document en construction...

L'approche REST, pour Representational State Transfer, est le fruit des travaux de Roy Fielding, décrit dans sa thèse de 2000 nommée « Architectural Styles and the Design of Network-based Software Architectures », que vous pouvez consulter sur http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm. Pour nos besoins, le chapitre clé est le chapitre: https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

Idée de base

Avec l'importante expansion des possibilités programmatiques du Web au tournant du millénaire, différentes approches ont tour à tour été en vogue :

Programmer à l'aide de sockets bruts, ce qui fonctionne, est essentiellement universel, mais requiert un effort important. Développer des protocoles applicatifs est une opération périlleuse, qui force chaque individu à porter son attention sur des détails « de bas niveau » comme le signe des entiers, l'ordre des bytes dans un entier, l'encodage des chaînes de caractères, etc.

Adopter une approche RPC (Remote Procedure Call), où les messages circulant sur le réseau sont vus par les homologues de la communication comme des appels de fonctions. Ce style permet d'éviter de réfléchir aux détails de bas niveau susmentionnés, ceux-ci étant pris en charge par la plateforme choisie, mais introduit un couplage fort entre le code et la plateforme. Plusieurs intergiciels

Conception du style architectural

 

Vocabulaire

 

Lectures complémentaires

Quelques liens pour enrichir le propos.

Généralités et pédagogie :

Technique et design :

Critiques :

Serveurs Web

Le serveur Apache Axis 2 : http://axis.apache.org/axis2/java/core/

Le fichier de configuration d'Apache, un texte de 2011 : http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art004

Configurer un serveur Web robuste et sécuritaire, par Lee Hutchinson en 2012 : http://arstechnica.com/gadgets/2012/11/how-to-set-up-a-safe-and-secure-web-server/

Écrire un serveur Web avec Python, série d'articles par Ruslan Spivak en 2015 :

Pour un guide au Web Hosting, donc pour savoir comment amener votre site Web à la disposition des gens, les gens derrière http://www.whoishostingthis.com/resources/web-hosting/ m'ont proposé leur site. Ça m'a semblé pas si mal alors voilà.

La bibliothèque Ponyo, pour écrire des serveurs Web en ML : http://ponyo.org/handbook/ponyo-basics/3

Services Web

En 2011, Gary Shutler explique son approche à la conception de services Web : http://www.robustsoftware.co.uk/post/3163820769/pragmatic-web-service-design

Témoignage en 2011 de Robert Laing, chef d'entreprise, qui relate une liste des services Web auxquels a recours son entreprise quotidiennement : http://mygengo.com/about-us/blog/15-web-services-we-rely-on-every-day/

L'outil Wolfram Alpha, si chic soit-il, n'est pas un service Web destiné aux programmes, comme l'a constaté une entreprise en 2011 : http://blog.agiletortoise.com/post/3564424414/wolfram-alpha-doesnt-get-it (les choses ont – un peu – changé depuis : http://blog.agiletortoise.com/post/3587122629/wolfram-listens-and-changes-policy-but-not-tos).

Quels seraient les avantages et les inconvénients d'offrir des services Web immuables? Une réflexion de Bruce Hauman en 2013 : http://rigsomelight.com/2013/06/17/immutable-data-service.html

Que sont les Amazon Web Services (AWS)? https://www.expeditedssl.com/aws-in-plain-english

Travailler avec JAX-WS, par Upendra Chintala en 2012 :

Parmi les protocoles les plus répandus pour faire interopérer deux homologues à partir de services Web, on trouve en particulier :

Les services Web peuvent en théorie être répertoriés dans des annuaires UDDI, pour Universal Description Discovery and Integration. En pratique, ce « rêve » n'a pas été réalisé, mais bon, ça arrive. Pour en savoir plus :

On me demande souvent de livrer quelques services Web commerciaux avec lesquels il seraitr possible d'interfacer pour expérimenter.

Voici une courte liste comprenant des services que des étudiant(e)s m'ont suggéré au fil des sessions :

Vous trouverez aussi des exemples dans la section décrivant le format WSDL. N'hésitez pas à m'en suggérer d'autres!

Je vous recommande ce texte de 2015 par Martin Fowler sur les saines pratiques lorsque l'on interface avec une API externe sur le Web, en particulier une API de Google. Le texte comprend des exemples et une réflexion sur les façons de faire : http://martinfowler.com/articles/refactoring-external-service.html

Java et les services Web :

En 2016, Iris Classon démontre comment il est possible de développer en quelques minutes un client capable de consommer une API de données météo avec C# : http://irisclasson.com/2016/11/24/weather-api-in-five-minutes/

Écrire un service Web avec bash, par Henry Snopek en 2017 : https://hackernoon.com/a-web-service-written-in-pure-bash-2af847902df1

Microservices

Certains tendent vers les microservices, soit des services qui font une seule chose mais la font bien. À ce sujet :

Témoins (Cookies)

Un témoin est une unité d'entreposage côté client dans une relation client/ serveur sur le Web. Chaque témoin est associé à une URL d'origine; plusieurs témoins peuvent être associés à une même URL; les témoins sont locaux à chaque fureteur (donc si vous réalisez une transaction électronique impliquant des témoins avec un fureteur, il est probable qu'un autre fureteur sur le même ordinateur n'en sache rien). Un témoin ne peut contenir que de petites quantités d'information (4 Ko maximum).

Un Wiki sur le sujet : http://en.wikipedia.org/wiki/HTTP_cookie

Un exemple simple de manipulation de témoins avec du code JavaScript : JavaScript-Temoin.html

Une réflexion sur les risques inhérents au recours à des témoins, par Jeff Atwood en 2010 : http://www.codinghorror.com/blog/2010/11/breaking-the-webs-cookie-jar.html

L'API nommée evercookie pour JavaScript, qui permet de créer des témoins extrêmement persistants : http://samy.pl/evercookie/

Les témoins zombies, qui ne veulent pas mourir : http://www.infoworld.com/t/internet-privacy/zombie-cookies-wont-die-microsoft-admits-use-and-html5-looms-new-vector-170511

Des témoins persistants et impossibles à bloquer, à l'aide des en-têtes http, par Nik Cubrilovic en 2011 : http://nikcub.appspot.com/persistant-and-unblockable-cookies-using-http-headers

En 2011, Microsoft a cessé d'utiliser des « super témoins » dans MSN :

Un bogue fondamental des témoins : ils ne connaissent pas leur origine. Texte d'Egor Homakov en 2013 : http://homakov.blogspot.com.es/2013/07/core-flaw-of-cookies.html

Simuler des témoins... sans témoins, et compromettre la vie privée des gens. Texte de 2013 : http://lucb1e.com/rp/cookielesscookies/

WebRTC

Une technologie destinée à permettre une communication audiovisuelle en « temps réel » à travers le Web, et reposant strictement sur une API accessible par JavaScript.

Websockets

Les Websockets permettent à un client Web de transiger avec le reste du monde de manière bidirectionnelle à travers TCP.

Un Wiki sur le sujet : http://en.wikipedia.org/wiki/WebSockets

Un site proposant des exemples de code de Websockets : http://websocket.us/

Le RFC 6455, qui officialise en 2011 le protocole des Websockets : http://www.ietf.org/mail-archive/web/ietf-announce/current/msg09663.html (le RFC lui-même est http://www.rfc-editor.org/rfc/rfc6455.txt)

Utiliser les Websockets avec Clojure, selon Jay Field en 2011 : http://blog.jayfields.com/2011/02/clojure-web-socket-introduction.html

Un descriptif du Code Project, texte de 2011 par Wayne Ye : http://www.codeproject.com/KB/HTML/Web-Socket-in-Essence.aspx

Les performances des Websockets, par Drew Harry en 2011 : http://drewww.github.com/socket.io-benchmarking/

En 2011, Bruce Eckel expérimente avec les Websockets à l'aide de Python et de CoffeeScript : http://www.artima.com/weblogs/viewpost.jsp?thread=339100

Écrire un SCS avec Websockets en Scala, un texte de Jean-François Arcand en 2012 : http://jfarcand.wordpress.com/2012/02/10/writing-clientserver-websocket-application-using-scala/

Exemple de SCS d'écho à l'aide de Websockets, texte de 2012 par Brian Raymor : http://www.sitepoint.com/websockets-stable-and-ready-for-developers/

Textes de John McCutchan :

Java 7 version EE et les Websockets, un texte d'Arun Gupta en 2012 : https://blogs.oracle.com/arungupta/entry/websockets_and_java_ee_7

Un « Websockets 101 » proposé par Armin Ronacher en 2012 : http://lucumr.pocoo.org/2012/9/24/websockets-101/

Un daemon de Websocket : http://websocketd.com/

Le projet Seasocks, Un serveur de Websockets pour C++, par Matt Godbolt en 2015 : http://xania.org/201503/seasocks-an-embedded-websocket-server-for-c-plus-plus

Reconnecter un Websocket en temps réel... sans noyer le serveur, par John Ryding en 2014 : http://blog.johnryding.com/post/78544969349/how-to-reconnect-web-sockets-in-a-realtime-web-app

Les Websockets en Ruby à partir de rien, un pas à pas par Jamie Patel en 2015 : https://blog.pusher.com/websockets-from-scratch/

Les Websockets expliqués par Dmitriy Rogatkin en 2015 : http://www.infoq.com/articles/websocket-desktop-agility-web-applications

En 2015, Sam Saffron rappelle qu'il n'y a rien de simple aux Websockets : https://samsaffron.com/archive/2015/12/29/websockets-caution-required

Écrire un serveur de Websockets en Go, par eli Bendersky en 2016 : http://eli.thegreenplace.net/2016/go-websocket-server-sample/

Visualiser les paquets sur des Websockets, par James Hague en 2016 : http://prog21.dadgum.com/225.html

Web Workers

Les Web Workers dynamisent le code exécuté côté client sur une page Web, se comportant comme des tâches soumises à un thread pool.

Petite introduction aux Web Workers, par Brian Cooksey en 2013 : https://zapier.com/engineering/intro-to-web-workers/


Valid XHTML 1.0 Transitional

CSS Valide !