web-dev-qa-db-fra.com

Quels sont REST Ressources?

Que sont les ressources REST et quel est leur lien avec les noms de ressources et leurs représentations?

J'ai lu quelques articles sur le sujet, mais ils étaient trop abstraits et ils m'ont laissé plus confus qu'auparavant.

L'URL suivante est-elle une ressource? Si tel est le cas, quel est le nom de cette ressource et quelle est sa représentation?

http://api.example.com/users.json?length=2&offset=5

La réponse GET de l'URL devrait ressembler à ceci:

[
   {
      id: 6,
      name: "John"
   },
   {
      id: 7,
      name: "Jane"
   }
]
36
Emanuil Rusev

Qu'est-ce qu'une ressource?

Une ressource est tout ce qui est suffisamment important pour être référencé en tant que chose en soi. Si vos utilisateurs “souhaitent créer un lien hypertexte faire ou réfuter des affirmations à ce sujet, récupérer ou mettre en cache un représentation, en inclure tout ou partie par référence dans une autre représentation, annotez-la ou effectuez d’autres opérations sur ça », alors vous devriez en faire une ressource.

Habituellement, une ressource est quelque chose qui peut être stocké sur un ordinateur et représenté sous forme de flux de bits: un document, une ligne dans une base de données ou le résultat de l'exécution d'un algorithme. Une ressource peut être un physique objet comme une pomme, ou un concept abstrait comme le courage, mais (comme nous le verrons plus tard), les représentations de telles ressources ne peuvent être que décevant. Voici quelques ressources possibles:

  • Version 1.0.3 de la version du logiciel
  • La dernière version de la version du logiciel
  • La première entrée de blog du 24 octobre 2006
  • Une carte routière de Little Rock, Arkansas
  • Quelques informations sur les méduses
  • Un répertoire de ressources relatives aux méduses
  • Le prochain nombre premier après 1024
  • Les cinq prochains nombres premiers après 1024
  • Les chiffres de vente pour Q42004
  • La relation entre deux connaissances, Alice et Bob
  • Une liste des bogues ouverts dans la base de données de bogues

Le texte provient du livre O'Reilly " RESTful Web Services ".

22
Emanuil Rusev

La raison pour laquelle les articles sur les ressources REST sont abstraits est due au concept de ressource REST est abstrait. Il s’agit essentiellement de "tout ce qui est accédé par l’URL fournie". Ainsi, dans votre exemple, la ressource serait la liste de deux utilisateurs commençant au décalage 5 dans une liste plus grande. Notez que la manière dont la ressource est implémentée est un détail qui ne vous intéresse pas sauf si vous écrivez celle-ci. 

L'URL suivante est-elle une ressource?

L'URL n'est pas une ressource, c'est une étiquette qui identifie la ressource. Il s'agit, si vous préférez, du nom de la ressource.

Le JSON est une représentation de la ressource. 

34
JeremyP

L'URL n'est jamais une ressource, ni son nom, ni sa représentation.

L'URL indique simplement où se trouve la ressource et vous pouvez appeler GET, POST, PUT, DELETE, etc. sur cette URL pour appeler la ressource.

Les données répondues sont les ressources tandis que la forme des données est sa représentation.

Supposons que votre URL avec des paramètres GET donnés puisse générer une ressource JSON - il s'agit de la représentation JSON de cette ressource. Alors qu'avec d'autres indicateurs dans l'EGET, il pourrait répondre avec les mêmes données en XML - ce sera une autre représentation de la même ressource.

EDIT: En raison des commentaires au PO et à ma réponse, j'ajoute une autre explication.

De même, le nom de ressource est considéré comme le "nom de script", par exemple. dans ce cas, il s'agit de users.json tandis que ce nom de ressource décrit lui-même la représentation de la ressource elle-même - lors de l'appel de cette ressource, nous nous attendons à ce que la ressource soit en JSON, tandis que lors de l'appel, par exemple. users.xml nous attendons les données en XML.

  1. Lorsque je modifie le paramètre offset dans GET, la réponse contient ensemble de données différent - s'agit-il d'une nouvelle ressource ou de sa représentation?
  2. Lorsque je définis quelles colonnes sont renvoyées en réponse dans GET, s'agit-il d'une ressource différente ou d'une représentation différente, ou?
  1. Eh bien, ici le problème et la réponse sont clairs: nous appelons toujours la même URL, les réponses du serveur avec les données sous la même forme (il s’agit toujours de JSON), les données contiennent toujours des informations sur les utilisateurs. nouveau paramètre offset. Il est donc évident que il s'agit toujours de la même ressource avec la même représentation et le même nom de ressource qu'avant.
  2. Deuxième problème pourrait être un peu déroutant. Bien que nous appelions la même ressource, bien que la ressource contienne les mêmes données (avec seulement un jeu de colonnes prédéfini) et que les données soient dans la même représentation, elles pourraient nous sembler être une ressource différente. Mais en raison des points du paragraphe ci-dessus, il ne s'agit pas non plus d'une ressource ou d'une représentation différente. Bien que l'ensemble de données contienne moins d'informations, le côté demandeur (filtrant cet ensemble de données) devrait en tenir compte et se comporter en conséquence. Encore une fois: c'est la même ressource avec le même nom de ressource et la même représentation de ressource.
13
shadyyx

Que sont les ressources REST et quel est leur lien avec les noms de ressources et leurs représentations?

REST ne signifie pas beaucoup plus que l’utilisation correcte des verbes HTTP (GET, POST, PUT, DELETE, etc.).

L'URL suivante est-elle une ressource?

Toutes les URL sont des chaînes qui indiquent aux ordinateurs où une ressource peut être localisée. (D'où le nom: Uniform Resource Locator).

11
Quentin

REST

Ce style architectural a été défini dans le chapitre 5 de la thèse de Roy T. Fielding.

REST concerne la manipulation de l'état des ressources via leurs représentations au sommet de la communication sans état entre le client et le serveur. Il s'agit d'un style architectural indépendant du protocole mais, dans la pratique, il est généralement implémenté au sommet du protocole HTTP.

Ressources

La ressource elle-même est une abstraction et, pour reprendre les termes de l'auteur, une ressource peut être toute information pouvant être nommée. Les entités de domaine d'une application (par exemple, une personne, un utilisateur, une facture, un ensemble de factures, etc.) peuvent être des ressources. Voir la citation suivante de la thèse de Fielding:

5.2.1.1 Ressources et identificateurs de ressources

L'abstraction de clé des informations dans REST est un ressource. Toute information pouvant être nommée peut être une ressource: un document ou une image, un service temporel (par exemple, "le temps qu'il fait à Los Angeles"), un ensemble d'autres ressources, un objet non virtuel (par exemple, une personne), etc. . En d'autres termes, tout concept susceptible d'être la cible d'une référence hypertexte d'un auteur doit entrer dans la définition d'une ressource. Une ressource est un mappage conceptuel sur un ensemble d'entités et non sur l'entité qui correspond au mappage à un moment donné.

Plus précisément, une ressource R est une fonction d'appartenance variant dans le temps MR(t), qui correspond pour un instant t à un ensemble d’entités ou de valeurs équivalentes. Les valeurs de l'ensemble peuvent être représentations de ressources et/ou identificateurs de ressources. [...]

Représentations de ressources

Un document JSON est représentation de la ressource qui vous permet de représenter l'état d'une ressource. Un serveur peut fournir différentes représentations pour la même ressource. Par exemple, utiliser des documents XML et JSON. Un client peut utiliser négociation de contenu pour demander différentes représentations de la même ressource.

Citant la thèse de Fielding:

5.2.1.2 Représentations

Les composants REST effectuent des actions sur une ressource en utilisant une représentation pour capturer l'état actuel ou prévu de cette ressource et en transférant cette représentation entre les composants. Une représentation est une séquence d'octets, plus des métadonnées de représentation pour décrire ces octets. Les autres noms couramment utilisés, mais moins précis, pour une représentation comprennent: document, fichier et entité de message HTTP, instance ou variante.

Une représentation comprend des données, des métadonnées décrivant les données et, à l'occasion, des métadonnées permettant de décrire les métadonnées (généralement dans le but de vérifier l'intégrité du message). Les métadonnées se présentent sous la forme de paires nom-valeur, le nom correspondant à une norme définissant la structure et la sémantique de la valeur. Les messages de réponse peuvent inclure à la fois des métadonnées de représentation et des métadonnées de ressource: informations sur la ressource qui ne sont pas spécifiques à la représentation fournie. [...]

Sur HTTP, les en-têtes de requête et de réponse peuvent être utilisés pour échanger des métadonnées sur la représentation.

Identifiants de ressources

Une URL a identificateur de ressource qui identifie/localise une ressource sur le serveur.


Cette réponse peut aussi être perspicace.

6
cassiomolin

Une ressource est:

  • un nom
  • c'est unique
  • et peut être représenté sous forme de données
  • et a au moins un URI

Je vais dans plus de détails sur mon blog, Qu'est-ce, exactement, est une ressource RESTful?

6
techiferous

Représentational State Transfer (REST) ​​est un style d'architecture logicielle destiné aux systèmes distribués tels que le World Wide Web. Les architectures de style REST sont composées de clients et de serveurs. Les clients initient des demandes aux serveurs; les serveurs traitent les demandes et renvoient les réponses appropriées. Les demandes et les réponses s'articulent autour du transfert de représentations de ressources. Les ressources sont un ensemble d'objets adressables, essentiellement des fichiers et des documents, liés à l'aide d'URL. Comme correctement souligné ci-dessus par Quentin, l'architecture REST implique simplement que vous utilisiez les verbes HTTP GET/POST/PUT/DELETE ... 

4
verisimilitude

Conceptuellement, vous pouvez considérer une ressource comme tout ce qui est accessible sur le Web à l'aide d'une URL . Si vous vous en tenez à cette règle, http://api.example.com/users.json?length=2&offset=5 peut être considéré comme une ressource.

4

Vous avez uniquement fourni ce qui semble être des paramètres relatifs plutôt que "ID" qui est (ou devrait être) concret. Rappelez-vous que les opérations get doivent être idempotentes (c'est-à-dire qu'elles peuvent être répétées avec le même résultat).

2
Jeff Watkins

Qu'est-ce que le repos?

REST est un style d'architecture qui signifie «Representational (RE) State (S) transfer» (T).

Qu'est-ce que la ressource REST?

La ressource restante est constituée de données sur lesquelles nous souhaitons effectuer une ou plusieurs opérations. Elles peuvent donc être présentes dans la base de données sous forme d’enregistrement de table (s) ou sous n’importe quelle autre forme. Cet enregistrement possède un identifiant unique avec lequel il peut être identifié. comme id pour employé.

Maintenant, lorsque ces données sont demandées par une URL unique telle que http://www.example.com/employees/123,so , en définitive, les données ou enregistrements présents dans la base de données seront convertis au format JSON/XML/Texte brut par Rest Service et sera envoyé au consommateur.

Donc, fondamentalement, ce qui se passe ici est REPRESENTATIONAL STATE TRANSFER, en ce sens que l’état des données présentes dans la base de données est transféré dans un autre format qui peut être JSON/XML ou texte brut.

Donc, dans ce cas, 1 employé représente 1 ressource accessible par une URL unique telle que http://www.example.com/employees/123

Si nous voulons obtenir la liste de toutes les ressources (employés), nous ferons: http://www.example.com/employees

J'espère que cela aidera.

0
user2603985