Ruby-Web-Service-Anwendung - SOAP4R


Was ist SOAP?

Simple Object Access Protocol (SOAP) ist eine Protokollspezifikation zum Austausch von Daten.

SOAP ist ein einfaches XML-basiertes Protokoll, das Anwendungen ermöglicht, Informationen über HTTP auszutauschen.

Simple Object Access Protocol ist eine Protokollspezifikation zum Austausch von Daten. Es ist ein leichtgewichtiges, einfaches, XML-basiertes (eine Teilmenge der Standard Generalized Markup Language) Protokoll, das für den Austausch strukturierter und fester Informationen im Web konzipiert wurde.

Weitere SOAP-Tutorials finden Sie unter:http://www.w3cschool.cc/soap/soap-tutorial.html。


SOAP4R-Installation

SOAP4R wurde von Hiroshi Nakamura für Ruby-SOAP-Anwendungen entwickelt und implementiert.

SOAP4R-Download-Adresse:http://raa.ruby-lang.org/project/soap4r/。

Hinweis:In Ihrer Ruby-Umgebung ist diese Komponente möglicherweise bereits installiert.

Unter Linux können Sie auch gem verwenden, um diese Komponente zu installieren. Der Befehl lautet wie folgt:

gem install soap4r --include-dependencies

Wenn Sie in einer Windows-Umgebung entwickeln, müssen Sie die ZIP-komprimierte Datei herunterladen und sie durch Ausführen von install.rb installieren.


SOAP4R-Dienst

SOAP4R unterstützt zwei verschiedene Diensttypen:

  • CGI/FastCGI-basierter Dienst (SOAP::RPC::CGIStub)
  • Standalone-Dienst (SOAP::RPC:StandaloneServer)

In diesem Tutorial wird gezeigt, wie Sie einen eigenständigen SOAP-Dienst einrichten. Die Schritte sind wie folgt:

Schritt 1 - Von SOAP::RPC::StandaloneServer erben

Um Ihren eigenen eigenständigen Server zu implementieren, müssen Sie eine neue Klasse schreiben, die eine Unterklasse von SOAP::RPC::StandaloneServer ist:

class MyServer < SOAP::RPC::StandaloneServer ............... end

Hinweis:Wenn Sie einen FastCGI-basierten Server schreiben möchten, müssen Sie von der Klasse SOAP::RPC::CGIStub erben; der Rest des Programms bleibt unverändert.

Schritt 2 - Verarbeitungsmethoden definieren

Als Nächstes definieren wir die Web-Service-Methoden. Unten definieren wir zwei Methoden: Eine addiert zwei Zahlen, und die andere dividiert zwei Zahlen:

class MyServer < SOAP::RPC::StandaloneServer ............... #Verarbeitungsmethoden def add(a, b) return a + b end def div(a, b) return a / b end end

Schritt 3 - Verarbeitungsmethoden veröffentlichen

Als Nächstes fügen Sie die Methoden hinzu, die wir auf dem Server definiert haben. Die initialize-Methode ist öffentlich und wird für externe Verbindungen verwendet:

class MyServer < SOAP::RPC::StandaloneServer def initialize(*args) add_method(receiver, methodName, *paramArg) end end

Das Folgende ist eine Erklärung der einzelnen Parameter:

ParameterBeschreibung
receiverDas Objekt, das die Methode mit dem Methodennamen enthält. Wenn Sie die Service-Methode in derselben Klasse definieren, ist dieser Parameterself。
methodNameDer Methodenname, der von der RPC-Anfrage aufgerufen wird.
paramArgParameternamen und Parametermodi

Uminout- undout-Parameter zu verstehen, betrachten Sie die folgende Service-Methode, die zwei Eingabeparameter erfordert: inParam und inoutParam. Nachdem die Funktion die Ausführung abgeschlossen hat, gibt sie drei Werte zurück: retVal, inoutParam und outParam:

def aMeth(inParam, inoutParam) retVal = inParam + inoutParam outParam = inParam . inoutParam inoutParam = inParam * inoutParam return retVal, inoutParam, outParam end

Die öffentliche Aufrufmethode lautet wie folgt:

add_method(self, 'aMeth', [ %w(in inParam), %w(inout inoutParam), %w(out outParam), %w(retval return) ])

Schritt 4 - Dienst starten

Schließlich instanziieren wir die abgeleitete Klasse und rufen die start-Methode auf, um den Dienst zu starten:

myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port) myServer.start

Das Folgende ist eine Erklärung der Anfrageparameter:

ParameterBeschreibung
ServerNameDienstname, Sie können wählen, was Sie möchten
urn:ruby:ServiceNameHier urn:rubyist fest, aber Sie können Ihrem Dienst einen eindeutigenServiceName geben
hostnameGeben Sie den Hostnamen an
portWebdienst-Port

Beispiel

Als Nächstes erstellen wir anhand der oben genannten Schritte einen eigenständigen Dienst:

Beispiel

require "soap/rpc/standaloneserver" begin class MyServer < SOAP::RPC::StandaloneServer # Unseren Dienst bereitstellen def initialize(*args) add_method(self, 'add', 'a', 'b') add_method(self, 'div', 'a', 'b') end # Handler-Methoden def add(a, b) return a + b end def div(a, b) return a / b end end server = MyServer.new("MyServer", 'urn:ruby:calculation', 'localhost', 8080) trap('INT){ server.shutdown } server.start rescue => err puts err.message end

Nach dem Ausführen des obigen Programms wird ein lokaler Dienst gestartet, der auf Port 8080 lauscht, und es werden zwei Methoden bereitgestellt: add und div.

Sie können den obigen Dienst im Hintergrund ausführen:

$ ruby MyServer.rb &

SOAP4R-Client

In Ruby wird die Klasse SOAP::RPC::Driver verwendet, um SOAP-Clients zu entwickeln. Als Nächstes sehen wir uns die Verwendung der Klasse SOAP::RPC::Driver im Detail an.

Zum Aufrufen eines SOAP-Dienstes sind die folgenden Informationen erforderlich:

  • URL-Adresse des SOAP-Dienstes (SOAP-Endpunkt-URL)
  • Methoden-Namespace des Dienstes (Method Namespace URI)
  • Name der Dienstmethode und Parameterinformationen

Als Nächstes erstellen wir Schritt für Schritt einen SOAP-Client, um die oben genannten SOAP-Methoden aufzurufen: add und div:

Schritt 1 – Erstellen einer SOAP-Treiber-Instanz

Wir können die Klasse SOAP::RPC::Driver instanziieren, um ihre new-Methode aufzurufen, wie unten gezeigt:

SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)

Das Folgende ist eine Beschreibung der Parameter:

ParameterBeschreibung
endPointDie URL-Adresse zur Verbindung mit dem SOAP-Dienst
nameSpaceDer Namespace, der für alle RPCs des SOAP::RPC::Driver-Objekts verwendet wird.
soapActionDer im HTTP-Header verwendete Wert des SOAPAction-Felds. Wenn es die Zeichenkette "" ist, ist der Standardnil

Schritt 2 – Dienstmethoden hinzufügen

Um SOAP-Dienstmethoden zu SOAP::RPC::Driver hinzuzufügen, können wir über eine Instanz von SOAP::RPC::Driver die folgenden Methoden aufrufen:

driver.add_method(name, *paramArg)

Im Folgenden werden die Parameter erläutert:

ParameterBeschreibung
nameDer Methodenname des Remote-Webdienstes
paramArgGeben Sie die Parameter des Remote-Programms an

Schritt 3 - SOAP-Dienst aufrufen

Schließlich können wir die Instanz von SOAP::RPC::Driver verwenden, um den SOAP-Dienst aufzurufen:

result = driver.serviceMethod(paramArg...)

serviceMethod ist der tatsächliche Methodenname des SOAP-Dienstes, und paramArg ist die Parameterliste der Methode.

Beispiel

Basierend auf den oben genannten Schritten können wir den folgenden SOAP-Client schreiben:

Beispiel

#!/usr/bin/ruby -w require 'soap/rpc/driver' NAMESPACE = 'urn:ruby:calculation' URL = 'http://localhost:8080/' begin driver = SOAP::RPC::Driver.new(URL, NAMESPACE) # Remote-Dienstmethoden hinzufügen driver.add_method('add', 'a', 'b') # Remote-Dienstmethoden aufrufen puts driver.add(20, 30) rescue => err puts err.message end

Oben haben wir nur kurz Rubys Web Service vorgestellt. Wenn Sie mehr erfahren möchten, können Sie die offizielle Dokumentation einsehen:Rubys Web Service

Weitere Erweiterungen