Logo

dev-resources.site

for different kinds of informations.

REST In Peace

Published at
12/9/2024
Categories
rest
architecture
adventoftech2024
Author
damienbopt
Categories
3 categories in total
rest
open
architecture
open
adventoftech2024
open
Author
10 person written this
damienbopt
open
REST In Peace

Dans le monde numérique d’aujourd’hui, l’architecture REST (Representational State Transfer, 2000) est devenue un pilier fondamental pour le développement du Web. Cette architecture, conceptualisée par Roy Fielding dans sa thèse de doctorat soutenue en 2000, a transformé la manière dont les systèmes distribués communiquent et interagissent. Avant cette révolution, l’Internet était déjà en pleine effervescence grâce à une série de technologies et de protocoles qui ont jeté les bases des communications en ligne. Cet article explore l’évolution de ces technologies précurseurs, la vision novatrice du Web décrite par Fielding, et la récupération du titre de sa thèse dans le paysage numérique actuel.

L’avant Web

Avant l’émergence du World Wide Web, plusieurs technologies ont été fondamentales pour le développement des communications sur Internet. Parmi celles-ci, des protocoles comme FTP (File Transfer Protocol, 1971), Telnet (1983), et SMTP (Simple Mail Transfer Protocol, 1980) ont joué un rôle crucial. FTP permettait le transfert de fichiers entre ordinateurs, Telnet offrait un accès à distance aux systèmes, et SMTP facilitait l’envoi de courriels, établissant ainsi les bases des communications numériques.

NNTP (Network News Transfer Protocol, 1986) a été utilisé pour la distribution, l’interrogation, la récupération et la publication de messages dans les groupes de discussion Usenet. Ce protocole a permis le partage d’informations et de discussions à grande échelle, bien avant l’apparition des forums en ligne modernes.

IRC (Internet Relay Chat, 1988) a introduit la communication en temps réel, permettant aux utilisateurs de discuter en ligne dans des canaux publics ou privés. Cela a ouvert la voie à des interactions instantanées et à la formation de communautés en ligne.

En parallèle, des outils comme HyperCard (1987) ont introduit des concepts d’hypertexte et de navigation par liens, préfigurant les fonctionnalités qui deviendront centrales dans le Web. HyperCard permettait de créer des "empilements" de cartes interconnectées, offrant une expérience interactive et multimédia.

À la même période, le RPC (Remote Procedure Call, 1986) présenté par Nelson propose une approche différente des protocoles ci-dessus, en s’intéressant à l’expérience programmeur. Son application directe sera en revanche limitée au monde de l’entreprise.

Ces technologies et concepts ont préparé le terrain pour les innovations qui suivront, en posant les bases de la communication et de l’interaction numérique avant l’avènement du Web.

La thèse de Roy Fielding

Le World Wide Web (W3, 1989) arrive porté par Tim Berners-Lee, et en 1993 à rebours de ce qui est fait côté Gopher (1991), les technologies du W3 sont mises dans le domaine public. 1993 est aussi l'année où Roy Fielding obtient son Master of Science et s'implique dans le W3 dans le cadre de son travail à l'université de Californie. Il participe ainsi à l'élaboration de HTTP, de HTML et d'URI. C'est en 2000 qu'il publie sa thèse de doctorat, intitulée "les styles d'architecture et la conception des architectures logicielles en réseau" ("Architectural styles and the design of network-based software architectures").

Cette thèse étudie les différents styles d'architecture répandus jusqu'alors dans l'optique de leur utilisation dans un système hypermédia en réseau, en particulier à l'échelle d'Internet. Pour cela il définit les contraintes d'architectures essentielles à respecter pour être pertinent, et examine les différents styles existants à la lumière de celles-ci. Il faut être sur une base client / serveur, sans état, avoir des possibilités de mise en cache, une uniformité d'interface, un système en couche et donner la possibilité d'avoir du code à la demande.

La spécificité de cette dernière contrainte, celle du code à la demande ("Code-On-Demand") (notre bien connu JavaScript dans le navigateur), est que c'est la seule à être optionnelle. Dans REST, on peut se passer du code côté agent utilisateur, alors que du reste, non.

La thèse a également précisé la notion d’API (Application Programming Interface, 1968), en requalifiant le terme d'origine d'API de bibliothèque ("library-based API"), et en présentant les API réseau ("network-based APIs"), qui facilitent l’interaction entre différentes applications sur le réseau.

Caractéristiques des APIs réseau

Une API de bibliothèque (§6.5.1) se définit par un ensemble de points d'entrée ainsi que les paramètres associés en entrée ou en sortie. En langage courant, on parlera d'opérations pour les points d'entrée (comme des fonctions, des méthodes ou des procédures), de paramètres et de type de retour. C'est la façon standard de décrire une interface (ou un entête) qui permet de compiler un programme appelant une implémentation de l'opération, sans connaître le code source de l'implémentation.

C'est aussi le formalisme retenu par RPC, parce que cette métaphore de l'opération locale (i.e. non distribuée, et en particulier sans réseau) était usuelle pour les programmeurs de l'époque. En RPC en revanche on parlait d'IDL (Interface Definition Language, implémentation 1981, le nom viendra après), qui permet de générer l'API dans le langage de programmation cible.

L'API de bibliothèque n'est pas très intéressante au sens de REST. Elle est bien connue, et elle a montré ses limitations dans le développement du Web. Ce qui intéresse Roy Fielding est l'API réseau, qui en conséquence n'est pas une liste d'opération avec des paramètres en entrée et en sortie. Toujours dans le chapitre §6.5.1 de sa dissertation, il la décrit comme une syntaxe des échanges réseaux, avec des sémantiques définies, pour les interactions inter-applicatives.

Il donne deux exemples de ces API réseaux : FTP et HTTP. Il cite aussi en contre-exemple CORBA (1991), pour lequel il argumente que la sémantique n'est pas définie par le protocole réseau (IIOP) mais par l'IDL. L'IDL est dans le cas de REST un marqueur de dépossession de l'hypermédia : on sort du cadre de la thèse.

L’après thèse, le blog

Ce travail de Roy Fielding, personnalité déjà connue par ses participations aux travaux du consortium W3, n'est pas passé inaperçu. A l'époque, les mécaniques RPC sur HTTP étaient portées par XML-RPC (1998) et son descendant indirect SOAP (2000). Surfant sur la vague anti-XML, langage trop lié aux méchants Microsoft et IBM entre autres, certains ont profité de la visibilité de Fielding pour s'approprier le mot REST et donner écho à leurs marottes.

En 2007 paraît le livre "RESTful Web Services" de Leonard Richardson et Sam Ruby, suivi en 2013 par "RESTful Web APIs" de Richardson, Mike Amundsen et Ruby. Ils seront un des vecteurs principaux de la diffusion du terme "RESTful". REST n'est ni une bibliothèque, ni une méthodologie : il ne répond pas aux besoins immédiats des codeurs. C'est à cet enjeu que ces livres s’attaquent, mais avec l'hypermédia loin au second plan du premier livre, le plus populaire.

Une incompréhension fréquente de la centralité de l’hypermédia dans REST a conduit à des implémentations incomplètes ou erronées de ce style d'architecture. Fielding a souvent critiqué le retour en force du RPC, sur son blog ou sur Twitter, soulignant que beaucoup de développeurs ne comprenaient pas pleinement les principes de REST, ce qui a donné lieu à des débats animés dans la communauté.

Laissez REST en paix : REST In Peace

Aujourd’hui, bien que le terme REST soit largement adopté, les détournements multiples de son contenu, que ce soit l'abandon de son principe structurel de l'hypermédia, de la contradiction de l'expression "REST API" avec l'API réseau ou du caractère désormais obligatoire du code à la demande, devraient faire hésiter à prôner ces termes. L'immense majorité des codeurs pensent à Swagger (2011), ou à sa normalisation OpenAPI (2016), quand ils entendent les expressions "REST API" ou "RESTful".

Pourtant, la spécification OpenAPI est uniquement une grammaire d'IDL, avec les paramètres dispersés façon puzzle. Les termes "REST" et "RESTful" sont d'ailleurs absent de la spécification OpenAPI. Et du côté des "API Gateways", Kong a déprécié en 2018 le terme "API" de son modèle, au profit des termes "route" et "service".

De son côté Roy Fielding a annoncé sur son blog l'abandon de toute volonté de vulgariser sa thèse en 2008. Il continue de temps en temps à évoquer le sujet sur X, mais n'en parle plus sur Twitter. Le cas trivial d'une "API REST" qui se restreint à lancer du JSON sans hyperlien sur HTTP n'est même plus abordé. Les vulgarisateurs de REST, subtilement appelés RESTafarians par les pseudo-RESTfuliens, sont considérés par ces derniers comme des cryptos fascistes ne comprenant rien au monde de l'informatique.

Il est nécessaire désormais de laisser REST en paix, en respectant ses concepts originaux pour garantir des systèmes robustes et évolutifs : la fameuse toile à l'échelle d'Internet, qui résiste pour l'instant à tout, même aux développeurs TypeScript, preuve de la qualité de son architecture.


Cet article fait partie du "Advent of Tech 2024 Onepoint", une série d'articles tech publiés par Onepoint pour patienter jusqu'à Noël.
Voir tous les articles du Advent of Tech 2024.

rest Article's
30 articles in total
Favicon
Best Practices for Securing REST APIs: Balancing Performance, Usability, and Security
Favicon
Learning REST APIs in JavaScript
Favicon
Validation in Spring REST Framework (SRF)
Favicon
API Design Best Practices in 2025: REST, GraphQL, and gRPC
Favicon
GraphQL vs REST: When to Choose Which for Your Node.js Backend
Favicon
REST VS SOAP
Favicon
Discover the 9 Best Open-Source Alternatives to Postman
Favicon
Building Robust REST Client with Quarkus: A Comprehensive Guide
Favicon
O que é REST API?
Favicon
Building Async APIs in ASP.NET Core - The Right Way
Favicon
Why Clear and Meaningful Status Codes Matter in Your REST API
Favicon
Understanding Request and Response Headers in REST APIs
Favicon
How Scale Changes Everything - The LiveAPI Perspective
Favicon
A Closer Look At API Docs Generated via LiveAPI's AI
Favicon
Quick and Easy: How to Test RESTful APIs in Java
Favicon
Understanding API Architectural Styles: REST, GraphQL, SOAP and More
Favicon
Implementing Pagination, Filtering, and Sorting in REST APIs
Favicon
REST In Peace
Favicon
Understanding HTTP Status Codes
Favicon
Musings Over What Makes LiveAPI Different (from Swagger Et Cetera)
Favicon
Introduction to APIs: Supercharging Your Web Development Journey
Favicon
An Innovative Way to Create REST APIs
Favicon
Best Practices for Developing and Integrating REST APIs into Web Applications
Favicon
Как подружить котиков, слонов и китов: тестирование Spring-приложений с Testcontainers 🐱🐘🐋
Favicon
Implementing Idempotent REST APIs in ASP.NET Core
Favicon
Understanding REST vs. GraphQL: Which One Should You Choose?
Favicon
Problem Details for ASP.NET Core APIs
Favicon
REST vs. GraphQL: Key Differences, Benefits, and Which One to Choose for Your Project
Favicon
REST vs. GraphQL: Choosing the Right API for Your Project
Favicon
Optimizing Your REST Assured Tests: Setting Default Host and Port, GET Requests, and Assertions

Featured ones: