Aplicación Ruby Web Service - SOAP4R
¿Qué es SOAP?
El Protocolo Simple de Acceso a Objetos (SOAP, por sus siglas en inglés Simple Object Access Protocol) es una especificación de protocolo para el 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 Simple de Acceso a Objetos es una especificación de protocolo para el intercambio de datos; es un protocolo ligero, simple y basado en XML (un subconjunto del Lenguaje de Marcado Generalizado Estándar), diseñado para intercambiar información estructurada y fija en la WEB.
Para más tutoriales sobre SOAP, consulta:http://www.w3cschool.cc/soap/soap-tutorial.html。
Instalación de SOAP4R
SOAP4R fue desarrollado e implementado por Hiroshi Nakamura para aplicaciones SOAP en Ruby.
Dirección de descarga de SOAP4R:http://raa.ruby-lang.org/project/soap4r/。
Nota:Es posible que tu entorno Ruby ya tenga instalado este componente.
En el entorno Linux, también puedes usar gem para instalar este componente, el comando es el siguiente:
Si desarrollas en un entorno Windows, necesitas descargar el archivo comprimido zip e instalarlo ejecutando install.rb.
Servicios SOAP4R
SOAP4R admite dos tipos diferentes de servicios:
- Servicios basados en CGI/FastCGI (SOAP::RPC::CGIStub)
- Servicio independiente (SOAP::RPC:StandaloneServer)
Este tutorial le mostrará cómo crear un servicio SOAP independiente. Los pasos son los siguientes:
Paso 1 - Heredar de SOAP::RPC::StandaloneServer
Para implementar tu propio servidor independiente, necesitas escribir una nueva clase que sea subclase de SOAP::RPC::StandaloneServer:
Nota:Si vas a escribir un servidor basado en FastCGI, entonces necesitas heredar de la clase SOAP::RPC::CGIStub; el resto del programa permanecerá igual.
Paso 2 - Definir los métodos de manejo
A continuación definimos los métodos del Web Service; como se muestra, definimos dos métodos: uno suma dos números y el otro divide dos números:
Paso 3 - Publicar los métodos de manejo
A continuación, agrega los métodos que definimos en el servidor; el método initialize es público y se utiliza para la conexión externa:
A continuación se explica cada parámetro:
| Parámetro | Descripción |
|---|---|
| receiver | El objeto del método que contiene el nombre del método. Si defines los métodos de servicio en la misma clase, este parámetro esself。 |
| methodName | El nombre del método para la llamada de solicitud RPC. |
| paramArg | Nombres de parámetros y modos de parámetros |
Para entenderinoutyoutlos parámetros, considera el siguiente método de servicio, que requiere dos parámetros de entrada: inParam e inoutParam; una vez que la función se haya ejecutado, devuelve tres valores: retVal, inoutParam y outParam:
El método de llamada público es el siguiente:
Paso 4 - Iniciar el servicio
Finalmente, instanciamos la clase derivada y llamamos al método start para iniciar el servicio:
A continuación se explican los parámetros de la solicitud:
| Parámetro | Descripción |
|---|---|
| ServerName | El nombre del servicio; puedes ponerle el que prefieras. |
| urn:ruby:ServiceName | Here urn:rubyes fijo, pero puedes darle a tu servicio un nombre único.ServiceName |
| hostname | Especifica el nombre del host |
| port | Puerto del servicio web |
Ejemplo
A continuación, siguiendo los pasos anteriores, creamos un servicio independiente:
Ejemplo
Después de ejecutar el programa anterior, se inicia un servicio local que escucha en el puerto 8080 y expone dos métodos: add y div.
Puedes ejecutar el servicio anterior en segundo plano:
$ ruby MyServer.rb &
Cliente SOAP4R
En Ruby se utiliza la clase SOAP::RPC::Driver para desarrollar clientes SOAP. A continuación, veremos en detalle el uso de la clase SOAP::RPC::Driver.
Para llamar a un servicio SOAP se necesita la siguiente información:
- Dirección URL del servicio SOAP (SOAP Endpoint URL)
- Espacio de nombres del método de servicio (Method Namespace URI)
- Nombre del método de servicio e información de los parámetros
A continuación, crearemos paso a paso un cliente SOAP para llamar a los métodos SOAP anteriores: add y div:
Paso 1 - Crear una instancia de SOAP Driver
Podemos instanciar la clase SOAP::RPC::Driver para llamar a su nuevo método, como se muestra a continuación:
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
A continuación se describen los parámetros:
| Parámetro | Descripción |
|---|---|
| endPoint | Dirección URL para conectarse al servicio SOAP |
| nameSpace | El espacio de nombres se utiliza para todas las RPC del objeto SOAP::RPC::Driver. |
| soapAction | Valor del campo SOAPAction para la cabecera HTTP. Si la cadena es "", por defecto esnil |
Paso 2 - Agregar métodos de servicio
Para agregar métodos de servicio SOAP a SOAP::RPC::Driver, podemos llamar al siguiente método mediante una instancia de SOAP::RPC::Driver:
driver.add_method(name, *paramArg)
A continuación se explican los parámetros:
| Parámetro | Descripción |
|---|---|
| name | El nombre del método del servicio web remoto |
| paramArg | Especifica los parámetros del programa remoto |
Paso 3 - Llamar al servicio SOAP
Finalmente, podemos usar una instancia de SOAP::RPC::Driver para llamar al servicio SOAP:
result = driver.serviceMethod(paramArg...)
serviceMethod es el nombre real del método del servicio SOAP, y paramArg es la lista de parámetros del método.
Ejemplo
Basándonos en los pasos anteriores, podemos escribir el siguiente cliente SOAP:
Ejemplo
Arriba solo hemos hecho una breve introducción al Web Service de Ruby. Si deseas obtener más información, puedes consultar la documentación oficial:Web Service de Ruby
Otras extensiones