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ètre | Description | tr>||||||||
---|---|---|---|---|---|---|---|---|---|
récepteur
| 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ètres | Description th> | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Nom du serveur | Nom du service, vous pouvez choisir celui que vous aimez td> | ||||||||||
urn:ruby:ServiceName | Ici,
est corrigé, mais vous pouvez obtenir unServiceName<🎜 pour votre service > | ||||||||||
nom d'hôte | Spécifiez le nom d'hôte | ||||||||||
port | port 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 |
Paramètre | Description |
---|---|
endPoint | Adresse URL pour se connecter au service SOAP |
nameSpace | L'espace de noms est utilisé pour tous les RPC de l'objet SOAP::RPC::Driver. |
soapAction | La valeur du champ SOAPAction utilisé dans l'en-tête HTTP. Si la chaîne est "", la valeur par défaut est nil |
参数 | 描述 |
---|---|
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