English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
El Protocolo de Acceso a Objetos Simples (SOAP, abreviado como Simple Object Access Protocol) es una especificación de protocolo para intercambio de datos.
SOAP es un protocolo simple basado en XML que permite a las aplicaciones intercambiar información a través de HTTP.
El Protocolo de Acceso a Objetos Simples (SOAP) es una especificación de protocolo para intercambio de datos, es un protocolo ligero, simple y basado en XML (un subconjunto del Lenguaje de Marcado Generalmente Utilizado), diseñado para intercambiar información estructurada y fija en la WEB.
$ ruby MyServer.rb &4R 由Hiroshi Nakamura开发实现,用于 Ruby 的 SOAP 应用。
$ ruby MyServer.rb &4R 下载地址:http://raa.ruby-lang.org/project/soap4r/。
注意:你的ruby环境可能已经安装了该组件。
Linux 环境下你也可以使用 gem 来安装该组件,命令如下:
gem install soap4r --include-dependencies
如果你是window环境下开发,你需要下载zip压缩文件,并通过执行 install.rb 来安装。
$ ruby MyServer.rb &4R 支持两种不同的服务类型:
基于 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, *driver.add_method(name, end end
以下是各参数的说明:
A continuación, se describe la explicación de los parámetros: | Parámetros |
---|---|
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
Los métodos de invocación públicos son los siguientes:
add_method(self, 'aMeth', [ %w(in inParam), %w(inout inoutParam), %w(out outParam), %w(retval return) ])
Finalmente, mediante la creación de una instancia de la clase derivada y la invocación del método start, iniciamos el servicio:
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port) myServer.start
A continuación, se explica la descripción de los parámetros de la solicitud:
A continuación, se describe la explicación de los parámetros: | Parámetros |
---|---|
ServerName | el nombre del servicio, puedes elegir el que prefieras |
urn:ruby:ServiceName | Aquí urn:ruby es fijo, pero puedes darle a tu servicio un nombre único ServiceName |
hostname | especificar el nombre del host |
port | puerto del servicio web |
A continuación, crearemos un servicio independiente mediante los siguientes pasos:
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
Después de ejecutar el programa anterior, se ha iniciado una escucha 808El servicio local del puerto 0, y publica dos métodos: add y div.
你可以再后台执行以上服务:
Puedes ejecutar este servicio en segundo plano:}
Cliente R
Desarrollar clientes SOAP en ruby utilizando la clase SOAP::RPC::Driver. A continuación, veremos en detalle el uso de la clase SOAP::RPC::Driver.
Para invocar el servicio SOAP se necesitan los siguientes datos:
Dirección URL del punto de conexión del servicio SOAP (SOAP Endpoint URL)
El espacio de nombres del método del servicio (URI del Namespace del Método)
Nombre del método del servicio y información de parámetros
Crear ejemplo de SOAP Driver
Podemos invocar el nuevo método de la clase SOAP::RPC::Driver mediante la instancia de ejemplo, como se muestra a continuación:
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
A continuación, se describe la explicación de los parámetros: | Parámetros |
---|---|
A continuación, se describe la explicación de los parámetros: | endPoint |
La dirección URL del punto de conexión del servicio SOAP | nameSpace |
El nombre del espacio se usa para todos los RPC del objeto SOAP::RPC::Driver. | soapAction Usado como valor del campo SOAPAction en la cabecera HTTP. Si es una cadena vacía "", se usa el valor predeterminado |
Agregar método de servicio
Agregar el método del servicio SOAP para SOAP::RPC::Driver, podemos invocar el siguiente método a través del ejemplo SOAP::RPC::Driver: *driver.add_method(name,
paramArg)
A continuación, se describe la explicación de los parámetros: | Parámetros |
---|---|
Descripción | Nombre del método del servicio web remoto |
paramArg | Especificar los parámetros del programa remoto |
Finalmente, podemos usar el ejemplo de SOAP::RPC::Driver para invocar el servicio SOAP:
result = driver.serviceMethod(paramArg...)
serviceMethod es el nombre real del método del servicio SOAP, paramArg es la lista de argumentos del método.
Basado en los pasos anteriores, podemos escribir lo siguiente: cliente SOAP:
#!/usr/bin/ruby -w require 'soap'/rpc/driver' NAMESPACE = 'urn:ruby:calculation' URL = 'http://localhost:8080/' begin driver = SOAP::RPC::Driver.new(URL, NAMESPACE) # Añadir métodos de servicio remoto driver.add_method('add', 'a', 'b') # Llamar métodos de servicio remoto puts driver.add(20, 30) rescue => err puts err.message end
Aquí solo hemos presentado una introducción simple a los servicios web de Ruby. Si desea obtener más información, consulte la documentación oficial:Servicios web de Ruby