Was ist REST? Teil 3: Richardson Maturity Model

Was ist REST? Teil 3: Richardson Maturity Model

Wann ist eine Schnittstelle RESTful?

RESTful-Interfaces sind im modernen Web de facto ein Standard. Bei der Kommunikation zwischen verteilten Systemen würde vermutlich fast jeder Entwickler oder Architekt behaupten, auf REST zu setzen. Nach Definition von Roy Fielding muss ein RESTful-Interface allerdings folgende vier Eigenschaften erfüllen (wie in Teil 2 beschrieben):

  • Identifikation von Ressourcen
  • Manipulation von Ressourcen durch Repräsentationen
  • Selbstbeschreibende Nachrichten
  • Hypermedia as the engine of application state (HATEOAS)

Bei der Recherche für den vorliegenden Artikel hatte ich den Eindruck, dass die Bedeutung dieser vier Eigenschaften sowie die Grundidee von REST erst Jahre nach der Veröffentlichung von Fieldings Dissertation präzisiert wurden. Dies könnte dazu geführt haben, dass viele Interfaces das REST-Paradigma gar nicht erfüllen und trotzdem fälschlicherweise RESTful bezeichnet werden.

Das Richardson Maturity Model (RMM) ist ein interessanter Versuch die Grundeigenschaften einer http-basierten REST-Schnittstelle zu verdeutlichen. Das Model definiert mehrere Levels (von 0 bis 3), welche den REST-Reifegrad eines WebServices beschreiben. Im Folgenden werden die Levels anhand unseres Kundendatenbank-Beispiels erläutert.

Level 0: „eine URL, eine http-Methode“

Der Client erreicht den WebService über eine einzige URL und nutzt hierbei genau eine http-Methode. Die URL könnte hier wie folgt aussehen: /kundenDatenService. Möchte der Client Daten eines bestimmten Kunden abfragen, so könnte er einen POST-Request mit entsprechender Kunden-ID in der Payload auf /kundenDatenService absetzen. Um die Kundenbestellungen abzufragen, muss der Client einen weiteren POST-Request absetzen. Die nachfolgende Abbildung verdeutlicht den Sachverhalt.

Die Grafik zeigt das Richardson Maturity Level 0

Der Client nutzt POST, um den Request über http absetzten zu können. Die innerhalb von http definierte Semantik von POST ist für den Client völlig irrelevant. Martin Fowler, ein weiterer anerkannter Experte auf dem Gebiet der Softwarearchitekturen, spricht in diesem Zusammenhang auch von Tunneling über http. Der Client hätte sich hier auch für GET entscheiden können.

Level 1: „viele URLs, eine http-Methode“

Der Server modelliert Kunden und Bestellungen als separate Ressourcen, welche über entsprechende Identifier (also URLs) angesprochen werden können. Der Client nutzt immer noch eine einzige http-Methode (z. B. POST) um sich über http zu tunneln. Auch hier könnte der Client die Anfrage via GET formulieren. Die nachfolgende Abbildung demonstriert den Ablauf der Kommunikation, welche für Level 1 typisch ist.

Die Grafik zeigt das Richardson Maturity Level 1

Level 2: „viele URLs, viele http-Methoden“

Der Server modelliert Kunden und Bestellungen als separate Ressourcen und der Client nutzt die richtige http-Methode. In unserem Beispiel fordert der Client die Daten an. Somit soll hier http GET verwendet werden, wie in der Abbildung 3 gezeigt.

Die Clients nutzen also pures http und müssen sich nicht mehr tunneln. Martin Fowler betont folgende zwei Vorteile von Level 2 gegenüber Level 1: zum einen kann dadurch eine strikte Trennung zwischen dem Ändern und Abfragen von Daten erreicht werden. Zum anderen können http Error Codes verwendet werden, was das Error-Handling wesentlich erleichtert.

Die Grafik zeigt das Richardson Maturity Level 2

Level 3: Hypermedia

„REST APIs must be hypertext-driven“: betont Roy Fielding in diesem Blog-Beitrag. Nachdem der Client eine Anfrage an den Server gesendet hat, soll der Server neben der angefragten Ressource ebenso Informationen zu den nächstmöglichen Aktionen liefern. Es handelt sich somit um Hypermedia as the engine of application state (HATEOAS). Die nachfolgende Abbildung zeigt ein Beispiel für HATEOAS. Eine detaillierte Betrachtung findet sich zudem im zweiten Teil dieser Serie.

Laut Martin Fowler ist Level 3 die letzte Stufe auf dem Weg zu einer RESTful-Schnittstelle.

Die Grafik zeigt das Richardson Maturity Level 3

Zusammenfassung

Richardson Maturity Model ordnet grundlegende REST-Eigenschaften 3 Levels zu und definiert dadurch den REST-Reifegrad (RESTfulness) einer Schnittstelle. Eine Schnittstelle kann hierbei nur dann als „restful“ bezeichnet werden, wenn sie das Prinzip der HATEOAS erfüllt (Level 3). Während die Level 0 und Level 1 Schnittstellen in der Praxis immer seltener vorkommen, sind die Level 2 sehr weit verbreitet. Dies zeigt einerseits, dass die meisten REST-Eigenschaften in der Community richtig umgesetzt werden. Andererseits ist es auch ein Indiz dafür, dass HATEOAS in der Praxis noch nicht vollständig angekommen ist.

Mehr zum Thema

WIR SIND FÜR SIE DA!

Mit Q_PERIOR steht Ihnen ein starker Partner zur Seite.
Wir freuen uns auf Ihre Herausforderung!