Architekturstil: Ajax und REST

Tuesday, 25 August 2009, 10:08 von Blackflash

Der Trend geht derzeit zu Rich Internet Applications (RIA), weshalb ich mir Gedanken über dieses Thema gemacht habe. Für mich als Informatiker stellte sich vordergründig die Frage, wie sich solche Applikationen technisch elegant realisieren ließen. Dabei ging es mir konkret um einen Architekturstil für solche Anwendungen.

Zuerst ist es jedoch wichtig zu wissen, wie konventionelle Webapplikationen entwickelt werden und welche Architektur sie nutzen, damit man die Limitationen derselben erkennt und sie derart modifizieren kann, dass sie sich gut für RIAs eignen. Der synchrone Mechanismus hat sich seit der Einführung des HTTP nicht geändert:

  1. Der Benutzer stellt eine Anfrage an den Webserver.
  2. Der Webserver empfängt die Anfrage und generiert eine HTML-Webseite.
  3. Der Webserver sendet die Antwort zum Benutzer.

Auch bei dynamischen Webseiten wird dieser Mechanismus nur mit kleinen Änderungen verwendet. Was vor allem bemerkenswert ist, dass i.d.R. die komplette Webseite (in Form von HTML) zurückgesendet wird, was meist viele redundante Daten einschließt. Im Zuge des Web 2.0 gab es eine Entwicklung zu asynchronen Anfragen, bei der nur Teile einer Webseite neugeladen werden. Als Format der Wahl bei diesen asynchronen Anfragen wird kein HTML verwendet, sondern auf XML oder neuerdings auch JSON gesetzt. Ermöglicht wird dieser asynchrone Nachrichtenaustausch durch JavaScript, woraus sich letztendlich das Akronym Ajax ergibt. Führt man dieses Konzept konsequent weiter, gelangt man zu einem Architekturstil, der auf synchronen Nachrichtenaustausch soweit wie möglich verzichtet.

Wie lässt sich ein solcher Architekturstil jedoch umsetzen? Da die Applikationslogik aus offensichtlichen Gründen nicht beim Benutzer ausgeführt werden kann, benötigt man eine Komponente, die diesen Part übernimmt: Ein Webservice. Konkret bietet sich hierfür eine leichtgewichtige Art von Webservice an, die auf Ideen des HTTP aufbaut: Representational State Transfer (REST). Es wird also ein sog. RESTful Webservice benötigt. Im Gegensatz zu konventionellen Webapplikationen würde ein solcher Webservice weitaus mehr Anfragen erhalten, die allerdings weitaus kürzer ausfallen - statt einer gesamten HTML-Webseite werden dem Client lediglich die benötigten Daten zur Darstellung gesendet. Betrachtet man dieses Konzept aus Sicht des MVC-Architekturmusters, so stellen sich die Zuständigkeiten folgendermaßen dar:

  • Modell: Der Webservice enthält die Geschäftslogik.
  • View: Der Webserver enthält die Rohfassung des Views und der Client weiß, wie er den View mit Daten aus dem Modell füllen kann.
  • Controller: Auf dem Client werden die Benutzerinteraktionen abgehandelt.

Man erkennt eine klare Trennung zwischen Modell und View/Controller bzw. Webservice und Client. Durch diese konsequente Trennung wird man zu einer präzisen Beschreibung des Webservices gezwungen, was der Qualität des Softwareprodukts zugute kommen sollte. Ein weiterer Nebeneffekt ist, dass die Last zum Teil vom Server auf die Clients verteilt wird, was bei den Clients kaum ins Gewicht fällt, aber für den Server spürbare Auswirkungen hat.

Ich für meinen Teil finde diesen Architekturstil sehr interessant, weshalb ich ihn ein wenig erkunden möchte. Welche Komponenten benötigt man also dafür? Zum einen braucht man eine gute Ajax-Bibliothek (z.B. Dojo, prototype.js) und zum anderen neben einem Webserver natürlich ein Framework mit dessen Hilfe man RESTful Webservices. Da Frontend-Entwicklung nicht zu meinen Interessen gehört und die Anforderungen an den Webservice sehr hoch sind, werde ich mich in naher Zukunft mit diesem Thema beschäftigen, wobei es derzeit nach einer Haskell-Lösung mittels FastCGI aussieht, was der Geschwindigkeit von Haskell und meinem Interesse an funktionalen Programmiersprachen geschuldet ist. Zu diesem Thema werde ich euch natürlich auf dem Laufenden halten.

Insgesamt scheint die Idee älter zu sein, als ich angenommen habe, da bereits 2006 ein Artikel über Ajax und REST erschienen ist - weshalb hat sie sich bisher nicht durchgesetzt? Oder wird sie bereits exzessiv eingesetzt und es ist mir nur noch nicht aufgefallen? Solltet ihr mehr zu diesem Thema wissen oder eine Meinung zu diesem Thema haben, würde ich mich natürlich freuen, wenn ihr mich darüber unterrichtet.

Kommentare


Kommentiere!

Your Name:


Your Email:


Your URL:


Spam Prevention:
Enter the text above into the box below.
If you are unable to read it, refresh the page.


Your Comment: