© DrHitch/Shutterstock.com
REST

3 HATEOAS mit .NET in der Praxis


Das HATEOAS-Prinzip ist ein Entwurfsprinzip für REST-Dienste. Dabei navigiert ein Client ausschließlich basierend auf den Links, die von einem Server bereitgestellt werden. Die Links werden dabei unter Verwendung von Hypermedia in die Antworten von REST-Diensten eingebettet. Ziel des Prinzips ist ein Client, der keine bzw. nur sehr wenige Informationen über die REST-Dienste seiner Serveranwendung hat. Wie man solche REST-Dienste in der Praxis auf Basis von ASP.NET Core umsetzen kann, zeigt dieses letzte Kapitel des shortcuts anhand eines praktischen Beispiels.

Wer sich in seiner täglichen Arbeit auch nur ansatzweise mit Webtechnologien oder verteilten Anwendungen beschäftigt, wird heutzutage kaum umher kommen, auch mit REST-Diensten zu arbeiten. Dabei begegnen uns REST-Dienste in verschiedensten Formen: Von solchen, die aussehen wie Remote Procedure Calls, bei denen der aufgerufene URL den Namen einer Funktion darstellt, bis hin zu klar konzipierten und durchdachten REST-Diensten, die alle Facetten der aktuellen Webtechnologien bestmöglich zu nutzen versuchen. Das HATEOAS-Prinzip für REST-Dienste gehört dabei sicherlich zum zweiten der beiden genannten Extreme. Das bescheinigt auch das REST-Reifegradmodell, das von Leonard Richardson aufgestellt wurde. In seiner höchstmöglichen Stufe fordert es genau diejenigen Eigenschaften, die durch HATEOAS realisiert werden.

HATEOAS, die Basics

HATEOAS ist ein Akronym und steht für Hypermedia as the Engine of Application State. Wie der Name schon andeutet, ist es unter anderem das Ziel, den aktuellen Anwendungszustand durch eine HATEOAS-konforme Antwort eines REST-Diensts darzustellen. Als Anwendungszustand sind dabei die aktuell anzuzeigenden Daten sowie die hiervon ausgehenden nächstmöglichen Aktionen zu verstehen. Eine Aktion kann dabei das einfache Navigieren zu anderen Daten sein, die mit den aktuell angezeigten Daten in einer Beziehung stehen. Eine Aktion kann aber auch eine Veränderung von Daten wie das Aktualisieren, Löschen oder Hinzufügen von neuen Daten sein. Um die Informationen zu den möglichen Aktionen mit den anzuzeigenden Daten zu verbinden, nutzt HATEOAS Hypermedia, eine Möglichkeit verschiedene Informationen miteinander zu verknüpfen. Hypermedia kann in verschiedenen technischen Formaten transportiert werden, allen voran natürlich HTML. Die Abbildung von Hypermedia beispielsweise in XML oder JSON ist aber genauso möglich. Die Vorteile der Verwendung von Hypermedia und HATEOAS wurden im vorherigen Kapitel genauer beleuchtet.

Das Beispiel: Posts und Kommentare

Wie einleitend beschrieben, soll dieses Kapitel ein möglichst praxisnahes Beispiel vorstellen, anhand dessen das HATEOAS-Prinzip einfach verstanden werden kann. Als Anwendungsfall soll uns dabei ein gewöhnliches Weblog dienen. Es besteht aus Posts und Kommentaren. Kommentare zu einem Post können so lange abgegeben werden, wie es der Administrator zulässt. Gekennzeichnet wird dies durch ein Flag am Datensatz für einen Post. Die vorliegenden Codebeispiele basieren auf ASP.NET Core Release Candidate (RC) 2. Ziel ist es, die wesentlichen Punkte der implementierten REST-Dienste vorzustellen. Auf die Implementierung eines etwaigen Clients soll hier explizit nicht eingegangen werden. Als Hilfsmittel wird die Bibliothek Fancy.ResourceLinker verwendet. Sie ist Open Source veröffentlicht und unter [1] verfügbar. Die Bibliothek soll dabei unterstützen, den Code zur Erstellung von Links innerhalb einer ASP.NET-Webapplikation klar strukturiert zu halten. Dazu stellt die Bibliothek das Konzept der Linkstrategien bereit. Eine Linkstrategie ist dafür verantwortlich, für ein bestimmtes View Model entsprechende Links zu generieren und diese an das View Model anzuhängen. Dazu muss ein View Model von der Basisklasse ResourceBase ableiten, die ebenfalls durch die Bibliothek bereitgestellt wird. Innerhalb eines ASP.NET-Controllers kann das Interface IResourceLinker verwendet werden. Mit diesem kann man nun gezielt bestimmte Objekte und Aktionen „verlinken“. Abbildung 3.1 zeigt schematisch nochmals das Zusammenspiel zwischen einem ASP.NET-Controller, den Linkstrategien und dem Resource Linker (durch das Interface IResourceLinker bereitgestellt). Um die Bibliothek in seinem Projekt nutzen zu können, fü...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang