Re­pre­sen­ta­tio­nal State Transfer – besser bekannt unter seiner Kurzform REST – zählt zu den wich­tigs­ten Pro­gram­mier­pa­ra­dig­men moderner Web­ent­wick­lung. Der Ar­chi­tek­tur­stil, den Roy Fielding im Jahr 2000 in seiner Dis­ser­ta­ti­on prä­sen­tier­te, dient in erster Linie dem Ziel, Web-Ap­pli­ka­tio­nen optimal an die An­for­de­run­gen des modernen Webs an­zu­pas­sen. Weil REST in der jüngeren Ver­gan­gen­heit spürbar an Po­pu­la­ri­tät und Be­deut­sam­keit gewonnen hat, bemühen sich viele Web­pro­jekt-Betreiber zunehmend, das Konzept nach bestem Gewissen um­zu­set­zen. Die Er­geb­nis­se dieser Be­mü­hun­gen sind oftmals al­ler­dings nicht wirklich „RESTful“ bzw. „REST-konform“, da bestimmte Prin­zi­pi­en und Ei­gen­schaf­ten (wie HATEOAS) nicht in an­ge­mes­se­ner Form umgesetzt wurden.

Was ist HATEOAS?

HATEOAS ist ein Akronym, das für „Hypermedia as the Engine of Appli­ca­ti­on State“ (dt. Hy­per­me­dia als Motor des An­wen­dungs­zu­stands) steht. Dieser Begriff, den Fielding im Rahmen seiner REST-De­fi­ni­ti­on ein­ge­führt hat, be­schreibt eine der ent­schei­den­den REST-Ei­gen­schaf­ten: Da der Ar­chi­tek­tur­stil eine uni­ver­sel­le Schnitt­stel­le bieten soll, fordert HATEOAS nämlich, dass der REST-Client sich aus­schließ­lich durch das Folgen von URIs (Uniform Resource Iden­ti­fier) im Hy­per­me­dia-Format durch die Web­an­wen­dung bewegen kann. Wird dieses Prinzip umgesetzt, benötigt der Client abgesehen von einem grund­sätz­li­chen Ver­ständ­nis von Hy­per­me­dia keinerlei weitere In­for­ma­tio­nen, um mit der Ap­pli­ka­ti­on bzw. dem Server in­ter­agie­ren zu können.

Die Be­reit­stel­lung der einzelnen URIs erfolgt dabei bei­spiels­wei­se:

  • in Form von href- und src-At­tri­bu­ten, wenn es sich um HTML-Dokumente oder -Snippets handelt
  • durch JSON- bzw. XML-Attribute/-Elemente, die von den je­wei­li­gen Clients au­to­ma­tisch erkannt werden

Durch die Umsetzung des HATEOAS-Prinzips lässt sich die Schnitt­stel­le eines REST-Services jederzeit anpassen, was ein wichtiger Vorteil dieser Ar­chi­tek­tur gegenüber anderen Ap­pli­ka­ti­ons­struk­tu­ren ist – bei­spiels­wei­se gegenüber solchen, die auf Grundlage von SOAP (Simple Object Access Protocol) funk­tio­nie­ren.

HATEOAS und REST: Das Hy­per­me­dia-Prinzip

Um HATEOAS und seine Bedeutung für REST-An­wen­dun­gen einordnen zu können, muss man einen Blick auf das Ge­samt­kon­strukt werfen. Fielding be­schreibt in seinem Konzept insgesamt fünf Grund­prin­zi­pi­en, die es zu erfüllen gilt, um einen Service REST-konform zu gestalten.

So muss in jedem Fall eine Client-Server-Struktur vorliegen, die darüber hinaus eine zu­stands­lo­se Kom­mu­ni­ka­ti­on zwischen Server und Clients er­mög­licht (Anfragen werden also ohne Bezug zu vor­he­ri­gen Anfragen behandelt). Des Weiteren sollte der Dienst mehr­schich­tig aufgebaut sein und die Vorteile von HTTP-Caching nutzen, um die Nutzung des Services für den zu­grei­fen­den Client so einfach wie möglich zu gestalten. Schließ­lich gehört auch die bereits erwähnte Rea­li­sie­rung einer ein­heit­li­chen Schnitt­stel­le zu den Pflicht­auf­ga­ben.

Für die Ver­bin­dung zwischen Server und Client schreibt Fielding folgende vier Ei­gen­schaf­ten vor:

  • Ein­deu­ti­ge Iden­ti­fi­zier­bar­keit aller Res­sour­cen: Alle Res­sour­cen müssen sich über einen URI (Unique Resource Iden­ti­fier) iden­ti­fi­zie­ren lassen.
  • Mögliche In­ter­ak­ti­on mit Res­sour­cen durch Re­prä­sen­ta­tio­nen: Fordert ein Client eine Ressource an, liefert ihm der Server eine passende Re­prä­sen­ta­ti­on/Dar­stel­lungs­form aus (z. B. HTML, JSON oder XML), damit der Client in der Lage ist, die Ori­gi­nal­res­sour­ce zu mo­di­fi­zie­ren oder zu löschen.
  • Selbst­be­schrei­ben­de Nach­rich­ten: Jede Nachricht, die Server und Client aus­tau­schen, muss sämtliche In­for­ma­tio­nen enthalten, die er­for­der­lich sind, um sie zu verstehen.
  • Hy­per­me­dia as the Engine of Ap­pli­ca­ti­on State (HATEOAS): Schließ­lich ist auch das HATEOAS-Prinzip Pflicht­be­stand­teil einer REST-API. Die Struktur auf Basis von Hy­per­me­dia ver­ein­facht Clients den Zugriff auf die Ap­pli­ka­ti­on – denn für den Zugriff und die Na­vi­ga­ti­on wird kein zu­sätz­li­ches Wissen über die Schnitt­stel­le benötigt.

HATEOAS ist also eine der ele­men­ta­ren Ei­gen­schaf­ten von REST-APIs und als solche für jeden REST-Service un­ver­zicht­bar.

Tipp

Nähere In­for­ma­tio­nen zu REST finden Sie in unserem Grund­la­gen­ar­ti­kel zum Thema.

HATEOAS am Beispiel eines On­line­shops

Um das HATEOAS-Konzept etwas greif­ba­rer zu machen, soll die Umsetzung im folgenden Abschnitt am Beispiel eines Webshops ver­deut­licht werden. HATEOAS wird hierbei, wie für Web­an­wen­dun­gen typisch, über das Setzen von Hy­per­links rea­li­siert. Diese Quer­ver­wei­se zwischen zwei Do­ku­men­ten bzw. Quer­ver­wei­se zu einer anderen Stelle im selben Dokument werden in HTML unter anderem fol­gen­der­ma­ßen ge­kenn­zeich­net:

<a href="URI">Link-Text</a>

Auf diese Weise ver­knüpf­te Medien – wie zum Beispiel Text, Grafik, Audio und Video – be­zeich­net man als Hy­per­me­dia. Bei Web­an­wen­dun­gen handelt es sich dabei vor allem um einfache Text­do­ku­men­te im HTML -Format, die man auch als „Zustände“ (englisch „states“) dieser An­wen­dun­gen ansehen kann. Im Rahmen der REST-Phi­lo­so­phie sind die einzelnen Dokumente immer über einen ein­zig­ar­ti­gen URI adres­sier­bar. Überträgt man das Konzept auf einen ge­wöhn­li­chen On­line­shop, ergibt sich daraus Folgendes:

Das Dokument, das den Zustand „Warenkorb“ be­schreibt, hat einen fest zu­ge­wie­se­nen URI – zum Beispiel 'example.org/warenkorb'. Im gleichen Stil gibt es auch URIs für die einzelnen Artikel, die in den Warenkorb gelegt werden können – wie bei­spiels­wei­se 'example.org/artikel/1', 'example.org/artikel/2' usw. Ein weiterer möglicher Zustand ist das Kun­den­kon­to, das sich direkt aus dem Warenkorb heraus aufrufen lässt und folgenden URI haben könnte: 'example.org/kunde/1'. Jedes einzelne Dokument enthält darüber hinaus Verweise bzw. Hy­per­links auf Aktionen, die der Anwender als nächstes ausführen könnte.

Um beim vor­lie­gen­den Szenario zu bleiben, bedeutet das für das Warenkorb-Dokument also, dass dieses auch Quer­ver­wei­se zu den Artikel- und Kunden-URIs enthält. Diese könnten ih­rer­seits weitere Verweise zu Her­stel­lern oder Ver­trags­un­ter­la­gen be­inhal­ten. Per GET-Request bewegt sich der Client dann dank der ver­schie­de­nen Hyperlink-Ver­knüp­fun­gen durch den Shop bzw. in diesem Fall durch den Warenkorb, wie die folgende, ver­ein­fach­te Grafik ver­deut­licht.

Bei einem REST-Service, in dem der HATEOAS-Grundsatz wie von Fielding gefordert befolgt wurde, muss der User also lediglich den Start-URI kennen, um das Angebot wie vom Ent­wick­ler geplant wahr­neh­men zu können.

HATEOAS-REST-An­wen­dun­gen: Beispiel für die Server-Client-Kom­mu­ni­ka­ti­on

Anhand der zuvor auf­ge­zeig­ten Webshop-Struktur lässt sich auch die mögliche Kom­mu­ni­ka­ti­on zwischen Client und Server erläutern. So stellt die Client-Anwendung folgenden Request, um eine XML-Re­prä­sen­ta­ti­on des Warenkorb-Zustands zu erhalten:

GET https://example.org/warenkorb HTTP/1.1
Host: https://example.org
Accept: application/xml

Die Antwort des Servers könnte dann fol­gen­der­ma­ßen aussehen:

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 256
<?xml version="1.0"?>
<warenkorb>
    <warenkorb_number>1</warenkorb_number>
    <link rel="konto" href="https://example.org/kunde/1" />
    <link rel="artikel1" href="https://example.org/artikel/1" />
    <link rel="artikel2" href="https://example.org/artikel/2" />
</warenkorb>
Zum Hauptmenü