Die Abkürzung REST [1] steht für „Representational State Transfer“ und bezeichnet einen architekturalen Stil für den Bau von verteilten Systemen. Im Kern geht es bei REST darum, bestehende und erprobte Webstandards wie HTTP einzusetzen und dabei eine Reihe von Prinzipien zu beachten. Stefan Tilkov [2] hat diese Prinzipien wie folgt zusammengefasst:
- Gib jedem „Ding“ einen eindeutigen Identifier. Benutze URIs zur Identifikation von „Dingen“ in einem globalen Namensraum. Statt von „Dingen“ spricht man bei REST von Ressourcen.
- Benutze Links, um „Dinge“ zu referenzieren und Beziehungen zwischen ihnen zu modellieren. Erst Links machen das Web zum Web.
- Benutze standardisierte Methoden für den Zugriff auf „Dinge“. HTTP bietet alles, was man braucht, um CRUD-Operationen auszuführen – GET, PUT, POST, DELETE und eine Reihe anderer Methoden, die alle eine wohldefinierte Semantik haben. Der Einsatz standardisierter Methoden trägt wesentlich zur Vereinheitlichung von REST-Schnittstellen bei – hat man erst einmal eine verstanden, versteht man jede.
- Stelle mehrere, für den jeweiligen Zweck optimale Repräsentationen für „Dinge“ bereit, wie z. B. XML, JSON oder HTML.
- Kommuniziere zustandslos. Der Applikationszustand wird nur vom Client, der Zustand der „Dinge“ nur vom Server verwaltet. Dieses Prinzip ist grundlegend für die Skalierbarkeit des heutigen Internets.
REST und das Internet der Dinge (und Dienstleistungen) sind wie füreinander geschaffen. Implementierungen von REST-Schnittstellen können sehr leichtgewichtig sein – HTTP-Clients und -Server sind mittlerweile auch auf den kleinsten IP-fähigen Plattformen verfügbar.
Die zentrale Abstraktion bei REST ist, wie erwähnt, die Ressource (bei serviceorientierten Architekturen ist es der Dienst). Diese Abstraktion passt perfekt in die Welt von eingebetteten, verteilen Regelungssystemen; Sensoren, Aktoren und Regelungssysteme und die Dienste, die sie anbieten, lassen sich elegant als Ressourcen und REST-Schnittstellen modellieren. Das sind nur einige der Gründe, warum REST für die eingebetteten Systeme, die wir bei Bosch bauen, attraktiv ist.
Ein Beispiel
Hier ein (vereinfachtes) Beispiel aus der Heizungstechnik. Es illustriert, wie eine REST-Schnittstelle mit einer JSON-Repräsentation verwendet werden kann, um eine Heizung fernzusteuern. Frage die vorhandenen Räume ab:
GET http://mein.haus.de/heizung/raeume
liefert
Status 200 (OK) "[ { 'id':'wohnzimmer', 'uri': 'http://mein.haus.de/heizung/raeume/wohnzimmer' }, { 'id':'bad', 'uri': 'http://mein.haus.de/heizung/raeume/bad' } ]"
Es werden nicht nur die Namen der Räume, sondern auch die URIs der Ressourcen, die die Räume repräsentieren, mitgeliefert. Frage die aktuelle Raumtemperatur im Wohnzimmer ab:
GET http://mein.haus.de/heizung/raeume/wohnzimmer/temp
liefert
Status Code 200 (OK) "{ 'temp':'20.2', 'unit':'celsius' }"
Setze die Solltemperatur im Wohnzimmer auf 21°C:
PUT http://mein.haus.de/heizung/raeume/wohnzimmer/sollTemp
mit Anhang
"{ 'temp':'21.0' }"
liefert
Status Code 204 (NO CONTENT)
Schalte die Heizung während meines Kurzurlaubs nächste Woche Wochenende ausnahmsweise auf Frostbetrieb:
POST http://mein.haus.de/heizung/heizplan/ausnahmen
mit Anhang
"{ 'start': '2012-10-19T18:00', 'end': '2012-10-21T21:00', 'modus': 'frost' }"
liefert
Status Code 201 (CREATED) "http://mein.haus.de/heizung/heizplan/ausnahmen/12"
Oder noch besser: Benutze meinen Onlinekalender, um bei Urlaub automatisch die Heizung in den Frostbetrieb und bei einer Party automatisch eine Stunde vorher in den Heizmodus zu schalten:
PUT http://mein.haus.de/heizung/heizplan/calendar-control
mit Anhang
"{ 'cal':'http://www.ocal.de', 'user':'haeusle@bauer.de', 'pwd':'schaffeschaffe', 'vcal-mappings': [ {'name-equals':'Urlaub', 'mode':'frost'}, {'name-contains':'Party', 'mode':'high', 'in-advance','60'} ] }"
Erfahrung bei Bosch
Ich habe in meiner Arbeit für die Bosch-interne FusionX-Community mehrere REST-Schnittstellen für verschiedene Domänen wie z. B. Heizungstechnik und Fahrzeugtechnik entwickelt. Diese Schnittstellen haben wir erfolgreich in mobilen Endgeräten und Browsern eingesetzt. Bosch Thermotechnik hat auf Basis einer unserer Schnittstellen einen Internet-Gateway [3] entwickelt, der den Fernzugriff auf Bosch-Heizungen erlaubt. Andere Geschäftseinheiten evaluieren bzw. planen den Einsatz von ähnlichen REST-Schnittstellen in ihren Produkten. Alles in allem ist REST auf dem besten Wege, eine Basistechnologie für Bosch zu werden.