Les ressources dans l’architecture REST : la source

Traduction de la section « Resources and Resource Identifiers » de la thèse de Roy T. Fielding.

5.2.1.1 Ressources et identificateurs de ressources

La ressource est le fondement de l’abstraction de l’information dans REST. Toute information qui peut être nommée peut être une ressource : un document ou une image, un service momentané (par exemple « le temps à Los Angeles aujourd’hui »), un ensemble d’autres ressources, un objet non virtuel (par exemple une personne), etc. Autrement dit, tout concept pouvant être la cible d’un lien hypertexte répond nécessairement à la définition de ressource. Une ressource est la référence conceptuelle1 vers un ensemble d’entités, pas une entité qui correspondrait à la référence à un instant donné.

Plus précisément, une ressource R est une fonction d’appartenance2 MR(t), qui au temps t associe un ensemble d’entités, ou de valeurs, qui sont équivalentes. Les valeurs de cet ensemble peuvent être des représentation de ressources3 ou des identifiants de ressources4. Une ressource peut être associée à l’ensemble vide, ce qui permet de faire référence à un concept avant qu’aucune réalisation de ce concept n’existe — une notion étrangère à la plupart des systèmes hypertextes avant le Web. Certaines ressources sont statiques dans le sens où, examinées à tout moment après leur création, elles correspondent toujours au même ensemble de valeurs. D’autres ont un degré de variabilité élevé dans le temps. La seule chose qui doit être statique pour une ressource est la sémantique de la référence, puisque la sémantique est ce qui distingue une ressource d’une autre.

Par exemple, la « version préférée de l’auteur » d’une publication académique est une référence dont la valeur varie dans le temps, alors que la « version publiée dans les actes du colloque X » est statique. Ce sont deux ressources distinctes, même si elles font référence à la même valeur à un instant donné. La distinction est nécessaire pour que les deux ressources puissent être identifiées et classées indépendamment. Un exemple similaire dans le domaine de l’ingénierie logicielle est l’identification distincte d’un fichier de code source dans un système de gestion de versions, comme la « dernière révision », la « révision numéro 1.2.7 » ou la « révision incluse dans la version Orange ».

Cette définition abstraite d’une ressource rend possible des fonctions essentielles de l’architecture du Web. Premièrement, elle généralise en englobant plusieurs sources d’information sans les distinguer artificiellement par type ou par implémentation. Deuxièmement, elle autorise l’attachement tardif5 de la référence à une représentation, ce qui rend possible une négociation de contenu6 basée sur les caractéristiques de la requête. Finalement, elle permet à l’auteur de référencer le concept plutôt qu’une représentation singulière de ce concept, supprimant ainsi le besoin de modifier tous les liens existants à chaque fois que la représentation change (en supposant que l’auteur a utilisé les bons identificateurs).

REST utilise un identificateur de ressource7 pour identifier la ressource impliquée dans une interaction entre composants. Les connecteurs REST offrent une interface générique pour atteindre et manipuler l’ensemble de valeurs d’une ressource, indépendamment de la manière dont la fonction d’appartenance est définie ou du logiciel qui traite la requête. L’autorité de nommage qui a affecté l’identificateur de ressource, rendant possible le référencement de celle-ci, a la responsabilité du maintien de la validité sémantique de la référence8 dans le temps (c’est-à-dire de s’assurer que la fonction d’appartenance ne change pas).

Les systèmes hypertextes traditionnels, qui opèrent typiquement en environnement clos ou local, utilisent des nœuds uniques ou des identificateurs de documents qui changent à chaque fois que l’information change, s’appuyant sur des serveurs de liens pour maintenir la référence séparément du contenu. Comme les serveurs de liens centralisés sont un anathème pour les exigences pluri-organisationnelles et à échelle gigantesque du Web, REST se repose au contraire sur l’auteur pour choisir l’identificateur de ressource qui convient le mieux à la nature du concept identifié. Naturellement, la qualité d’un identificateur est souvent proportionnelle à l’argent dépensé pour maintenir sa validité, ce qui conduit aux liens brisés, au fur et à mesure de la disparition ou du déplacement d’information éphémère ou peu maintenue.

Notes

  1. a conceptual mapping []
  2. membership function []
  3. resources representations []
  4. resource identifiers []
  5. late binding []
  6. content negociation []
  7. resource identifier []
  8. mapping []