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.
Antworten:
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 .
"Es hängt davon ab, ob". HATEOAS ist Teil der einheitlichen Schnittstellenbeschränkung von REST.
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 :
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.
quelle
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.
quelle
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:
REST and HATEOS passt gut zu dem Problem, für das es entwickelt wurde:
Es ist jedoch zu beachten, dass das Web und REST nicht unbedingt für alle Probleme geeignet sind:
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.
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.
quelle
In der Präsentation von Fielding zu Adobe Experience Manager:
Rest ist ein architektonischer Stil, der die Abstraktion verschiedener im Internet existierender Architekturen darstellt.
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
quelle
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.
quelle