Maturity Modell von Leonard Richardson

25 Okt

In meinem vorherigen Artikel hatte ich bereits darüber gesprochen, dass REST oft anders umgesetzt wird, als eigentlich vom Erfinder spezifiziert. Daraufhin hatte ich meine eigene kleine Kategorisierung von REST-Services aufgestellt.
Nun habe ich das „Richardson Maturity Model“ entdeckt, das eine ähnliche Kategorisierung vornimmt. Leonard Richardson war nebebei der Erste, der ein umfassenderes Buch über RESTful Web Services geschrieben hat  (im Jahr 2007).

Das 4-stufige Modell stellt den Grad der effizienten Nutzung von HTTP dar. Beginnend bei Stufe 0 fügt jede weitere Stufe eine Architekturbedingung hinzu, bis in Stufe 3 eine RESTful Architektur erreicht ist.

Stufe 0 – RPC: Auf dieser Stufe wird HTTP einfach als Transportprotokoll für RPC-Aufrufe verwendet
Nachteil: Der Service ist eine Blackbox mit nicht adressierbaren Ressourcen.
Typische Vertreter: XML-RPC, SOAP

 # HTTP-Anfrage

POST /api HTTP/1.1
Host: example.org

{
methodCall:{
methodName:“GetOrder“,
params:{
id:4843
}
}
}

Stufe 1 – Ressourcen: Auf dieser Stufe finden sich die meisten Services wieder. Services auf dieser Stufe machen Ressourcen zugänglich, nutzen aber nur eine Untermenge der verfügbaren HTTP-Methoden (oft nur POST und GET). Die Information, was mit einer Ressource gemacht werden soll, steckt in Aktionsparameter und ist nicht anhand der genutzten HTTP-Methode ersichtlich.
Nachteil:  Wird die Semantik der HTTP-Methoden nicht eingehalten, kann es zu unerwünschten Ergebnissen kommen, wenn z.B. eine sichere Methode wie GET auf einer Ressource benutzt wird, um sie zu verändern. Außerdem erinnern Verben wie „retrieve“ an RPC.
Typische Vertreter: Flickr API, Delicious API, Twitter API

# HTTP-Anfrage

GET /order/retrieve?id=4843 HTTP/1.1
Host: example.org

Stufe 2 – Verben:  Alle HTTP-Methoden werden richtig auf adressierbaren Ressourcen eingesetzt.
Nachteil: Client und Server binden sich über feste URLs eng aneinander.
Typische Vertreter: Amazon S3 API

# HTTP-Anfrage

GET /order/4843 HTTP/1.1
Host: example.org

Stufe 3 – Hypermedia: Die ausgiebige Nutzung von Hypermedia macht einen Service zu einem RESTful Web Service. Eine entsprechende API veröffentlicht nur eine Basisadresse und Verarbeitungsregeln für alle zurückgelieferten Repräsentationen. Alle weiteren Aktionsmöglichkeiten erfährt ein Client durch Verlinkungen innerhalb der Repräsentationen.
Zwei Arten von Links sind hier zu unterscheiden: Solche, die einfach nur zu einer anderen Ressource führen und solche, die mögliche Zustandänderungen auf der aktuellen Ressource ausdrücken.
Nachteil: Bei Services, die tief verschachtelte Ressourcen anbieten, sind mehrere Aufrufe notwendig, um von der Basis-URL aus zur gewünschten Ressource zu gelangen.
Typische Vertreter: Netflix API (Einsatz von Hypermedia aber trotzdem ein festes URL-Schema), Sun Cloud API

# HTTP-Anfrage

GET /api HTTP/1.1
Host: example.org

# HTTP-Antwort

HTTP/1.1 200 OK
Content-Type: application/json

{
„links“ : [{
„rel“ : „orders“,
„href“ : „http://example.org/orders“
}, {
„rel“ : „products/“,
„href“ : „http://example.org/products“,
}]
}

# nächste HTTP-Anfrage (Wahl des Orders-Links)

GET /orders HTTP/1.1
Host: example.org

# HTTP-Antwort

HTTP/1.1 200 OK
Content-Type: application/json

{
„orders“ : [{
„rel“ : „order“,
„href“ : „http://example.org/orders/12“
}, {
„rel“ : „order“,
„href“ : „http://example.org/orders/23“,
},{
„rel“ : „order“,
„href“ : „http://example.org/orders/24“,
}]
„links“ : [{
„rel“ : „self“,
„href“ : „http://example.org/orders“
}
}]
}

Eine Antwort to “Maturity Modell von Leonard Richardson”

Trackbacks/Pingbacks

  1. Ergebnisse der API-Analysen « Studentenblogs DDI@UPB - 20. November 2011

    […] REST-Konformität: Die Stufe gemäß dem Modell von Richardson (siehe vorletzter Blogpost) […]

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: