Endlich.. Nachdem der Personenkult um DHH nun ein wenig abgekühlt ist, geht es endlich wieder weiter im Dialog. Rails 1.2 steht in den Startlöchern (bzw. in den Commits) und wird die gesamte Welt revolutionieren (so ist zumindest der Plan).
Von einigen schon totgesagt, hat der kleine introvertierte WebService nun eine renaissance durchlebt. Google, Microsoft und Amazon, um nur die Kleinsten zu nennen, setzen es ein um Dienstleistungen über das Internet anzubieten. Rails hatte nur einen ziemlich schwachen Support für diese Thematik bereitgestellt. Doch das soll sich mit der 1.2 nun ändern.
Auf der RubyKaigi hielt DHH zu den hypefähigsten Abkürzungen einen Vortag. Darunter viel WS (WebService), CRUD (Create Read Update DELETE) und REST (Representational State Transfer). Was versteckt sich nun dahinter?
Hierbei handelt es sich um Software Anwendungen welche direkt über eine URL ansprechbar sind. Die Kommunikation findet dabei mithilfe von HTTP und XML statt. Oft trifft man hierbei auf SOAP und XML-RPC. Das Besondere ist nun, dass die Anwendungen nicht Browser oder sonstwie Plattformgebunden sind. Dies bedeutet man brauch einzig und allein eine TCP Verbindung zum WS-Anbieter und ein WS-Tool oder eine Programmiersprache mit TCP Support. Ein Beispiel ist der RSS-Feed vom tollsten Forum der Welt. Dieser kann in jeder nur erdenklichen Programmiersprache verwertet werden. Nun besteht zusätzlich auch noch die Möglichkeit via POST oder GET Informationen an den WebService zu übergeben und so wird eine Anwendung auch richtig nützlich. Wir könnten nun z.B. einen WebService schreiben der addieren kann und als Übergabeparameter zwei Zahlen erhält. Diese werden dann ausgerechnet und die Ausgabe ist ein XML Dokument was z.B. bei der Addition von 31 und 3 so aussehen könnte:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <resultat>34</resultat>
Die Verwendung von XML hat sich aufgrund der weiten Verbreitung von XML -Parsern durchgesetzt, natürlich kann man seine Daten auch in Form einer INI Datei zurückgeben (Gott bewahre uns).
Rails unterstützte dies bisher nur indirekt über die Erstellung einer .rxml View. Diese musste dann hinter einer eigenen Aktion versteckt werden. Rails 1.2 dagegen wird uns eine schon bekannte Möglichkeit Anbieten die jedoch nun auf MIME-Types basiert:
class PeopleController < ActionController::Base def index @people = Person.find(:all) respond_to do |format| format.html # rendert index.rhtml format.js # rendert index.rjs format.xml { render :xml => @people.to_xml } format.icl { render_calendar(@people) } format.atom do render :action => 'atom', :content_type => Mime::Atom end end end end
Person = ActiveRessource::Struct.new do |p| p.uri 'http://www.foto-community-flickr.com/mitglieder' p.credentials :name => 'bovi', :password => 'geheimomat' end
bovi = Person.find(1) bovi.name
DHH mag CRUD, nein er liebt es sogar. Jede Applikation sollte seiner Meinung nach diesen Bestandteil besitzen und wenn DHH das sagt, werde ich Ihm nicht wiedersprechen (wenn du dich traust dann tu es ruhig). Es geht darum, dass eine jede Applikation die Möglichkeit zum Erstellen (CREATE), Lesen (READ), Bearbeiten (UDaTE) und Löschen (DELETE) von Applikationsspezifischen Daten bieten sollte. Dieses Konzept ist uns durch den sogenannte Scaffolder von Rails sehr bekannt, denn dieser erzeugt genau diese vier Funktionen für ein bestimmtes Model. Nun soll Rails durch eine weitere Konvention die langen URLs kürzen:
aus /people/create wird /people
aus /people/show/1 wird /people/1
aus /people/update/1 wird /people/1
aus /people/destroy/1 wird /people/1
Diese Verkürzung der URL ist keine Magie, sondern es wird eine schon seit jeher bestehende Spezifikation von HTTP genutzt und zwar das sogenannte REST. Hiermit ist gemeint, dass man die Verarbeitung über Methoden mit HTTP beeinflussen kann. Die folgenden Methoden gibt es z.B. bei HTTP:
POST GET PUT DELETE
Die meissten von euch haben bisher wahrscheinlich immer nur POST bzw. GET verwendet:
POST /people/create
GET /people/show/1
POST /people/update/1
POST /people/destroy/1
Rails verwendet nun:
POST /people
GET /people/1
PUT /people/1
DELETE /people/1
Nach einer kleinen Verschnaufpause zieht die Entwicklung von Rails jetzt scheinbar wieder an. Ich bin gespannt was noch so kommt. In diesem Sinne POST /beitrag
Kommentar schreiben
Kommentare
super beitrag! Rails wird wohl noch eine ganze weile das beste framework bleiben, dem alle anderen nur mühsam hinterherhecheln.
Warum eigentlich nicht JSON oder YAML als (mögliches) Datenformat für Webservices? Das wäre doch eigentlich the Ruby way, oder? XML, weil das alle so machen ist IMO ein schlechtes Argument (dann müsste man auch gleich JEE machen, anstatt Rails), zumal der Overhead an obigem Beispiel schon sehr deutlich wird. OK, ini-Dateien sollten es auch nicht gerade sein. ;) Aber, wenn schon Revolution, dann auch richtig. *renn weg*
Hi Janfri, in der Tat ist es so, dass beispielsweise Google für die Earth API JSON verwendet. Wie gesagt XML ist weit verbreitet und dies ist ein sehr überzeugendes Argument für Firmen, wer will schon auf ein Format setzen was nur von irgendwelchen Fricklern gepflegt wird (überspitzt gesagt). Schlußendlich kann man natürlich alles verwenden.
Schon klar. Kann man nur hoffen, dass die Wahrnehmung von JSON sich weiterhin verbessert. Zumindest gab es ja auch schon mal eine iX-Artikel darüber. Wenn dann mehr Firmen wie Google (die sicherlich auch in Managerkreisen nicht nur als "Frickler" angesehen werden) auf solche Technologien setzen, dann habe ich gute Hoffnung. Es bleibt spannend.
vielleicht gibt es dafür bessere test-tools. YAML wird von Ruby noch nicht komplett unterstützt und ist allgemein noch nicht sehr anerkannt, warum auch immer. wäre natürlich toll: %YAML 1.1 --- person: name: bovi statt bovi allerdings bin ich mir nicht so sicher, ob YAML hier wirklich geeignet ist. man kann in YAML ja Ruby-klassen als elementtyp angeben, das wäre nicht so günstig für den austausch mit anderen spraachen...
beklopptes WordPress! hat meine xml-tags gelöscht!
ach macht doch nicht immer wordpress fertig....ich mag es ;) Außerdem kommt doch bald die fledermaus, dann wird alles besser :D
[...] Nachdem sich eine Weile in der Rails Versionsgeschichte nicht viel getan hat, wurde nun der erste Release Kandidat für die 1.2 veröffentlicht. Wenn ich mir anschaue was neu ist, muss ich ein wenig lächeln, denn über die meißten Dinge habe ich bereits am 2. Juli schonmal berichtet. [...]
[...] Mitte letzten Jahres hatte ich einige Buzzwörter von Rails 1.2 kurz aufgelistet und einige Sätze dazu geschrieben. Nachdem die Version nun stabil verfügbar ist, wäre es an der Zeit einen etwas tieferen Blick auf die neuen Techniken zu werfen. Ein Dokument welches REST ein wenig näher beleuchtet wurde gestern veröffentlicht. Und ob Ihr es glaubt oder nicht es ist sogar in deutsch. [...]