# HATEOAS

Hypermedia as the Engine of Application State (HATEOAS) zu Deutsch: Hypermedia als Motor des Anwendungs-Zustands, ist eine Einschränkung der REST-Anwendungsarchitektur.
Mit HATEOAS interagiert ein Client mit einer Netzwerkanwendung, deren Anwendungsserver Informationen dynamisch über Hypermedien bereitstellen. Ein REST-Client benötigt kaum oder nur wenige Vorkenntnisse über die Interaktion mit der Anwendung oder dem Server, sondern nur Basiswissen von Hypermedien (siehe HTTP).
Im Gegensatz dazu interagieren Clients und Server in der CORBA (Common Object Request Broker Architecture) über eine feste Schnittstelle, die über die Dokumentation oder eine Schnittstellenbeschreibungssprache (Interface Description Language, kurz: IDL) gemeinsam genutzt wird.
Die von HATEOAS auferlegten Einschränkungen entkoppeln Client und Server. Dadurch kann die Serverfunktionalität unabhängig von Clients weiterentwickelt werden.

## Beispiel

Ein User-Agent, der HTTP implementiert, stellt eine HTTP-Anforderung einer REST API über eine einfache URL. Alle nachfolgenden Anforderungen, die der User-Agent möglicherweise stellt, werden in den Antworten auf jede Anforderung erkannt. Die für diese Repräsentationen verwendeten Medientypen und die darin enthaltenen Verknüpfungsbeziehungen sind standardisiert. Der Client wechselt durch Anwendungszustände, indem er aus den Links innerhalb einer Repräsentation auswählt oder die Repräsentation auf andere Weise bearbeitet, die der Medientyp bietet. Auf diese Weise wird die RESTful-Interaktion eher durch Hypermedien als durch Out-of-Band-Informationen gesteuert.
Diese GET-Anforderung ruft beispielsweise eine Kontoressource ab und fordert Details in einer JSON-Darstellung an:
Die Antwort darauf lautet:
Die Antwort enthält diese möglichen Weiterverfolgungs-Links (follow up links): Einzahlung (deposit), Auszahlung (withdraw), Überweisung (transfer) oder schließen des Kontos (close).
Wenn die Kontoinformationen später abgerufen werden, ist das Konto überzogen:
Jetzt ist nur noch ein Link verfügbar: um mehr Geld einzuzahlen. Im aktuellen Zustand sind die anderen Links nicht verfügbar. Daher kommt der Begriff Engine of Application State (zu Deutsch: Motor des Anwendungs-Zustands). Welche weitere Aktionen möglich seien, hängt vom Zustand der Ressource ab.
Ein Client muss nicht alle vom Server angebotenen Medientypen und Kommunikationsmechanismen verstehen. Die Fähigkeit, neue Medientypen zu verstehen, kann zur Laufzeit durch „code-on-demand“ (zu Deutsch: Code auf/nach Anfrage) erworben werden, das dem Client vom Server bereitgestellt wird.

## Ursprung

Die HATEOAS-Einschränkung ist ein wesentlicher Bestandteil der Funktion einheitliche Schnittstelle (Uniform Interface) von REST, wie sie in der Doktorarbeit von Roy Fielding definiert ist. Fielding hat das Konzept in seinem Blog weiter beschrieben.
Fielding erklärt die Striktheit dieser und anderer REST-Einschränkungen wie folgt: „Software-Entwurf im Maßstab von Jahrzehnten heißt: jedes Detail beabsichtigt die Förderung von Langlebigkeit und unabhängige Weiterentwicklung von Software. Viele der Einschränkungen stehen entgegen der kurzfristigen Effizienz. Leider sind die Leute ziemlich gut im kurzfristigen Entwurf, und normalerweise schrecklich im langfristigen Entwurf“.

## Implementierungen

* HAL
* JSON-LD
* Siren
* Collection+JSON
* JSON:API
* Hydra