5.12 Darstellungsformate in RESTful Rails 

Format frei wählbar
Ein weiterer interessanter Aspekt von RESTful Rails ist die Darstellung. Wenn wir die Detailseite eines Bookmarks aufrufen (/bookmarks/2), wird der zweite Bookmark im Browser im HTML-Format angezeigt. Wir könnten auch /bookmarks/2.html im Browser aufrufen. Das funktioniert und ist erlaubt, weil die Darstellung in RESTful Rails frei wählbar sein sollte.
respond_to
Das heißt, wir könnten auch /bookmarks/2.xml oder /bookmarks/2.pdf aufrufen. Wenn wir das testen, kommt es zwar zu keinem Fehler, aber die Ausgabe erfolgt nicht in dem von uns gewünschten Format, sondern es bleibt bei der Darstellung im HTML-Format. Das liegt daran, dass wir nichts vorgesehen haben in unserem Controller. Rails bietet uns eine sehr einfache Methode an, respond_to, die wir im Controller einsetzen können, um die Darstellung in unterschiedlichen Formaten zu realisieren.
Testen wollen wir das mit der Action show im Bookmarks-Controller, indem wir die Methode respond_to einfügen, innerhalb der wir die Ausgabe im HTML- und im XML-Format definieren:
Listing app/controllers/bookmarks_controller.rb
def show @bookmark = Bookmark.find(params[:id]) respond_to do |format| format.html format.xml {render :xml => @bookmark.to_xml} end end
to_xml
Da das HTML-Format der Standardausgabe entspricht und es auch Standard ist, dass der entsprechende View zur Action im Controller geladen wird, müssen wir für den Fall, dass die Ausgabe im HTML erfolgen soll, nichts angeben. Im Fall der Ausgabe im XML-Format stellt uns ActiveRecord eine interessante Methode zur Verfügung, to_xml, mit der wir jedes ActiveRecord-Objekt in XML umwandeln können. Über render :xml erfolgt die Ausgabe im XML-Format.
Jetzt erhalten wir beim Aufruf von /bookmarks/2 und /bookmarks/2.html die Ausgabe des zweiten Bookmarks im HTML-Format, und beim Aufruf von /bookmarks/2.xml erfolgt die Darstellung im XML-Format:
Listing http://localhost:3000/bookmarks/2.xml
<?xml version="1.0" encoding="UTF-8"?> <bookmark> <comment></comment> <created-at type="datetime" >2007-05-16T16:30:59+02:00 </created-at> <id type="integer" >2</id> <title>Ruby Homepage</title> <updated-at type="datetime" >2007-05-16T16:30:59+02:00 </updated-at> <url>http://www.ruby-lang.org</url> </bookmark>
Ausgabe einschränken
Wenn wir nur bestimmte Felder ausgeben möchten, können wir die Ausgabe einschränken:
Listing app/controllers/bookmarks_controller.rb
def show @bookmark = Bookmark.find(params[:id]) respond_to do |format| format.html format.xml {render :xml => @bookmark.to_xml( :only => [:title, :url])} end end
Listing http://localhost:3000/bookmarks/2.xml
<?xml version="1.0" encoding="UTF-8"?> <bookmark> <title>Ruby</title> <url>http://www.ruby-lang.org</url> </bookmark>
Für die Ausgabe im PDF-Format ist das nicht ganz so einfach, da im PDF-Format nicht standardisiert ist, wie die Ausgabe aussieht.
Die Methode respond_to können wir auch den anderen Actions hinzufügen, um auch deren Ergebnisse im XML-Format darstellen zu können. Diese doch recht einfache Möglichkeit der Darstellung im XML-Format ist sehr hilfreich zum Datenaustausch mit anderen Applikationen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.