Was ist im REST-Sprachgebrauch der Unterschied zwischen einer Ressource und einer Darstellung?

9

Mein Verständnis von REST ermöglicht das Modellieren von Serviceoperationen als Darstellung des Status und Übergang von einem Status zu einem anderen unter Verwendung von HTTP. Ich habe Ressourcen bis vor kurzem immer als Repräsentationen des Service-Side-State verstanden, als ich diesen Artikel von Jimmy Bogard las, von dem ich weiß, dass er ein kluger Entwickler / Architekt ist, der von der Community sehr geschätzt wird. Um eine bestimmte Aussage aus diesem Beitrag zu zitieren

Die Darstellung ist etwas anders - sie beschreibt den aktuellen Status der Ressource (auf Anfrage).

Das hat mich verwirrt. Was ist die allgemein akzeptierte Meinung zu diesem Thema?

Suhas
quelle
1
Vielleicht möchten Sie Folgendes überprüfen: Zu welchen Themen kann ich hier fragen? . Meinungsumfragen sind für Programmierer nicht zum Thema.
Adam Zuckerman
2
Nun, alles, was auf dieser Seite aufgeführt ist, hat keine Antwort in Schwarzweiß, sondern alle Meinungen. Ich bin mir auch nicht sicher, wie es bei dieser Frage um die Meinung geht. Liegt es nur daran, dass ich in meiner Frage das Wort "Meinung" verwendet habe?
Suhas
In erster Linie ja. Leider (oder vielleicht zum Glück) wurden die Wörter "Meinung", "Best Practice" und dergleichen stark mit "einer leeren Resonanzhöhle, in der sich ein Gehirn befinden sollte" in Verbindung gebracht, da die meisten Leute, die solche Begriffe verwenden, lediglich eine Herde erkennen möchten in der Ferne und traben danach davon. Menschen, die nach Wortdefinitionen suchen, sind oft die schlimmsten Straftäter. Welches spezifische Problem versuchen Sie zu lösen?
Robert Harvey
1
In Bezug auf Ihre Frage ist eine Ressource lediglich "etwas im Internet mit einer Adresse", während eine Darstellung "die Art und Weise ist, wie das Ding im Internet wiedergegeben wird". Dies kann eine Datei, eine Webseite oder ein JSON-Dokument sein. Es kann sich um eine bestimmte Art von Datei handeln, z. B. ein Word-Dokument oder eine Tabelle. In all diesen Fällen ist die Darstellung das, was Sie abrufen. "Der aktuelle Status der Ressource" ist eine Erkennung, dass sich das Objekt seit dem letzten Abrufen möglicherweise geändert hat.
Robert Harvey

Antworten:

14

Kurze Antwort

Die Karte ist nicht das Gebiet.

Längere Antwort - wie bei allem REST ist der Ausgangspunkt die These von Roy Fielding ; insbesondere Kapitel 5 . Für Ihre aktuelle Frage möchten Sie Abschnitt 5.2.1.

REST wird durch vier Schnittstellenbeschränkungen definiert: Identifizierung von Ressourcen; Manipulation von Ressourcen durch Repräsentationen; selbstbeschreibende Nachrichten; und Hypermedia als Motor des Anwendungsstatus.

Ressource

Die Schlüsselabstraktion von Informationen in REST ist eine Ressource. Alle Informationen, die benannt werden können, können eine Ressource sein: ein Dokument oder Bild, ein zeitlicher Dienst (z. B. "heutiges Wetter in Los Angeles"), eine Sammlung anderer Ressourcen, ein nicht virtuelles Objekt (z. B. eine Person) usw. . Mit anderen Worten, jedes Konzept, das das Ziel der Hypertextreferenz eines Autors sein könnte, muss in die Definition einer Ressource passen. Eine Ressource ist eine konzeptionelle Zuordnung zu einer Reihe von Entitäten, nicht zu der Entität, die der Zuordnung zu einem bestimmten Zeitpunkt entspricht.

Darstellung

REST-Komponenten führen Aktionen für eine Ressource aus, indem sie mithilfe einer Darstellung den aktuellen oder beabsichtigten Status dieser Ressource erfassen und diese Darstellung zwischen Komponenten übertragen. Eine Darstellung ist eine Folge von Bytes plus Darstellungsmetadaten zur Beschreibung dieser Bytes. Andere häufig verwendete, aber weniger genaue Namen für eine Darstellung sind: Dokument-, Datei- und HTTP-Nachrichtenentität, -instanz oder -variante.

Eine Darstellung besteht aus Daten, Metadaten, die die Daten beschreiben, und gelegentlich Metadaten zur Beschreibung der Metadaten (normalerweise zum Überprüfen der Nachrichtenintegrität).

Also: "Das heutige Wetter in Los Angeles" ist eine Ressource. Zu den Kandidatenvertretungen gehören: ein Textdokument mit der neuesten Vorhersage des nationalen Wetterdienstes; eine visuelle Darstellung des Wetterradars und eine Audioaufzeichnung der Vorhersage.

VoiceOfUnreason
quelle
2

Eine Ressource ist das, mit dem Sie arbeiten. Wenn Sie beispielsweise eine API zum Schalten einer bestimmten Lampe haben, ist die Ressource die Lampe selbst. Eine Ressource kann physisch (z. B. Lampe, Person) oder nicht physisch (z. B. Artikel, Rolle, Zeile in der Datenbank) sein. Eine Ressource kann primär (z. B. Kontostand) oder abgeleitet (z. B. Transaktion) sein. Eine Ressource kann sich auf eine bestimmte Entität beziehen (z. B. die fünfte in dieser Lampenfassung installierte Lampe) oder auf eine Rolle, die zu unterschiedlichen Zeiten einer anderen Entität zugeordnet ist (z. B. die aktuell installierte Lampe, die am 5. August 2008 installierte Lampe). oder es kann mehreren Entitäten zugeordnet werden (z. B. allen Lampen im Haus).

Die Darstellung einer Ressource ist die Art und Weise, wie Ihr Dienst den Status der Ressource kommuniziert, z. B. XML, JSON, das den Status der Lampe darstellt.

In der REST-API wird eine Ressource durch eine einheitliche Kennung (z. B. URI) identifiziert. Eine einzelne Ressource kann mehrere Darstellungen haben. In der HTTP-REST-API geben Sie normalerweise die Darstellung an, die Sie in den Headern HTTP Content-Type und Accept verwenden möchten.

Eine wichtige Erkenntnis in der Client-Server-Architektur ist, dass Sie die Ressource nicht zum Client bringen können und nicht versuchen sollten, sie so zu gestalten, wie Sie es tun. Stattdessen können Sie in der REST-API eine Ressource remote bearbeiten, indem Sie Darstellungen der Ressource übertragen. Stellen Sie sich das so vor, Sie führen die Lampe nicht mit FedEx aus, damit der Client die Lampe direkt manipulieren kann, sondern der Dienst erstellt eine XML / JSON / protobuf / CSV-Darstellung der Lampe und der Client sendet eine Darstellung der beabsichtigten Manipulationen. Der Dienst manipuliert dann den tatsächlichen Status der Lampe im Namen des Clients oder lehnt die Anforderung ab, beispielsweise wenn der Client nicht berechtigt ist, die Vorgänge an der Lampe auszuführen. Dies mag offensichtlich erscheinen / Haare spalten, aber das Wichtigste ist, dass, da die Darstellung nicht die Ressource selbst ist,

Lie Ryan
quelle
1

Eine Ressource kann eine Rechnung sein.

Eine Darstellung ist eine Rechnung zu einem bestimmten Zeitpunkt im JSON-Format oder im XML-Format. Möglicherweise erhalten Sie zu einem späteren Zeitpunkt genau dieselbe Rechnung. Es handelt sich um dieselbe Ressource, jedoch in einem möglicherweise anderen Status (storniert, bezahlt usw.).

Sie nehmen den aktuellen Status der Rechnung (z. B. alle Rechnungsdaten in der Datenbank) und geben ihr zu einem bestimmten Zeitpunkt eine bestimmte Darstellung (z. B. HTML, XML, JSON), um sie auf ein anderes Gerät zu übertragen (z. B.:: ein Browser)

Bryan Oakley
quelle