Der Begriff REST schwirrt schon seit einiger Zeit durch das Internet. Doch was ist REST genau und wie kann man REST mit Java implementieren?
Dieser Fragen hat sich in der JAX Session „Java API for RESTful Web Services“ Stefan Tilkov von InnoQ angenommen und für mich sehr verständlich erklärt. Nachfolgend möchte ich das für mich Wichtigste dieser Session kurz zusammenfassen und hoffe, dass die kompletten Slides vn Stefan Tilkov bald auf der JAX Webseite heruntergeladen werden können.
Doch zurück zu REST.
Schaut man sich im Internet ein bißchen nach REST um, findet man viele Vergleiche von REST mit anderen Techniken, z.B. REST vs. SOA, REST vs. SOAP und REST vs. WS-* (Abkürzung für die recht vielfältigen Standards im Webservice Umfeld).
Laut Stefan Tilkov ist REST am ehesten mit Webservices zu vergleichen, ist aber nach seinen Erfahrungen eher ein unterschiedlicher Ansatz um High Level SOA Ziele zu erreichen.
Ursprünglich stammt der Begriff REST (Representational State Transfer) aus einer Dissertation von Roy Fielding (s.a. wikipedia) wird im heutigen Sprachgebrauch aber eher im Sinne des vollständigen „RESTful“ Gebrauchs des Hypertext-Transfer-Protokolls (HTTP) benutzt.
Nach Tilkovs Aussagen, läßt sich REST auf 5 Kernaussagen reduzieren:
- alle Dinge haben eine ID, technisch durch die im Internet eindeutige URI umgesetzt
- Dinge sind untereinander verknüpft
- Die Benutzung von Standard Methoden (uniform Interface), technisch die Methoden von HTTP
GET – zum Erhalten von optional gecachten Informationen
PUT – Ändern oder Erstellen mit bekannter ID
POST – Erstellen oder Anhängen einer Unter Resource (sub resource)
DELETE – (logisches) Löschen
HEAD – Anzeigen von Header Informationen (z.B. Größe einer Datei, bevor man sie herunter lädt)
OPTIONS – Rückgabe von Methoden, die auf einer Resource zur Verfügung stehen. - dem Erlauben unterschiedlicher Representation (auch Content Negotiation genannt), z.B als XML oder JSON String
- der statuslosen Kommunikation, wie sie im HTTP Protokoll spezifiziert ist.
Was sind die Vorteile von REST?
- universelle Unterstützung in jeder Sprache (z.B JAVA, C, Perl, PHP, Ruby, C#, .NET …) und auch vielen Tools (z.B. wget, curl)
- Eine sehr gute Skalierung
- reale WEB Integration, durch die vollständige Ausnutzung von HTTP, samt seiner Status Codes
- Unterstützung von XML, aber auch anderer Formate, wie z.B. JSON (JavaScript Object Notation
Doch wie lassen sich Anwendungen mit REST Unterstützung mit JAVA implementieren?
Antwort: durch den Java Specification Request (JSR) Nummer 311, der ein JAVA API for RESTful Webservices spezifizieren soll. Stefan Tilkov, nimmt aktiv an dieser Spezikation teil, deren Referenzimplementierung JERSEY momentan in der Version 0.7 vorliegt.
Ein Web Framework, das im JAVA Umfeld REST sehr gut umsetzt ist GRAILS.
Dass es sich lohnt, sich mit REST zu beschäftigen zeigt die Tatsache, dass Google gerade dabei ist eine Vielzahl seiner SOAP Schnittstellen (z.B. für die Suchanfragen) REST basiert umzusetzen.