Nach meinem derzeitigen Verständnis geht es bei HATEOAS im Wesentlichen darum, zusammen mit jeder Antwort Links mit Informationen darüber zu senden, was als Nächstes zu tun ist. Ein einfaches Beispiel ist im Internet leicht zu finden: ein Bankensystem zusammen mit einer Kontoressource. Das Beispiel zeigt diese Antwort nach einer GET-Anforderung an eine Kontoressource
GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">100.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
<link rel="withdraw" href="/account/12345/withdraw" />
<link rel="transfer" href="/account/12345/transfer" />
<link rel="close" href="/account/12345/close" />
</account>
Zusammen mit den Daten gibt es Links, die angeben, was als nächstes getan werden kann. Wenn der Saldo negativ ist, haben wir
GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">-25.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
</account>
Damit können wir nur einzahlen. Das ist alles in Ordnung, wenn wir Fiddler verwenden oder Anfragen mit dem Browser stellen, können wir leicht sehen, was getan werden kann. Diese Art von Informationen ist dann nützlich, um die Funktionen der API zu ermitteln und den Server vom Client zu entkoppeln.
Der Punkt ist jedoch, dass wenn wir einen Client wie ein SPA mit Javascript oder eine Android-App oder viele andere Dinge erstellen, ich nicht sehen kann, wie HATEOAS weiterhin relevant ist. Damit meine ich Folgendes: Wenn ich das SPA in Javascript codiere, muss ich wissen, was in der API getan werden kann, um den Code zu schreiben.
Ich muss also die Ressourcen kennen, die unterstützten Methoden, was sie erwarten und was sie zurückgeben, um die Ajax-Aufrufe an den Server zu schreiben und sogar um die Benutzeroberfläche zu erstellen. Wenn ich die Benutzeroberfläche erstelle, muss ich wissen, dass man nach der Anforderung des Kontos beispielsweise Einzahlungen vornehmen kann oder dass ich diese Option auf der Benutzeroberfläche nicht bereitstellen kann. Außerdem muss ich die URI kennen, um die Einzahlung für den Ajax-Call zu tätigen.
Ich meine, wenn wir Anfragen an die API stellen, können wir die API durch Links besser erkennen und nutzen. Wenn wir jedoch einen Client erstellen, wird die App, die wir erstellen, nicht einfach die Links betrachten und dann von selbst rendern die richtige Benutzeroberfläche und machen die richtigen Ajax-Aufrufe.
Wie wichtig ist HATEOAS für die Kunden? Warum beschäftigen wir uns überhaupt mit HATEOAS?