English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Aplicación de Web Service SOAP en Ruby4R

¿Qué es SOAP?

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 安装

$ 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 服务

$ ruby MyServer.rb &4R 支持两种不同的服务类型:

  • 基于 CGI/FastCGI 服务 (SOAP::RPC::CGIStub)

  • 独立服务 (SOAP::RPC:StandaloneServer)

本教程将为大家介绍如何建立独立的 SOAP 服务。步骤如下:

第1步 - 继承SOAP::RPC::StandaloneServer

为了实现自己的独立的服务器,你需要编写一个新的类,该类为 SOAP::RPC::StandaloneServer 的子类:

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

注意:如果你要编写一个基于FastCGI的服务器,那么你需要继承 SOAP::RPC::CGIStub 类,程序的其余部分将保持不变。

nil - 定义处理方法

接下来我们定义Web Service的方法,如下我们定义两个方法,一个是两个数相加,一个是两个数相除:

class MyServer < SOAP::RPC::StandaloneServer
   .............
 
   # 处理方法
   def add(a, b)
      return a + b
   end
   def div(a, b) 
      return a / b 
   end
end

Paso 3 - 公布处理方法

接下来添加我们在服务器上定义的方法,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参数名和参数模式

为了理解 inoutout 参数,考虑以下服务方法,需要输入两个参数: 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)
])

cuarto paso - abrir el servicio

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
ServerNameel nombre del servicio, puedes elegir el que prefieras
urn:ruby:ServiceNameAquí urn:ruby es fijo, pero puedes darle a tu servicio un nombre único ServiceName
hostnameespecificar el nombre del host
portpuerto del servicio web

Ejemplo en línea

A continuación, crearemos un servicio independiente mediante los siguientes pasos:

Ejemplo en línea

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:}

$ ruby MyServer.rb &4SOAP

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

A continuación, procederemos paso a paso para crear el cliente SOAP para invocar los métodos SOAP anteriores: add, div: - Paso 1

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 SOAPnameSpace
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

nil - Paso 2

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ónNombre del método del servicio web remoto
paramArgEspecificar los parámetros del programa remoto

Paso 3 - Llamar al servicio SOAP

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.

Ejemplo en línea

Basado en los pasos anteriores, podemos escribir lo siguiente: cliente SOAP:

Ejemplo en línea

#!/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