Services Web Ruby



Qu'est-ce que le SAVON ?

Simple Object Access Protocol (SOAP, en abrégé Simple Object Access Protocol) 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 et simple basé sur XML (un sous-ensemble du Standard Universal Markup Language). Il est conçu pour échanger des informations structurées et solides. le WEB.

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


Installation SOAP4R

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

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

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

Dans un environnement 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 zip et l'exécuter. install.rb pour installer.


Service SOAP4R

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

  • Basé sur le service CGI/FastCGI (SOAP::RPC:: CGIStub )

  • Service indépendant (SOAP::RPC:StandaloneServer)

Ce didacticiel présentera comment établir un service SOAP indépendant. Les étapes sont les suivantes :

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

Afin d'implémenter votre propre serveur indépendant, vous devez écrire une nouvelle classe, qui est SOAP : :RPC Sous-classes de ::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 et le reste du programme restera inchangé.

Étape 2 - Définir la méthode de traitement

Ensuite, nous définissons la méthode des services Web. Comme suit, nous définissons deux méthodes, l'une consiste à ajouter deux nombres et l'autre à en diviser deux. number. :

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

   # 处理方法
   def add(a, b)
      return a + b
   end
   def div(a, b) 
      return a / b 
   end
end

Étape 3 - Publier la méthode de traitement

Ajoutez ensuite la méthode que nous avons définie sur le serveur. La méthode d'initialisation est publique et utilisée pour les connexions externes :

class MyServer < SOAP::RPC::StandaloneServer
   def initialize(*args)
      add_method(receiver, methodName, *paramArg)
   end
end
<🎜. >Ce qui suit est une description de chaque paramètre :

ParamètreDescription

récepteur
参数描述
receiver包含方法名的方法的对象。 如果你在同一个类中定义服务方法,该参数为 self
methodName调用 RPC 请求的方法名。
paramArg参数名和参数模式
Un objet contenant le nom de la méthode. Si vous définissez la méthode de service dans la même classe, ce paramètre est self.
<🎜>methodName<🎜>Le nom de la méthode pour appeler la requête RPC.
<🎜>paramArg<🎜>Nom du paramètre et mode du paramètre

Afin de comprendre les paramètres inout et out, considérons la méthode de service suivante, qui nécessite la saisie de deux paramètres : inParam et inoutParam. Une fois la fonction exécutée, elle en renvoie trois. valeurs : retVal, inoutParam, 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émarrez le service

Enfin nous démarrons le service en instanciant le classe dérivée et appelant la méthode start :

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

myServer.start

Ce qui suit est une description des paramètres de la requête :

ParamètresDescription
Nom du serveurNom du service, vous pouvez choisir celui que vous aimez
urn:ruby:ServiceNameIci,
参数描述
ServerName服务名,你可以取你喜欢的
urn:ruby:ServiceNameHere urn:ruby 是固定的,但是你可以为你的服务取一个唯一的 ServiceName
hostname指定主机名
portweb 服务端口
urn:ruby

est corrigé, mais vous pouvez obtenir un

ServiceName<🎜 pour votre service >
nom d'hôteSpécifiez le nom d'hôte
portport du service Web

Instance

Ensuite, nous créons un service indépendant :

require "soap/rpc/standaloneserver"

begin
   class MyServer < SOAP::RPC::StandaloneServer

      # Expose our services
      def initialize(*args)
         add_method(self, 'add', 'a', 'b')
         add_method(self, 'div', 'a', 'b')
      end

      # Handler methods
      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 le port 8080 est démarré et deux méthodes sont exposées : add et div.


Vous pouvez exécuter les services ci-dessus en arrière-plan :

$ ruby MyServer.rb&

Client SOAP4R

Utilisez la classe SOAP::RPC::Driver en Ruby pour développer un client SOAP. Examinons ensuite de plus près l'utilisation de la classe SOAP::RPC::Driver.

    L'appel du service SOAP nécessite les informations suivantes :
  • Adresse URL du service SOAP (URL du point de terminaison SOAP)
  • Nom de l'espace de la méthode de service (URI de l'espace de noms de la 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 appelez les méthodes SOAP ci-dessus : add, div :

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

Nous pouvons appeler sa nouvelle méthode en instanciant la classe SOAP::RPC::Driver, comme suit Affichage :

SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
参数描述
endPoint连接 SOAP 服务的 URL  地址
nameSpace命名空间用于 SOAP::RPC::Driver 对象的所有 RPC .
soapAction用于 HTTP 头部的 SOAPAction 字段值。如果是字符串是"" 则默认为 nil
Ce qui suit est une description des paramètres :

ParamètreDescription
endPointAdresse URL pour se connecter au service SOAP
nameSpaceL'espace de noms est utilisé pour tous les RPC de l'objet SOAP::RPC::Driver.
soapActionLa valeur du champ SOAPAction utilisé dans l'en-tête HTTP. Si la chaîne est "", la valeur par défaut est nil

Étape 2 - Ajoutez la méthode de service

comme SOAP::RPC::Driver ajoute une méthode de service SOAP Nous pouvons appeler la méthode suivante via l'instance SOAP::RPC::Driver :
参数描述
name远程web服务的方法名
paramArg指定远程程序的参数
driver.add_method(name, *paramArg)
<🎜>Ce qui suit est une description des paramètres : <🎜>< 🎜>

É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 Le nom réel de la méthode du SOAP service, paramArg est la liste des paramètres de la méthode.

Exemple

Sur la base des étapes ci-dessus, nous pouvons écrire le client SOAP suivant :

#!/usr/bin/ruby -w

require 'soap/rpc/driver'

NAMESPACE = 'urn:ruby:calculation'
URL = 'http://localhost:8080/'

begin
   driver = SOAP::RPC::Driver.new(URL, NAMESPACE)
   
   # Add remote sevice methods
   driver.add_method('add', 'a', 'b')

   # Call remote service methods
   puts driver.add(20, 30)
rescue => err
   puts err.message
end

Ci-dessus, nous venons de présenter brièvement les services Web de Ruby. Si vous souhaitez en savoir plus, vous pouvez consulter la documentation officielle : Ruby's Web Services