Web Services Ruby Applications - soap4r
Qu'est-ce que SOAP?
Simple Protocol Object Access (SOAP, toutes écrites pour le protocole Simple Object Access) est une spécification de protocole d'échange de données.
SOAP est un protocole basé sur XML simple qui permet aux applications d'échanger des informations sur HTTP.
Simple Protocol Object Access, est une spécification de protocole pour l'échange de données, est un poids léger, simple, basé sur XML (un sous-ensemble de la sous Standard Generalized Markup Language) protocole, qui est conçu pour échange structuré sur le WEB et le durcissement de l'information.
S'il vous plaît voir plus SOAP Tutoriel: http://www.w3cschool.cc/soap/soap-tutorial.html .
Installation soap4r
Soap4r Hiroshi Nakamura développé par la mise en œuvre de SOAP pour les applications Ruby.
Soap4r Télécharger: http://raa.ruby-lang.org/project/soap4r/ .
Note: Votre environnement de rubis peut - être déjà installé le composant.
Sous Linux, vous pouvez installer le composant en utilisant la gemme, la commande suivante:
$ gem install soap4r --include-dependencies
Si vous êtes sous l'environnement de développement de la fenêtre, vous devez télécharger le fichier zip, et installer en exécutant install.rb.
service de soap4r
Soap4r prend en charge deux types de services différents:
- services basés sur CGI / FastCGI (SOAP :: RPC :: CGIStub)
- Service indépendant (SOAP :: RPC: StandaloneServer)
Ce tutoriel va vous montrer comment construire un service SOAP indépendants. Procédez comme suit:
Étape 1 - Héritage SOAP :: RPC :: StandaloneServer
Afin de réaliser leur propre serveur distinct, vous devez écrire une nouvelle classe qui est SOAP :: RPC :: sous-catégories de StandaloneServer:
class MyServer < SOAP::RPC::StandaloneServer ............... end
Remarque: Si vous voulez écrire un FastCGI basé sur le serveur, alors vous avez besoin d'étendre SOAP RPC :: :: classe CGIStub, le reste du programme reste inchangé.
Deuxième étape - Définir les méthodes de traitement
Ensuite, nous définissons l'approche des services Web, nous définissons les deux méthodes suivantes, on est la somme de deux nombres, l'un est divisé par le nombre de deux:
class MyServer < SOAP::RPC::StandaloneServer ............... # 处理方法 def add(a, b) return a + b end def div(a, b) return a / b end end
La troisième étape - la méthode de traitement de la publication
Ensuite, nous ajoutons des méthodes définies sur le serveur, initialise procédé est décrit pour les connexions externes:
class MyServer < SOAP::RPC::StandaloneServer def initialize(*args) add_method(receiver, methodName, *paramArg) end end
Voici une description de chaque paramètre:
Paramètres | description |
---|---|
récepteur | Objet qui contient le nom de méthode de la méthode. Si vous définissez la méthode de service dans la même classe, le paramètre estauto. |
methodName | méthode RPC nom de requête d'appel. |
paramArg | Nom du paramètre et le mode de paramètre |
Pour comprendreinoutetdesparamètres, examiner les méthodes de service suivantes, vous devez entrer deux paramètres: inParam et inoutParam, la fonction renvoie trois valeurs après l'achèvement de la mise en œuvre: retVal, inoutParam, outParam:
def aMeth(inParam, inoutParam) retVal = inParam + inoutParam outParam = inParam . inoutParam inoutParam = inParam * inoutParam return retVal, inoutParam, outParam end
Publication de l'appel comme suit:
add_method(self, 'aMeth', [ %w(in inParam), %w(inout inoutParam), %w(out outParam), %w(retval return) ])
La quatrième étape - service ouvert
Enfin, on instancie la classe dérivée, et appelons la méthode de démarrage pour démarrer le service:
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port) myServer.start
Ce qui suit est une description du paramètre de la requête:
Paramètres | description |
---|---|
ServerName | Nom du service, vous pouvez prendre votre favori |
urn: ruby: ServiceName | Iciurn: ruby est fixe, mais vous pouvez prendre unServiceNameunique pour votre service |
hostname | Indiquez le nom d'hôte |
port | port du service Web |
Exemples
Ensuite, nous à travers les étapes ci-dessus pour créer un service autonome:
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 l'exécution du programme ci-dessus, commencer un auditeur sur le port 8080 des services locaux, et expose deux méthodes: ajouter et div.
Vous pouvez ensuite effectuer l'arrière-plan de ces services:
$ ruby MyServer.rb&
client soap4r
ruby utiliser SOAP :: RPC :: client SOAP de développement de classe Driver. Ensuite, nous regardons en détail en utilisant SOAP :: RPC :: classe du pilote.
service SOAP Appel requiert les informations suivantes:
- Service SOAP adresse URL (SOAP Endpoint URL)
- Namespace (méthode Namespace URI) méthode de service
- nom de la méthode de service et informations sur les paramètres
Ensuite, nous faisons un pas de créer un client SOAP pour appeler la méthode SOAP ci-dessus: ajouter, div:
Première étape - Créer une instance SOAP Pilote
Nous pouvons l'appeler une nouvelle méthode pour instancier SOAP :: RPC :: classe du pilote, comme suit:
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
Ce qui suit est une description des paramètres:
Paramètres | description |
---|---|
endPoint | service SOAP adresse URL de connexion |
nameSpace | Namespace pour SOAP :: RPC :: objet Driver tous RPC. |
soapAction | Pour les valeurs de champ d'en-tête HTTP SOAPAction. Si la chaîne est "" la valeur par défaut estnul |
Deuxième étape - ajouter méthode de service
SOAP :: RPC :: Pilote pour ajouter méthode de service SOAP, nous pouvons appeler la méthode suivante à titre d'exemple SOAP :: RPC :: Driver:
driver.add_method(name, *paramArg)
Ce qui suit est une description des paramètres:
Paramètres | description |
---|---|
nom | Le nom de la méthode des services Web à distance |
paramArg | Paramètre pour spécifier le programme à distance |
La troisième étape - appelant les services SOAP
Enfin, nous pouvons utiliser SOAP :: RPC :: instance de pilote pour appeler des services SOAP:
result = driver.serviceMethod(paramArg...)
Les services SOAP nom de la méthode de ServiceMethod réels, paramArg pour la liste des paramètres de la méthode.
Exemples
Sur la base des étapes ci-dessus, nous pouvons écrire le client SOAP suivante:
#!/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
Au-dessus de nous introduisons simplement les services Web de Ruby. Si vous voulez en savoir plus vous pouvez consulter le document officiel: le Ruby de Web Services