English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Le protocole d'accès aux objets simples (SOAP, abrégé en Simple Object Access Protocol) est une norme 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.
Le protocole d'accès aux objets simples est une norme de protocole pour l'échange de données, c'est un protocole léger, simple et basé sur XML (un sous-ensemble du langage de balisage général standard), conçu pour échanger des informations structurées et figées sur le WEB.
SOAP4R 由Hiroshi Nakamura开发实现,用于 Ruby 的 SOAP 应用。
SOAP4R 下载地址:http://raa.ruby-lang.org/project/soap4r/。
注意:你的ruby环境可能已经安装了该组件。
Linux 环境下你也可以使用 gem 来安装该组件,命令如下:
gem install soap4r --include-dependencies
如果你是window环境下开发,你需要下载zip压缩文件,并通过执行 install.rb 来安装。
SOAP4R 支持两种不同的服务类型:
基于 CGI/FastCGI 服务 (SOAP::RPC::CGIStub)
独立服务 (SOAP::RPC:StandaloneServer)
本教程将为大家介绍如何建立独立的 SOAP 服务。步骤如下:
为了实现自己的独立的服务器,你需要编写一个新的类,该类为 SOAP::RPC::StandaloneServer 的子类:
class MyServer < SOAP::RPC::StandaloneServer ............. end
注意:如果你要编写一个基于FastCGI的服务器,那么你需要继承 SOAP::RPC::CGIStub 类,程序的其余部分将保持不变。
接下来我们定义Web Service的方法,如下我们定义两个方法,一个是两个数相加,一个是两个数相除:
class MyServer < SOAP::RPC::StandaloneServer ............. # 处理方法 def add(a, b) return a + b end def div(a, b) return a / b end end
接下来添加我们在服务器上定义的方法,initialize方法是公开的,用于外部的连接:
class MyServer < SOAP::RPC::StandaloneServer def initialize(*args) add_method(receiver, inoutParam, *paramArg) end end
以下是各参数的说明:
Paramètres | Description |
---|---|
receiver | 包含方法名的方法的对象。 如果你在同一个类中定义服务方法,该参数为 self。 |
methodName | 调用 RPC 请求的方法名。 |
paramArg | 参数名和参数模式 |
为了理解 inout 和 out 参数,考虑以下服务方法,需要输入两个参数: inParam 和 inoutParam,函数执行完成后返回三个值:retVal、inoutParam 、outParam:
def aMeth(inParam, inoutParam) retVal = inParam + inoutParam outParam = inParam . inoutParam inoutParam = inParam * inoutParam return retVal, inoutParam, outParam end
Les méthodes d'appel公开es sont les suivantes :
add_method(self, 'aMeth', [ %w(in inParam), %w(inout inoutParam), %w(out outParam), %w(retval return) ])
Enfin, nous créons une instance de la classe dérivée et appelons la méthode start pour démarrer le service :
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port) myServer.start
Voici les instructions pour les paramètres de la requête :
Paramètres | Description |
---|---|
ServerName | nom du service, vous pouvez choisir celui que vous préférez |
urn:ruby:ServiceName | Ici urn:ruby est fixe, mais vous pouvez donner un nom unique à votre service ServiceName |
hostname | spécifier le nom d'hôte |
port | port du service web |
Ensuite, nous créons un service indépendant à l'aide des étapes suivantes :
require "soap/rpc/standaloneserver" begin class MyServer < SOAP::RPC::StandaloneServer # Expose our service 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, un écouteur a été démarré. 808Le service local sur le port 0, et publie deux méthodes : add et div.
Vous pouvez également exécuter ce service en arrière-plan :
$ ruby MyServer.rb &
Développement d'un client SOAP en Ruby en utilisant la classe SOAP::RPC::Driver. Nous allons examiner en détail l'utilisation de la classe SOAP::RPC::Driver.
Pour appeler le service SOAP, il faut les informations suivantes :
Adresse URL du service SOAP (SOAP Endpoint URL)
Espace de nom de la méthode de service (URI du namespace de méthode)
Nom de la méthode de service et informations sur les paramètres
Nous allons maintenant créer étape par étape le client SOAP pour appeler les méthodes SOAP suivantes : add, div :
Nous pouvons appeler le nouveau méthode de la classe SOAP::RPC::Driver en la créant par exemple, comme suit :
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
Voici la description des paramètres :
Paramètres | Description |
---|---|
endPoint | Adresse URL du service SOAP |
nameSpace | L'espace de nom pour tous les RPC de l'objet SOAP::RPC::Driver. |
soapAction | Valeur du champ SOAPAction pour l'en-tête HTTP. Si c'est une chaîne vide "", il est par défaut nil |
Pour ajouter une méthode de service SOAP à SOAP::RPC::Driver, nous pouvons appeler la méthode suivante par exemple SOAP::RPC::Driver :
driver.add_method(name, *paramArg)
Voici la description des paramètres :
Paramètres | Description |
---|---|
nom | Nom de la méthode du service web distant |
paramArg | Spécifier les paramètres du programme distant |
Nous pouvons utiliser l'exemple 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, paramArg est la liste des arguments de la méthode.
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
Nous avons simplement introduit le Web Service Ruby dans cet article. Si vous souhaitez en savoir plus, vous pouvez consulter la documentation officielle :Web Service Ruby