Entwicklung & Design

RESTful API und Plugins im Praxiseinsatz für den Datenexport: Ein Eventkalender mit Ruby on Rails

Die Website wevent.org basiert auf Ruby on Rails und ist ein Eventkalender, in dem Nutzer Veranstaltungen eintragen, Freunde einladen und sich über Events in der Nähe informieren. Um eine Schnittstelle für externe Anwendungen wie Desktop-Kalender oder Feedreader zu bieten, wurde eine RESTful API realisiert, über die verschiedene Datenformate angefordert werden können. Für denselben Zweck kommen auch zwei Plugins zum Einsatz.

Wer seine Anwendung RESTful entwickelt (siehe auch T3N Nr. 7 und 8) bietet eine uniforme Schnittstelle [1], über die die eigenen Daten (Resourcen) anderen Anwendungen zur Verfügung gestellt werden. Bei einem webbasierten Eventplaner bietet es sich dabei an, dass die Nutzer ihren Veranstaltungskalender auch offline auf dem Desktop nutzen oder sich per RSS über neu eingetragene Events informieren lassen können.

Die Ausgabe der Daten für das Frontend in Form einer HTML-Datei ist oftmals bereits in einer „Action“ implementiert, es muss also lediglich auf das vom Client angeforderte Format reagiert werden. Kalenderapplikationen fragen in der Regel das Standardformat iCal (meine_events.ics) an, für Feedreader wiederum kann eine Repräsentation als RSS oder Atom angeboten werden. Wem das noch nicht reicht, der stellt für weitere Anwendungen, wie zum Beispiel Web Services, auch noch XML, YAML oder JSON zu Verfügung – dank Rails ist das alles mit wenigen Zeilen Code möglich.

respond_to whatever

Mit dem Befehl „respond_to“ lässt sich auf den vom Client gesendeten Accept-Header oder das explizit angeforderte Datenformat reagieren. Erhält Rails beispielsweise eine Anfrage, deren HTTP-Header „Accept: application/xml“ enthält oder mit der auf
„http://wevent.org/events.xml“ zugegriffen wird, so rendert die Action „index“ eine Liste aller Events als XML. Folgende Einstellungen sind dafür nötig:

RUBY ON RAILS
class EventsController < ApplicationController
	def index
		@page_title = „Alle Events“
		@events = Event.find(:all)
		respond_to do |format|
			 format.html
			 format.xml   { render_xml_for  @events }
			 format.json  { render_json_for @events }
			 format.yaml { render_yaml_for @events }
			 format.rss    { render_rss_for  @events, :title => @page_title }
			 format.atom { render_atom_for @events, :title => @page_title }
			 format.ics    { render_ical_for @events, :title => @page_title }
		end
	end
end

Listing 1

Innerhalb des respond_to-Blocks werden die möglichen Ausgabeformate aufgelistet – die Reihenfolge spielt dabei keine Rolle, da der Client die Reihenfolge der gewünschten Formate im Accept-Header festlegt oder das Format durch die Dateiendung explizit angegeben wurde.

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Schreib den ersten Kommentar!

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.