ruby-mine

exploring the mine

Die neuen Buzz-Wörter in Rails

von bovi am 02.07.2006 (21 Uhr)

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).

Das Zauberwort heißt Webservices

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.

WS.. CRUD.. REST..

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?

WebServices

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
Das Anbieten von WebServices ist schon ein erster Schritt, jedoch lebt das Angebot ja auch von der Nachfrage, folglich müssen wir auch in der Lage sein, Webservices in unserer Applikation zu nutzen. Stellt euch z.B. vor es gäbe eine große Foto-Community, nennen wir Sie einfach mal Flickr. Nun nehmen wir an, dass wir über die URL http://www.foto-community-flickr.com/mitglieder (flickr.com war komischerweise schon belegt) direkt auf Mitgleider dieser Community zugreifen könnten. In Rails würde dies in Zukunft über das Modul ActiveRessource geregelt:
Person = ActiveRessource::Struct.new do |p|
  p.uri 'http://www.foto-community-flickr.com/mitglieder'
  p.credentials :name => 'bovi', :password => 'geheimomat'
end
Über die uri würden wir also den Pfad zum WebService definieren und über credentials wird die Authentifizierung durchgeführt, welche uns berechtigt den Service zu nutzen (keine Dienstleistung ohne die Chance auf Cash). Auf den Benutzer mit der ID 1 könnten wir anschließend wie folgt zugreifen:
bovi = Person.find(1)
bovi.name

CRUD überall

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

Kein Voodoo sondern REST

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

Es geht weiter

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

Name (notwendig)

Mail (wird nicht veröffentlicht)

Webseite


Kommentare

  1. Murphy schrieb am 03.07.2006 (01 Uhr)

    super beitrag! Rails wird wohl noch eine ganze weile das beste framework bleiben, dem alle anderen nur mühsam hinterherhecheln.

  2. janfri schrieb am 03.07.2006 (11 Uhr)

    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*

  3. Bovi schrieb am 03.07.2006 (11 Uhr)

    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.

  4. janfri schrieb am 03.07.2006 (12 Uhr)

    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.

  5. murphy schrieb am 03.07.2006 (16 Uhr)

    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...

  6. murphy schrieb am 03.07.2006 (16 Uhr)

    beklopptes WordPress! hat meine xml-tags gelöscht!

  7. Dethix schrieb am 03.07.2006 (17 Uhr)

    ach macht doch nicht immer wordpress fertig....ich mag es ;) Außerdem kommt doch bald die fledermaus, dann wird alles besser :D

  8. Ruby-Mine &raquo; Blog Archive &raquo; Rails hat gezuckt schrieb am 23.11.2006 (21 Uhr)

    [...] 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. [...]

  9. Ruby-Mine &raquo; Blog Archive &raquo; RESTful Rails schrieb am 25.01.2007 (20 Uhr)

    [...] 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. [...]