Application de service Web Ruby - SOAP4R


Qu'est-ce que SOAP ?

Simple Object Access Protocol (SOAP) est une spécification de protocole pour l'échange de données.

SOAP est un protocole simple basé sur XML qui permet aux applications d'échanger des informations via HTTP.

Simple Object Access Protocol est une spécification de protocole pour l'échange de données. Il s'agit d'un protocole léger, simple, basé sur XML (un sous-ensemble du Standard Generalized Markup Language) conçu pour échanger des informations structurées et fixes sur le Web.

Pour plus de tutoriels SOAP, veuillez consulter :http://www.w3cschool.cc/soap/soap-tutorial.html。


Installation de SOAP4R

SOAP4R a été développé et implémenté par Hiroshi Nakamura pour les applications SOAP Ruby.

Adresse de téléchargement de SOAP4R :http://raa.ruby-lang.org/project/soap4r/。

Remarque :Votre environnement Ruby peut déjà avoir ce composant installé.

Sous Linux, vous pouvez également utiliser gem pour installer ce composant. La commande est la suivante :

gem install soap4r --include-dependencies

Si vous développez dans un environnement Windows, vous devez télécharger le fichier compressé zip et l'installer en exécutant install.rb.


Service SOAP4R

SOAP4R prend en charge deux types de services différents :

  • Service basé sur CGI/FastCGI (SOAP::RPC::CGIStub)
  • Service autonome (SOAP::RPC:StandaloneServer)

Ce tutoriel présente comment configurer un service SOAP autonome. Les étapes sont les suivantes :

Étape 1 - Hériter de SOAP::RPC::StandaloneServer

Pour implémenter votre propre serveur autonome, vous devez écrire une nouvelle classe qui est une sous-classe de SOAP::RPC::StandaloneServer :

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

Remarque :Si vous souhaitez écrire un serveur basé sur FastCGI, vous devez hériter de la classe SOAP::RPC::CGIStub ; le reste du programme restera inchangé.

Étape 2 - Définir les méthodes de traitement

Ensuite, nous définissons les méthodes du service web. Ci-dessous, nous définissons deux méthodes : l'une additionne deux nombres, et l'autre divise deux nombres :

class MyServer < SOAP::RPC::StandaloneServer ............... #Méthodes de traitement def add(a, b) return a + b end def div(a, b) return a / b end end

Étape 3 - Publier les méthodes de traitement

Ensuite, ajoutez les méthodes que nous avons définies sur le serveur. La méthode initialize est publique et utilisée pour les connexions externes :

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

Voici une explication de chaque paramètre :

ParamètreDescription
receiverL'objet contenant la méthode portant le nom de la méthode. Si vous définissez la méthode de service dans la même classe, ce paramètre estself。
methodNameLe nom de la méthode appelée par la requête RPC.
paramArgNoms des paramètres et modes des paramètres

Pour comprendre les paramètresinoutetout, considérez la méthode de service suivante, qui nécessite deux paramètres d'entrée : inParam et inoutParam. Après l'exécution de la fonction, elle renvoie trois valeurs : retVal, inoutParam et outParam :

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

La méthode d'appel publique est la suivante :

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

Étape 4 - Démarrer le service

Enfin, nous instancions la classe dérivée et appelons la méthode start pour lancer le service :

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

Voici une explication des paramètres de la requête :

ParamètreDescription
ServerNameNom du service, vous pouvez choisir ce que vous voulez
urn:ruby:ServiceNameIci urn:rubyest fixe, mais vous pouvez donner à votre service unServiceName unique
hostnameSpécifiez le nom d'hôte
portPort du service Web

Exemple

Ensuite, nous créons un service autonome en utilisant les étapes ci-dessus :

Exemple

require "soap/rpc/standaloneserver" begin class MyServer < SOAP::RPC::StandaloneServer # Exposer notre service def initialize(*args) add_method(self, 'add', 'a', 'b') add_method(self, 'div', 'a', 'b') end # Méthodes de gestionnaire 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

Après avoir exécuté le programme ci-dessus, un service local écoutant sur le port 8080 est démarré, et deux méthodes sont exposées : add et div.

Vous pouvez exécuter le service ci-dessus en arrière-plan :

$ ruby MyServer.rb &

Client SOAP4R

En Ruby, la classe SOAP::RPC::Driver est utilisée pour développer des clients SOAP. Ensuite, examinons en détail l'utilisation de la classe SOAP::RPC::Driver.

L'appel d'un service SOAP nécessite les informations suivantes :

  • Adresse URL du service SOAP (URL du point de terminaison SOAP)
  • Espace de noms de méthode du service (URI de l'espace de noms de méthode)
  • Nom de la méthode de service et informations sur les paramètres

Ensuite, nous allons créer un client SOAP étape par étape pour appeler les méthodes SOAP ci-dessus : add et div :

Étape 1 - Créer une instance de pilote SOAP

Nous pouvons instancier la classe SOAP::RPC::Driver pour appeler sa méthode new, comme indiqué ci-dessous :

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

Voici une description des paramètres :

ParamètreDescription
endPointL'adresse URL pour se connecter au service SOAP
nameSpaceL'espace de noms utilisé pour tous les RPC de l'objet SOAP::RPC::Driver.
soapActionLa valeur du champ SOAPAction utilisée dans l'en-tête HTTP. S'il s'agit de la chaîne "", la valeur par défaut estnil

Étape 2 - Ajouter des méthodes de service

Pour ajouter des méthodes de service SOAP à SOAP::RPC::Driver, nous pouvons appeler les méthodes suivantes via une instance de SOAP::RPC::Driver :

driver.add_method(name, *paramArg)

Ce qui suit est une explication des paramètres :

ParamètreDescription
nameLe nom de la méthode du service web distant
paramArgSpécifiez les paramètres du programme distant

Étape 3 - Appeler le service SOAP

Enfin, nous pouvons utiliser l'instance SOAP::RPC::Driver pour appeler le service SOAP :

result = driver.serviceMethod(paramArg...)

serviceMethod est le nom réel de la méthode du service SOAP, et paramArg est la liste des paramètres de la méthode.

Exemple

D'après les étapes ci-dessus, nous pouvons écrire le client SOAP suivant :

Exemple

#!/usr/bin/ruby -w require 'soap/rpc/driver' NAMESPACE = 'urn:ruby:calculation' URL = 'http://localhost:8080/' begin driver = SOAP::RPC::Driver.new(URL, NAMESPACE) # Ajouter des méthodes de service à distance driver.add_method('add', 'a', 'b') # Appeler des méthodes de service distantes puts driver.add(20, 30) rescue => err puts err.message end

Ci-dessus, nous n'avons présenté que brièvement le service Web de Ruby. Si vous souhaitez en savoir plus, vous pouvez consulter la documentation officielle :Service Web de Ruby

Autres extensions