Ist REST und HATEOAS eine gute Architektur für Webdienste?

14

Wenn ich das richtig verstehe, wurde REST von Roy Fielding als beschreibendes Modell der Architektur des Webs formalisiert . AFAIK Fielding behauptete nicht, dass REST etwas Gutes sei, sondern beschrieb lediglich die De-facto-Architektur des Webs. Das Web hatte sich bereits zu diesem Zeitpunkt als enorm erfolgreiches verteiltes Hypertextsystem erwiesen, weshalb diese Art von REST als erfolgreiche Architektur für die Domäne der verteilten Hypermedien, die hauptsächlich von Menschen navigiert und konsumiert werden, validiert wird.

REST-Webdienste wurden durch Anwenden der REST-Architektur auf APIs erstellt. Aber gibt es tatsächlich einen Grund zu der Annahme, dass REST eine wünschenswerte Architektur für diese Domäne ist? Gibt es Belege dafür, dass HATEOAS ein nützliches Konstruktionsprinzip für die Kommunikation von Maschine zu Maschine ist?

Mein Anliegen ist, dass HATEOAS für Hypermedien Sinn macht, da es nur wenige bekannte Inhaltstypen gibt (HTML, Bilder, Videos usw.) und der Kunde weiß, wie er sie konsumiert. Bei APIs sind die Inhaltstypen jedoch sehr spezifisch und können vom Client nur auf sinnvolle Weise konsumiert werden, wenn der Client speziell darauf programmiert ist, sie zu konsumieren. Wenn Sie eine URL an den Client zurückgeben, kann der Client die angegebene Ressource an sich nicht nutzen.

JacquesB
quelle
2
Da das Web auf HTTP basiert und REST HTTP ist, halte ich es für eine hervorragende Sache.
Rob
1
@Rob: REST mehr als HTTP. Beispielsweise verwenden SOAP und XML-RPC ebenfalls HTTP, entsprechen jedoch nicht REST.
JacquesB
Weder basiert auf REST-Architektur. Daher der Unterschied.
Rob
4
Das ist eine sehr schwierige Frage. Denn schließlich ist es so gut oder schlecht wie jede frühere oder aktuelle Technologie. Es hängt von Ihrer Aufgabe ab. Für einige Aufgaben funktioniert es. Für andere gehen wir nach Graphql oder Falcor / JSONGraph. Oder sogar binär (gRPC) ist wieder en vogue. Aus meiner Sicht hat das Versprechen von HATEOAS und "smart clients" nicht geklappt. Overhead hat es getötet.
Thomas Junk
Es hängt von vielen Dingen ab. Nicht alle von ihnen technische Probleme. Der Kontext, der die Implementierung und die Ausführung betrifft, ist von Bedeutung.
Laiv

Antworten:

15

AFAIK Fielding behauptete nicht, dass REST etwas Gutes sei, sondern beschrieb lediglich die De-facto-Architektur des Webs.

Das unterbietet es ein bisschen, würde ich denken. REST ist immerhin eine Aufzählung des architektonischen Stils , dass Fielding wurde mit als Chefarchitekt der HTTP / 1.1 - Spezifikation .

Aber gibt es tatsächlich einen Grund zu der Annahme, dass REST eine wünschenswerte Architektur für diese Domäne ist? Gibt es Hinweise darauf, dass HATEOAS ein nützliches Konstruktionsprinzip für die Kommunikation von Maschine zu Maschine ist?

"Es hängt davon ab, ob". HATEOAS ist Teil der einheitlichen Schnittstellenbeschränkung von REST.

Durch die Anwendung des Software-Engineering-Prinzips der Allgemeinheit auf die Komponentenschnittstelle wird die Gesamtsystemarchitektur vereinfacht und die Sichtbarkeit von Interaktionen verbessert. Die Implementierungen sind von den von ihnen bereitgestellten Diensten entkoppelt, was eine unabhängige Weiterentwicklung fördert. Der Nachteil ist jedoch, dass eine einheitliche Schnittstelle die Effizienz beeinträchtigt, da die Informationen in standardisierter Form übertragen werden und nicht in einer für die Anforderungen einer Anwendung spezifischen Form. Die REST-Schnittstelle wurde so konzipiert, dass sie für die Übertragung von Hypermediendaten mit großen Datenmengen effizient ist und für den üblichen Web-Fall optimiert wird. Dies führt jedoch zu einer Schnittstelle, die für andere Formen der architektonischen Interaktion nicht optimal ist.

Denken wir also einen Moment darüber nach, was dies bedeutet. Wenn ich Probleme mit meinem WLAN-Router habe, kann ich mit demselben Browser kommunizieren, den ich zum Senden von Antworten an den Stapelaustausch verwende. Insbesondere spielt es keine Rolle, welchen Browser ich verwende oder ob mein Browser ein paar Updates hinter (oder vor) den Erwartungen des Routers liegt. Es spielt keine Rolle, dass die technische Organisation, die den Browser geschrieben hat, völlig unabhängig von der Organisation ist, die die Router-Schnittstelle erstellt hat.

Es funktioniert einfach .

Es ist natürlich nicht universell. Fielding schrieb 2008 :

Das bedeutet nicht, dass ich denke, dass jeder seine eigenen Systeme gemäß dem REST-Architekturstil entwerfen sollte. REST ist für langlebige netzwerkbasierte Anwendungen gedacht, die sich über mehrere Organisationen erstrecken. Wenn Sie keinen Bedarf für die Einschränkungen sehen, verwenden Sie sie nicht.

Die Einschränkungen, die den REST-Architekturstil ausmachen, wurden aufgrund der Eigenschaften ausgewählt, die sie hervorrufen. Wenn diese Eigenschaften für Ihren Anwendungsfall nicht von Nutzen sind, sollten Sie unbedingt in Betracht ziehen, die entsprechenden Einschränkungen aufzuheben.

Wenn Maschine zu Maschine schwierig wird, haben Sie die Fähigkeit des Menschen verloren, die von den Darstellungen bereitgestellte Semantik unscharf abzugleichen. Die Kunden können damit auskommen, nur die Medientypen zu kennen, aber wir haben normalerweise einen Menschen, der sich mit den semantischen Hinweisen befasst, um eine Bedeutung abzuleiten.

schema.org ist ein Teil der Bemühungen, ein maschinenlesbares Vokabular zu erstellen. Die Maschinenagenten verwenden den Client, um die semantischen Hinweise zu finden, und wenden sein eigenes Verständnis der Bedeutung an, um die richtigen Aktionen auszuwählen.

Aber es ist Arbeit; Sie müssen in die Entwicklung maschinenfreundlicher Darstellungen Ihrer Ressourcen investieren und sicherstellen, dass diese Darstellungen vorwärts- und rückwärtskompatibel bleiben, damit Clients unabhängig voneinander entwickelt werden können.

Wenn eine einzelne Organisation sowohl den Client als auch den Server steuert, sind die Vorteile dieser Unabhängigkeit viel geringer. In diesem Fall ist die Einschränkung möglicherweise nicht die richtige Wahl für die Architektur.

VoiceOfUnreason
quelle
Interessante Antwort. Insbesondere auf der Grundlage dieses Zitats scheint es so zu sein: " Die REST-Schnittstelle wurde so konzipiert, dass sie für die Übertragung von Hypermediendaten mit großen Körnungen effizient ist und für den allgemeinen Web-Fall optimiert wird. Sie führt jedoch zu einer Schnittstelle, die für andere Formen der architektonischen Interaktion nicht optimal ist. "Fielding würde die REST - Architektur nicht als optimal für Service - APIs betrachten. (Natürlich ist REST immer noch besser als SOAP, auch wenn es nicht optimal ist!)
JacquesB
Schwer zu sagen, was Fielding für optimal hält :-). Ich denke, einige API-Anforderungen umfassen eine großflächige Hypermediendatenübertragung.
Laiv
5

Nein, 'full REST' ist nicht so toll.

Dies zeigt sich am Mangel an Leuten, die HATEOS in ihren APIs implementieren, und an den endlosen Argumenten, über welche HTTP-Verbs ein bestimmter Aufruf erfolgen soll.

Aber Sie müssen erkennen, warum REST so beliebt ist. Vor seiner Einführung gab es verschiedene verrückte, komplizierte Protokolle wie ebXML und SOAP, die Bestätigungen, Zeitüberschreitungen, Konversations-IDs und Status beinhalteten.

Diese Dinge zum Laufen zu bringen und sie dann den Verbrauchern der API zu erklären , war eine schwierige Aufgabe. "Warum mache ich nicht einfach ein GET mit der ID, die ich in der Abfragezeichenfolge haben möchte und du schickst mir die Daten?" war eine offensichtliche und häufige Frage.

Dann war das zweite Problem XML, Javascript verstand es nicht, Schemata waren ein Ärgernis und Sie würden mit riesigen txt-Dateien enden, die hauptsächlich aus bestehen <MyLongObjectName>. Also haben die Leute stattdessen angefangen, JSON zu verwenden.

Jetzt ist REST ein Kult, aber weil die Regeln so vage sind, hindert es Sie nicht daran, eine nutzbare API zu finden, die so einfach ist, dass die Verbraucher sie "nur" bekommen und sie ohne 6-monatiges Boarding verwenden Prozess.

Ewan
quelle
Eine der häufig genannten Beschwerden von Fielding ist das mangelnde Verständnis für REST und die ordnungsgemäße Implementierung. Dies ist kein Fehler von REST. Auch das Versagen von Javascript mit XML ist mit REST kein Problem. Und Javascript und XML haben auch nichts mit REST zu tun. Dass Fielding sich online zur Verfügung gestellt hatte, Artikel außerhalb seiner Dissertation verfasste, auf Beispiele für die ordnungsgemäße Verwendung von REST hinwies und offenbar keine Probleme mit dem Verständnis seines Schreibens und der Implementierung von HTTP auftraten, scheint zu zeigen, dass es nicht viele Probleme geben sollte und ordnungsgemäße Implementierung von REST.
Rob
XML hat keinen Einfluss darauf, ob REST eine gute API-Architektur ist oder nicht. Es gibt nichts im Standard, das XML als Ressourcenformat erfordert. JSON, HTML und Nur-Text sind unter anderem gültige Ressourcen.
Paul
2
Ich denke, wenn wir über REST sprechen, müssen wir sowohl erkennen, was der Standard ist, als auch, was die Leute in der Realität umsetzen, und dann REST
Ewan,
2

Es ist anzumerken, dass Roy nicht der ursprüngliche Erfinder der meisten Prinzipien von REST war, sondern viele Prinzipien zusammenfasst, von denen bekannt ist, dass sie in früheren Systemen funktionieren, um verschiedene spezifische Probleme zu lösen. REST ist einfach die natürliche Schlussfolgerung aus der Anwendung dieser Prinzipien in einer einzigen Architektur.

Schon bevor Roy Fielding seine Dissertation über REST verfasste , wurde das HTTP nach den Prinzipien entwickelt, die später als REST bekannt werden. Zum Abschluss seiner Dissertation schrieb er:

Zu Beginn unserer Bemühungen innerhalb der Internet Engineering Taskforce, das vorhandene Hypertext Transfer Protocol (HTTP / 1.0) zu definieren und die Erweiterungen für die neuen Standards von HTTP / 1.1 und Uniform Resource Identifiers (URI) zu entwerfen ] Erkannte ich die Notwendigkeit eines Modells, wie das World Wide Web funktionieren sollte. Dieses idealisierte Modell der Interaktionen innerhalb einer gesamten Webanwendung, das als REST-Architektur (Representational State Transfer) bezeichnet wird, wurde zur Grundlage für die moderne Webarchitektur und lieferte die Leitprinzipien, anhand derer Fehler in der vorhandenen Architektur identifiziert und Erweiterungen vorgenommen werden konnten vor der Bereitstellung validiert .

REST and HATEOS passt gut zu dem Problem, für das es entwickelt wurde:

REST ist ein koordinierter Satz von Architekturbeschränkungen, mit denen versucht wird, die Latenz und die Netzwerkkommunikation zu minimieren und gleichzeitig die Unabhängigkeit und Skalierbarkeit von Komponentenimplementierungen zu maximieren . Dies wird erreicht, indem Einschränkungen für die Konnektorsemantik festgelegt werden, während sich andere Stile auf die Komponentensemantik konzentriert haben. REST ermöglicht das Zwischenspeichern und Wiederverwenden von Interaktionen, die dynamische Substituierbarkeit von Komponenten und die Verarbeitung von Aktionen durch Intermediäre und erfüllt damit die Anforderungen eines verteilten Hypermediensystems im Internet.

Es ist jedoch zu beachten, dass das Web und REST nicht unbedingt für alle Probleme geeignet sind:

Ebenso können vorgeschlagene Erweiterungen mit REST verglichen werden, um festzustellen, ob sie in die Architektur passen. Ist dies nicht der Fall, ist es effizienter, diese Funktionalität auf ein System umzuleiten, das parallel zu einem geeigneteren Architekturstil ausgeführt wird.

Wenn Ihre Frage lautet: "Sind REST und HATEOAS eine gute Architektur für Webdienste?" Dann lautet die Antwort einfach "Ja, es ist eine gute Architektur für Webdienste". Das Problem ist wirklich, ob all die Probleme, die die Leute zu lösen versuchten, indem sie sie in die Web-Einschränkungen nachrüsteten, eigentlich Web-Services sein sollten.

Es gibt viele APIs, die wirklich nicht zu REST passen. APIs, die nicht die Art von Skalierbarkeit benötigen, für die REST entwickelt wurde, werden nicht von mehreren Organisationen verwendet, die sich möglicherweise unabhängig voneinander weiterentwickeln, und müssen nicht langlebig sein. Für diese Probleme sind die REST-Einschränkungen nur eine Zwangsjacke.

Aber gibt es tatsächlich einen Grund zu der Annahme, dass REST eine wünschenswerte Architektur für diese Domäne ist? Gibt es Belege dafür, dass HATEOAS ein nützliches Konstruktionsprinzip für die Kommunikation von Maschine zu Maschine ist?

Der Beweis ist der Erfolg des Webs bei der Lösung der Probleme vieler Menschen. REST ist eine Hybridarchitektur, die die Entwürfe vieler früherer Architekturstile kombiniert. Viele Problemdomänen erfüllen nicht alle Anforderungen des Webs und müssen nicht alle Einschränkungen von REST erfüllen, um eine gute Leistung zu erzielen. Aus diesem Grund gibt es viele erfolgreiche Architekturen, die problemlos funktionieren, wenn nur einige Teile von REST angewendet werden, die anderen jedoch nicht. HATEOAS und Uniform Interface sind beispielsweise Prinzipien, die häufig von APIs übersprungen werden, die keine organisatorischen Grenzen überschreiten müssen, und Systeme, die eine relativ kurze Verfallszeit haben.

Lüge Ryan
quelle
2

In der Präsentation von Fielding zu Adobe Experience Manager:

REST ist KEINE Architektur!

Rest ist ein architektonischer Stil, der die Abstraktion verschiedener im Internet existierender Architekturen darstellt.

REST ist eine Ansammlung von Designbeschränkungen, um architektonische Eigenschaften hervorzurufen

REST ist ein Schlagwort, und jeder möchte eine RESTful-API. In der Realität haben Menschen, die mit REST-Einschränkungen konfrontiert waren, einige dieser Einschränkungen aufgegeben, da sie keine Notwendigkeit oder keinen Nutzen hatten, alle Einschränkungen anzuwenden.

Wie Sie bereits erwähnt haben, ist HATEOAS nützlich, wenn der Client ein Webbrowser ist. Wenn es sich bei dem Client um eine mobile App handelt, ist dies möglicherweise weniger der Fall. Es wäre eine gute Praxis, aber es sind auch Kosten mit dem Entwerfen einer solchen Anwendung verbunden, so dass, um nur ein Beispiel zu nennen, das Mobile-App-Team und das Back-End-Team sich darauf einigten, diese Einschränkung aufzuheben. Und das macht Sinn, weil beide Teams nicht so eng miteinander verbunden sind, weil sie für dasselbe Unternehmen arbeiten.

REST in AEM

imel96
quelle
0

Wenn Sie einen Dienst erstellen möchten, der von einem anderen Server verwendet wird, ist xmlrpc die richtige Wahl. Wenn Sie möchten, dass ein Dienst von Thin Clients oder Geräten mit geringem Stromverbrauch oder unbekannten Clients über das offene Internet in Anspruch genommen wird, sollten Sie json verwenden. Aber denken Sie daran, dass json im Vergleich zu xml eine schlechtere Notation für die Angabe allgemeiner Daten ist.

Richard
quelle
1
Warum ist JSON XML unterlegen?
Malky.Kid
@ Malky.Kid: Natürlich kann man immer einen Weg finden, ein XML-Dokument als JSON darzustellen, so dass JSON nicht minderwertig ist, was Sie damit ausdrücken können. XML bietet jedoch zum einen mehr syntaktische Möglichkeiten zum sofortigen Ausdrücken von Metadaten (Schema, Typinformationen, Kommentare, Namespaces, Verarbeitungsanweisungen, sogar die zu verwendende Zeichenkodierung), ohne dass jeder ein Datenschema erfinden und festlegen muss Um diese Dinge für sie zu erledigen (wie es bei JSON der Fall ist), ist es meiner Meinung nach angemessen zu sagen, dass es überlegene Funktionen als JSON bietet.
Stakx