Was ist der Nutzen von Hypermedia (HATEOAS)?

17

Ich verstehe den Vorteil von HATEOAS für APIs nicht, die von Programmen verwendet werden sollen (im Gegensatz zu Menschen, die Ihre API direkt durchsuchen). Sicher, der Kunde ist nicht an ein URL-Schema gebunden, aber er ist an ein Datenschema gebunden, das in meinen Augen dasselbe ist.

Angenommen, ich möchte einen Artikel in einer Bestellung anzeigen, ich habe die Bestell-URL bereits gefunden oder kenne sie bereits.

HATEOAS:

order = get(orderURL);
item = get(order.itemURL[5]);

Nicht-HATEOAS:

order = get(orderURL);
item = get(getItemURL(order,5));

Im ersten Modell muss ich wissen, dass das Auftragsobjekt ein itemURL-Feld hat. Im zweiten Modell muss ich wissen, wie man eine Artikel-URL erstellt. In beiden Fällen muss ich vorher etwas "wissen", also was macht HATEOAS eigentlich für mich?

Tempo
quelle
1
get(orderURL);sollte es dir sagen the fact that the order object has an itemURL field.
Yannis
Wenn Sie die Client-Anwendung schreiben, müssen Sie im Voraus wissen, was das Feld ist.
Tempo
8
Wie soll eine Anwendung den Artikel aus einer Bestellung erhalten, wenn die Anwendung nicht einmal weiß, dass eine Bestellung einen Artikel enthält? Die Erkennung funktioniert beim manuellen Durchsuchen, nicht jedoch bei automatisierten Anwendungen.
Schritt
Der Mann selbst spricht hier darüber: roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Thiago Silva

Antworten:

6

Ein Unterschied ist, dass das Schema hoffentlich ein Standard ist oder zumindest von anderen wiederverwendet werden kann.

Angenommen, Sie verwenden die Twitter-API und möchten auch StatusNet (oder stattdessen) unterstützen. Da sie dasselbe Datenmodell wie Twitter verwenden, müssen Sie nur die Haupt-URL ändern, wenn die API HATEOAS folgt. Ist dies nicht der Fall, müssen Sie jetzt jede einzelne URL im Code ändern .

Wenn Sie den Code ändern müssen, um die Einstiegspunkt-URL des Dienstes zu speichern, ist dies möglicherweise nicht hilfreich. Es scheint wirklich, wenn diese URL dynamisch eingefügt wird; Wenn Sie beispielsweise einen Service wie Twillio erstellen, der mit der eigenen API des Benutzers interagiert.

André Paramés
quelle
Das ist ein interessanter Punkt, über den ich nicht nachgedacht hatte.
Tempo
@YannisRizos: Hmm, ich sehe nicht, wo ich gesagt habe, dass HATEOAS ein Standard ist. Ich sagte, das (Daten-) Schema sei hoffentlich ein Standard. In der REST-Terminologie ist dies der Medientyp.
André Paramés
Beim zweiten Lesen haben Sie absolut Recht.
Yannis
2
Ja, wenn Sie davon ausgehen, dass die rel-Namen für die Links identisch sind. Wenn Sie jedoch allgemein und nicht nur anhand des von Ihnen erwähnten konkreten Beispiels sprechen, wird nicht jeder Programmierer auf der Welt unbedingt dieselben Namen für ähnliche oder gleichwertige Aktionen wählen. Dieser Vorteil kommt von Programmierern, die eine gemeinsame Schnittstellenbenennung und gemeinsame Parameter vereinbaren.
Derloopkat
8
  1. Explorable API: Es mag trivial klingen, aber unterschätzen Sie nicht die Leistungsfähigkeit einer explorablen API. Die Möglichkeit, die Daten zu durchsuchen, erleichtert es den Client-Entwicklern erheblich, ein mentales Modell der API und ihrer Datenstrukturen zu erstellen.

  2. Inline-Dokumentation: Die Verwendung von URLs als Verknüpfungsbeziehungen kann Client-Entwickler auf die Dokumentation verweisen.

  3. Einfache Client-Logik: Ein Client, der URLs folgt, anstatt sie selbst zu erstellen, sollte einfacher zu implementieren und zu warten sein.

  4. Der Server übernimmt das Eigentum an URL-Strukturen: Durch die Verwendung von Hypermedia wird dem Client das Wissen über die vom Server verwendeten URL-Strukturen entzogen.

  5. Ausladen von Inhalten zu anderen Diensten: Hypermedia ist erforderlich, wenn Inhalte auf andere Server (z. B. ein CDN) heruntergeladen werden sollen.

  6. Versionierung mit Links: Hypermedia hilft bei der Versionierung von APIs.

  7. Mehrere Implementierungen desselben Dienstes: Hypermedia ist eine Notwendigkeit, wenn mehrere Implementierungen desselben Dienstes vorhanden sind (und ein Client auf mehrere von ihnen zugreifen muss).

Eine ausführliche Erläuterung dieser Stichpunkte finden Sie hier: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html

Jørn Wildt
quelle
> Auslagern von Inhalten auf andere Dienste: Hypermedia ist erforderlich, wenn Sie Inhalte auf andere Server (z. B. ein CDN) auslagern. Nein, ist es nicht. Sie können einfach die gleichen Links beibehalten und CDN verwenden.
Bruno Costa