Aktuelle Beispiele für HATEOAS (REST-Architektur) [geschlossen]

140

Wie jeder vielleicht bemerkt hat, gibt es viele gefälschte / rudimentäre REST-APIs in freier Wildbahn (die eine HTTP-API implementieren und als REST bezeichnen, ohne die Anforderungen des Hypertextes als Engine des Anwendungsstatus zu befolgen, die dazu geführt haben zum berühmten Geschwätz von Roy T. Fielding , dem Mann, der zuerst das REST-Paradigma spezifizierte).

Ich konnte keine praktischen Beispiele für eine wirklich hypertextgesteuerte REST-Implementierung zusammen mit den zugehörigen anwendungsspezifischen Medientypdefinitionen für die Statusübergänge finden.

Gibt es öffentlich zugängliche Beispiele für solche Implementierungen?

pmf
quelle
3
Ich finde das interessant, da viele Leute behaupten, REST sei "einfach", aber Fielding selbst sagt, dass es zwar eine einfache Architektur ist, es aber nicht einfach ist, eine Anwendung damit zu entwerfen.
Aehlke
3
Übrigens sollte es HATEOAS sein, nicht HATEOS, das spätere googelt nicht gut.
David Roussel
2
Paypal scheint es zu benutzen: developer.paypal.com/docs/integration/direct/…
Andrew Thaddeus Martin
Hat Roy Fielding selbst jemals eine Anwendung mit HATEOAS erstellt?
Systemovich

Antworten:

102

Es ist keine Implementierung im Sinne von Code, aber ich mag den Artikel " Wie man eine Tasse Kaffee bekommt" auf InfoQ wirklich. Es beschreibt den Prozess der Bestellung eines Kaffees bei Starbucks als RESTful-Protokoll. Dies geht über den typischen REST-Einführungsartikel "Alles ist eine Ressource" hinaus und konzentriert sich auf HATEOAS. Sehr empfehlenswert.

Trends
quelle
5
Das Buch "Rest in Practice" von Jim Webber, Sayas Parastatidis und Ian Robinson ist sehr nützlich
DomreiRoam
2
Der Artikel ist in Ordnung, aber leider entspricht die darin beschriebene API nicht strikt dem HATEOAS-Prinzip, da keine benutzerdefinierten Medientypen verwendet werden. Wie würde der Client wissen, wie er jede Ressource manipuliert (z. B. deserialisiert, analysiert, anzeigt), wenn alles application / xml ist? Dies würde von einigen nicht standardmäßigen Methoden zur Weitergabe dieser Informationen abhängen, z. B. von Dokumentationen, die von Menschen gelesen werden sollen.
Ygormutti
21

Wie wäre es mit der Sun Cloud API ? Aus der Einleitung:

Die API setzt keine bestimmte Struktur im URI-Bereich voraus. Ausgangspunkt ist eine vom Cloud-Dienstanbieter bereitgestellte URI, die die Cloud selbst identifiziert. Die Darstellung der Cloud enthält URIs für die anderen Ressourcen in der Cloud sowie für Vorgänge, die mit ihnen ausgeführt werden können (z. B. Bereitstellen und Starten von virtuellen Maschinen).

Die Hintergrundgeschichte könnte auch hilfreich sein.

Reiches Apodaca
quelle
2
Es ist die Hintergrundgeschichte, die mich auf den Weg von HATEAOS gebracht hat.
CyberFonic
3
Alle Links sind tot
Roeland Van Heddegem
"Es tut uns leid, dass die Website kenai.com geschlossen wurde."
Nick Rolando
@ NickRolando, ich habe den Link ersetzt.
Rich Apodaca
@RichApodaca, Link zur Hintergrundgeschichte ist tot.
Vasantha Ganesh K
7

Netflix verfügt über eine auf HATEOAS basierende REST-API , die Links als Teil der Ressourcen enthält.

Will Sargent
quelle
1
und jetzt ist der Statuscode 404.
naXa
1
@ Will Sargent Link ist defekt, bitte aktualisieren.
Govi S
Entschuldigung, es sieht so aus, als hätte Netflix es heruntergenommen und sich für etwas anderes entschieden.
Will Sargent
2
Nur-Link-Antworten sind in der Regel weniger relevant, wenn solche Links tot sind.
Nyedidikeke
@nyedidikeke es ist ein Link, aber eine Antwort für diesen Kontext, Sie müssen nur den Link reparieren, indem Sie den Beitrag bearbeiten!
Al-Mothafar
3

Wird die RESTfulness of Sun Cloud API nicht tatsächlich in Roys 4. Punkt angesprochen:

Eine REST-API darf keine festen Ressourcennamen oder -hierarchien definieren (eine offensichtliche Kopplung von Client und Server). Server müssen die Freiheit haben, ihren eigenen Namespace zu steuern. Ermöglichen Sie Servern stattdessen, Clients anzuweisen, wie geeignete URIs erstellt werden sollen, wie dies in HTML-Formularen und URI-Vorlagen der Fall ist, indem Sie diese Anweisungen in Medientypen und Verknüpfungsbeziehungen definieren. [Ein Fehler hier impliziert, dass Clients aufgrund von Out-of-Band-Informationen eine Ressourcenstruktur annehmen, z. B. einen domänenspezifischen Standard, der das datenorientierte Äquivalent zur funktionalen Kopplung von RPC darstellt.]

Beispiel 1 Feste Ressourcennamen in einer definierten Erbschaft:

Aus der Sun Cloud-API: "... die Darstellung eines VDC enthält Darstellungen der Cluster, die es bewohnen, die wiederum Darstellungen der VMs in jedem Cluster enthalten."

Beispiel 2 Out-of-Band-Informationen, z. B. ein domänenspezifischer Standard:

Sie müssen über den Inhalt der Wiki-Seite (Out-of-Band-Informationen) verfügen, um zu wissen, dass der "Mechanismus für die Ressourcenkommunikation" für das Cloud-Ressourcenfeld "uri" GET ist.

Igel
quelle
2
Sie haben Recht, das ist sehr irreführend. Roy spricht jedoch von Ressourcennamen im Uri-Bereich, nicht im Inhalt des Medientyps. Sun kann die URL, mit der auf einen Cluster zugegriffen wird, jederzeit ändern. Natürlich kann der Begriff "Cluster" innerhalb der Darstellung nicht in "Gruppe" geändert werden, ohne eine neue Version des Medientyps zu erstellen, aber der URI kann so geändert werden, dass er beliebig ist.
Darrel Miller
4
Wir wissen, dass die Sun-API HTTP als einheitliche Schnittstelle verwendet, sodass der Client nicht auf die Wiki-Seite schauen muss, um zu wissen, dass GET ein gültiges Verb für die Cloud-Ressource ist. Es kann es entweder einfach ausprobieren, wenn es weiß, dass GET ein sicheres Verb ist, oder es kann OPTIONEN verwenden, um festzustellen, ob es verfügbar ist.
Darrel Miller
3

Ich habe festgestellt, dass dies vor einiger Zeit gefragt wurde, aber ich habe versucht, einen "richtigen" REST-API-Ablauf für ein einfaches Beispiel zu demonstrieren. Ich habe versucht, Roys Regeln für REST zu befolgen - vielleicht könnte es helfen: API-Beispiel mit REST

jeremyh
quelle