Niemand in der REST-Community sagt, dass REST einfach ist. HATEOAS ist nur einer der Aspekte, die einer REST-Architektur Schwierigkeiten bereiten.
Die Leute machen HATEOAS nicht aus all den Gründen, die Sie vorschlagen: Es ist schwierig. Dies erhöht die Komplexität sowohl auf der Serverseite als auch auf dem Client (wenn Sie tatsächlich davon profitieren möchten).
Milliarden von Menschen erleben heute jedoch die Vorteile von REST. Wissen Sie, wie die "Checkout" -URL bei Amazon lautet? Ich nicht. Trotzdem kann ich jeden Tag auschecken. Hat sich diese URL geändert? Ich weiß nicht, es ist mir egal.
Weißt du, kümmert es dich? Jeder, der einen Bildschirm geschrieben hat, hat den automatisierten Amazon-Client abgekratzt. Jemand, der wahrscheinlich akribisch den Webverkehr beschnüffelt, HTML-Seiten gelesen usw. hat, um herauszufinden, welche Links wann und mit welchen Nutzdaten aufgerufen werden müssen.
Und sobald Amazon seine internen Prozesse und die URL-Struktur geändert hat, sind diese fest codierten Clients fehlgeschlagen - weil die Links unterbrochen wurden.
Die Gelegenheits-Surfer konnten jedoch den ganzen Tag ohne Probleme einkaufen.
Das ist REST in Aktion, es wird nur durch den Menschen ergänzt, der in der Lage ist, die textbasierte Oberfläche zu interpretieren und zu verstehen, eine kleine Grafik mit einem Einkaufswagen zu erkennen und herauszufinden, was das eigentlich bedeutet.
Die meisten Leute, die Software schreiben, tun das nicht. Die meisten Leute, die automatisierte Clients schreiben, kümmern sich nicht darum. Die meisten Leute finden es einfacher, ihre Clients zu reparieren, wenn sie kaputt gehen, als die Anwendung so zu konstruieren, dass sie überhaupt nicht kaputt geht. Die meisten Leute haben einfach nicht genug Kunden, wo es darauf ankommt.
Wenn Sie eine interne API für die Kommunikation zwischen zwei Systemen mit fachkundigem technischen Support und IT auf beiden Seiten des Datenverkehrs schreiben, die Änderungen schnell, zuverlässig und mit einem Zeitplan für Änderungen kommunizieren können, kauft REST Ihnen nichts. Sie brauchen es nicht, Ihre App ist nicht groß genug und es ist nicht lang genug, um eine Rolle zu spielen.
Große Websites mit einer großen Benutzerbasis haben dieses Problem. Sie können die Leute nicht einfach bitten, ihren Client-Code aus einer Laune heraus zu ändern, wenn sie mit ihren Systemen interagieren. Der Zeitplan für die Serverentwicklung stimmt nicht mit dem Zeitplan für die Cliententwicklung überein. Abrupte Änderungen an der API sind für alle Beteiligten einfach nicht akzeptabel, da sie den Datenverkehr und den Betrieb auf beiden Seiten stören.
Ein solcher Vorgang würde also sehr wahrscheinlich von HATEOAS profitieren, da es einfacher zu versionieren ist, für ältere Clients einfacher zu migrieren ist und einfacher abwärtskompatibel ist als nicht.
Ein Client, der einen Großteil seines Arbeitsablaufs an den Server delegiert und auf die Ergebnisse reagiert, ist gegenüber Serveränderungen wesentlich robuster als ein Client, der dies nicht tut.
Aber die meisten Leute brauchen diese Flexibilität nicht. Sie schreiben Servercode für 2 oder 3 Abteilungen, alles für den internen Gebrauch. Wenn es kaputt geht, beheben sie es und haben dies in ihren normalen Betrieb einbezogen.
Flexibilität, ob von REST oder irgendetwas anderem, führt zu Komplexität. Wenn Sie es einfach und schnell wollen, dann machen Sie es nicht flexibel, Sie "machen es einfach" und fertig. Wenn Sie Abstraktionen und Dereferenzierungen zu Systemen hinzufügen, wird es schwieriger, mehr Kesselplatten und mehr Code zum Testen.
Ein Großteil von REST verfehlt den Aufzählungspunkt "Sie werden es nicht brauchen". Bis du es natürlich tust.
Wenn Sie es brauchen, verwenden Sie es und verwenden Sie es so, wie es angelegt ist. REST schiebt keine Dinge über HTTP hin und her. Es war noch nie so, es ist viel höher.
Aber wenn Sie REST benötigen und REST verwenden, ist HATEOAS eine Notwendigkeit. Es ist Teil des Pakets und ein Schlüssel dafür, wie es überhaupt funktioniert.