14.5 Zugriff auf einen Webservice mit ActiveResource 

ActiveResource ist eine Technologie in Rails, die es erlaubt, auf die Ressourcen einer anderen Applikation zuzugreifen.
Ziel ist es, eine Applikation zu entwickeln, die als Client für die Airport- Service-Applikation fungiert. Im letzten Beispiel haben wir diese Applikation bereits erstellt. Im Folgenden wird demonstriert, wie über eine Model-Klasse auf die entfernte Ressource zugegriffen werden kann.
Dazu generieren wir zunächst eine neue Rails-Applikation:
rails airport-client
ActiveResource:: Base
Wir erstellen nun eine Model-Klasse, mit der wir auf die entfernte Ressource zugreifen können. Dieses Model verwendet als Elternklasse jedoch nicht ActiveRecord::Base, sondern ActiveResource::Base . Erstellen Sie dazu im Verzeichnis app/models die Datei airport.rb:
Listing app/models/airport.rb
class Airport < ActiveResource::Base self.site = "http://localhost:3000" end
In der Klassenvariablen site wird die URL der Server-Applikation, die die Ressource Airport anbietet, angegeben. Wenn Sie die Applikation lokal testen möchten, achten Sie darauf, dass die Server-Applikation läuft.
Rails übernimmt Kommunikation
Das war es schon. Rails übernimmt die Kommunikation zwischen der Client-Applikation und der Server-Applikation, die die Ressource anbietet.
Sie können nun in der Client-Applikation auf das entfernte Model fast genauso zugreifen wie bei einem normalen ActiveRecord-Model. In der Rails-Konsole ruby script/console kann man z. B. folgende Befehle ausführen:
>> airport = Airport.find(1) => #<Airport:0x1a89d7c @prefix_options={}, @attributes={ "name"=>"Flughafen Düsseldorf International", "updated_at"=>Mon Feb 04 22:35:14 UTC 2008, "code"=>"DUS", "id"=>1, "created_at"=>Mon Feb 04 22:33:21 UTC 2008 }> >> airport.code => "DUS" >> airport.name => "Flughafen Düsseldorf International" >> airport.name="Airport Düsseldorf International" => airport.save >> true >> Airport.create(:code=>"DXB", :name=>"Dubai International Airport") => #<Airport:0x1a02a5c @prefix_options={}, @attributes={"name"=>"Dubai International Airport", "updated_at"=>Tue Feb 05 03:30:33 UTC 2008, "code"=>"DXB", "id"=>4, "created_at"=>Tue Feb 05 03:30:33 UTC 2008 }>
Wenn Sie jetzt wieder die URL
http://localhost:3000/airports aufrufen, können Sie die Änderungen, die gemacht wurden, sehen.
Abbildung
Verwendung
Als Letztes möchten wir noch den Service nutzen, der uns zu einem Code eines Flughafens den Namen liefert:
>> Airport.get(:with_code,:code=>'DXB') => {"name"=>"Dubai International Airport", "updated_at"=> Tue Feb 05 03:30:33 UTC 2008, "code"=>"DXB", "id"=>4, "created_at"=>Tue Feb 05 03:30:33 UTC 2008}
Der Aufruf erfolgt über die Methode get, da wir im Routing festgelegt haben, dass Anfragen zu :with_code über die GET-Methode erfolgen.
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.