PDF de programación - Introducción a los Servicios web

Imágen de pdf Introducción a los Servicios web

Introducción a los Servicios webgráfica de visualizaciones

Actualizado el 10 de Abril del 2020 (Publicado el 13 de Noviembre del 2017)
767 visualizaciones desde el 13 de Noviembre del 2017
474,9 KB
18 paginas
Creado hace 15a (15/01/2009)
1. Introducción a los Servicios web

Los servicios web son un tipo de middleware mediante el que pueden comunicarse
aplicaciones remotas. En esencia, funciona como cualquier otro tipo de middleware
(rmi, CORBA…), pero con la diferencia importante de que la los mensajes que se
envían y se reciben se adhieren a un protocolo estandarizado llamado SOAP (Simple
Object Access Protocol). Tanto la llamada al servicio remoto como la respuesta se
codifican en SOAP y se transportan, normalmente, mediante http.

Todos los protocolos de mensajería pueden verse como en la siguiente figura, que
muestra dos máquinas cualesquiera que se comunican: cuando A desea enviarle un
mensaje a B, prepara el mensaje en un formato equivalente al que espera B, y lo envía.
En la figura, CA representa el elemento de A que codifica el mensaje, mientras que EB
representa el elemento de B por el que ésta escucha. Este modelo es válido para rmi,
CORBA, servicios web o incluso para un protocolo de mensajería que nos inventemos
nosotros y que podríamos implementar mediante sockets: lo único que tendríamos que
hacer es ponernos de acuerdo en el formato de los mensajes que queremos enviar desde
A hasta B y desde B hasta A, y luego implementar el mecanismo de codificación y
descodificación.

Máquina A

CA

petición

EB

Máquina B



Figura 1. Dos máquinas se comunican mediante algún protocolo de mensajería

En lugar de reinventar la rueda se ha propuesto SOAP, un protocolo de mensajería
basado en XML: así, la llamada a una operación ofrecida por un servidor consiste
realmente en la transmisión de un mensaje SOAP, el resultado devuelto es otro mensaje
SOAP, etc. De este modo, el cliente puede estar construido en Java y el servidor en
.NET, pero ambos conseguirán comunicarse gracias a la estructura de los mensajes que
intercambian.

Por otro lado, los servidores ofrecen, a sus posibles clientes, una lista con los
servicios web que ofrecen, describiéndolos también un lenguaje estandarizado llamado
WSDL (Web Services Description Language), que es una representación en XML de los
servicios ofrecidos. Así, un cliente puede conocer los métodos ofrecidos por el servidor,

Macario Polo Usaola
Escuela Superior de Informática - UCLM

1

sus parámetros con sus tipos, etc., simplemente consultando el correspondiente
documento WSDL.

1.01 WSDL
Supongamos que un sistema de gestión bancario utiliza, para validar las

operaciones realizadas con tarjeta de crédito, el siguiente método remoto:

public boolean validar(String numeroDeTarjeta, double importe)
Si este método es accesible como un servicio web, debe estar descrito en WSDL,

por ejemplo, del siguiente modo:
<?xml version="1.0" encoding="UTF-8" ?>
- <!-- Generated by the Oracle9i JDeveloper Web Services WSDL Generator -->
- <definitions name="VisaWS" targetNamespace="http://visa/dominio/Visa.wsdl"

xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://visa/dominio/Visa.wsdl"
xmlns:ns1="http://visa.dominio/IVisaWS.xsd">
<schema targetNamespace="http://visa.dominio/IVisaWS.xsd"

- <types>

xmlns="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-
ENC="http://schemas.xmlsoap.org/soap/encoding/" />

</types>
- <message name="validar0Request">

<part name="numeroDeTarjeta" type="xsd:string" />
<part name="importe" type="xsd:double" />

</message>
- <message name="validar0Response">
</message>
- <portType name="VisaPortType">

<part name="return" type="xsd:boolean" />

- <operation name="validar">

<input name="validar0Request" message="tns:validar0Request" />
<output name="validar0Response" message="tns:validar0Response" />

</operation>

</portType>
- <binding name="VisaBinding" type="tns:VisaPortType">

<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- <operation name="validar">

<soap:operation soapAction="" style="rpc" />
- <input name="validar0Request">

<soap:body use="encoded" namespace="VisaWS"

</input>
- <output name="validar0Response">

<soap:body use="encoded" namespace="VisaWS"

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

</output>
</operation>

</binding>
- <service name="VisaWS">

<soap:address location="" />

- <port name="VisaPort" binding="tns:VisaBinding">
</port>
</service>
</definitions>


Figura 2. Descripción en WSDL del método de validación anterior

Macario Polo Usaola
Escuela Superior de Informática - UCLM

2

De la figura anterior merece la pena destacar algunos elementos:

- <message name="validar0Request">
<part name="numeroDeTarjeta"
<part name="importe" type="xsd:double" />

type="xsd:string" />

</message>

- <message name="validar0Response">

<part name="return" type="xsd:boolean" />

</message>

- <portType name="VisaPortType">

- <operation name="validar">

<input name="validar0Request"
<output name="validar0Response"

message="tns:validar0Request" />

message="tns:validar0Response" />

</operation>

</portType>

Nombre del método accesible de forma
remota, nombres y tipos de los
parámetros. El postfijo Request denota el
formato en que debe enviarse la solicitud
al servidor. Cuando el cliente invoca el
servicio, envía un mensaje
validar0Request.
Tipo del resultado devuelto por el
método. El postfijo Response se refiere
precisamente a que es el tipo devuelto lo
que se está representando.
Operaciones que conforman la interfaz
del servicio validar, que se corresponden
con los dos messages anteriores.

Figura 3. Significado de algunos elementos del WSDL mostrado en la figura anterior

Los entornos de desarrollo recientes incluyen los add-ins necesarios para generar la

especificación WSDL de una clase.

1.02 Escritura de un cliente que acceda a un servicio web
El cliente que utiliza el servicio web necesita una clase que actúe como proxy entre
él mismo y el servicio web ofertado por el servidor (en la Figura 1, correspondería al
elemento CA). Cuando el proxy recibe del cliente una solicitud de llamada al servicio
web, el proxy la traduce a un mensaje SOAP, que envía al servidor; éste, entonces, lo
ejecuta, y devuelve un mensaje SOAP al proxy; éste, entonces, traduce el mensaje a
objetos Java, .NET, etc. y entrega el resultado al cliente que efectuó la petición.

La siguiente figura muestra la relación entre el proxy, el servicio web y la clase que
lo implementa: el servicio web (en el centro) ofrece a los clientes acceso a la operación
validar(String, Double); la operación se encuentra realmente implementada en la clase
situada abajo (Visa), y podría incluir llamadas a otros métodos de otras clases, acceso a
una base de datos, acceso a otros servicios web, etc. El elemento de la izquierda
(VisaWSStub) es la clase que actúa de proxy entre los clientes y el servicio web. Nótese
que esta clase incluye, además de otras, la operación validar(String, Double). El proxy
mostrado se ha obtenido de forma automática con un entorno de desarrollo, por lo que
sus miembros pueden variar de unos casos a otros. El atributo _endpoint representa la
URL en la que se encuentra publicado el servicio web.

Macario Polo Usaola
Escuela Superior de Informática - UCLM

3

Figura 4. El proxy, el servicio web y la clase que lo implementa

La aplicación cliente hace entonces uso del proxy para acceder al servicio web, por



ejemplo con un trozo de código como el que sigue:
protected void validarDisponibilidadDeCredito(double importe)
{

VisaWSStub stub = new VisaWSStub();

stub.setEndpoint("http://161.67.27.108:8988/soap/servlet/soaprouter");

if (!stub.validar("", new Double(5.0)).booleanValue())
throw new Exception("Operación no admitida");
}

// Se intancia el proxy
// Se le dice al proxy dónde puede encontrar el servicio web
// Se llama al método ofertado por el proxy

throws Exception


Obsérvese que el tipo del segundo parámetro de la llamada a validar es de tipo
Double (con mayúsculas) y no double (con minúsculas), a pesar de que el método toma
un double en la clase en la que se encuentra implementado. Esto es así porque el
generador del proxy ha optado por incluir aquel tipo de dato en lugar de éste.

Cuando el tipo de un parámetro o del resultado es un tipo complejo, es preciso
realizar una descripción del tipo (o de la clase) en el documento WSDL. Supongamos
que la clase Visa ofrece la siguiente operación:

public dominio.Tarjeta getTarjetaConMayorCredito()
La clase dominio.Tarjeta es un tipo complejo y debe especificarse en el documento
que describe el servicio web. El entorno de desarrollo es capaz de añadir al WSDL la
descripción estandarizada de esta clase:
<?xml version="1.0" encoding="UTF-8" ?>
- <!--
Generated by the Oracle9i JDeveloper Web Services WSDL Generator
-->

Macario Polo Usaola
Escuela Superior de Informática - UCLM

4

- <!--
Date Created: Thu Apr 22 18:00:42 CEST 2004
-->
- <definitions name="VisaWS" targetNamespace="http://visa/dominio/Visa.wsdl"

xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://visa/dominio/Visa.wsdl"
xmlns:ns1="http://visa.dominio/IVisaWS.xsd">

- <types>

- <schema targetNamespace="http://visa.dominio/IVisaWS.xsd"

xmlns="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-
ENC="http://schemas.xmlsoap.org/soap/encoding/">

- <complexType name="dominio_Tarjeta" jdev:packageName="dominio"
xmlns:jdev="http://xmlns.oracle.com/jdeveloper/webservices
  • Links de descarga
http://lwp-l.com/pdf7487

Comentarios de: Introducción a los Servicios web (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad