Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Servicios web
F. García-Carballeira, Mª. Soledad Escolar,
Luis Miguel Sá nchez, Fco. Javier García
Sistemas Distribuidos
Grado en Ingeniería Informá tica
Universidad Carlos III de Madrid
C on ten ido
Protocolo H T T P
C lientes y servidores
web
Tipos de páginas web
Servicios web
Principios básicos de
diseño
SOAP
Entornos de desarrollo
gSOAP
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 2
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Introducció n
Elementos que conforman la World Wide
Web (WWW):
Documentos hipertexto
Protocolo HTTP
Lenguaje HTML
Servidor W eb
Navegadores
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 3
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Protocolo HTTP
HyperText Transfer Protocol se usa en W W W para
transferir hipertexto (páginas HTML con hiperenlaces)
Usa el puerto T C P 80 para aceptar conexiones entrantes
Se basa en el paradigma cliente-servidor
Servidor web Cliente web
Elementos solicitud:
solicitud - <mandato> <dirección documento> <versión HTTP
>
- cabecera opcional
- datos opcionales
respuesta Elementos respuesta:
- línea de estado con formato <protocolo><códigos
estado><descripción>
- información de cabecera
- documento.
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 4
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Protocolo HTTP: petició n
Se establece una conexión al host al puerto 80
Línea de petición:
<Método><espacio><URI solicitado><espacio><protocolo>\r\n
Donde método:
GET: solicita una página W EB
HEAD solicita la cabecera de una página
: W eb envía datos a una aplicación
POST: W eb solicita almacenar una página
PUT: web
dode U RI (Uniform Resource
URL
Identifier) Uniform Resource
URN Locator Uniform
Resource N ame
donde
protocolo
HTTP/0.9
HTTP/1.0
HTTP/1.1
HTTP/1.2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 5
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Protocolo HTTP: respuesta
C ontenido de la respuesta:
<protocolo> <código>
<cabeceras>
<recurso>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 7
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Protocolo HTTP: servidor
C ontenido de la
respuesta:
HTTP/1.1 200 OK Línea
Date: Sat, 15 Sep 2001 06:55:30 GMT
Server: Apache/1.3.9 (Unix) ApacheJServ/1.0
Last-Modified: Mon, 30 Apr 2001 23:02:36 GMT
ETag: "5b381-ec-3aedef0c"
Accept-Ranges: bytes Cabeceras
Content-Length: 236
Connection: close
Content-Type: text/html
<html>
<head>
<title>My web page </title>
</head>
<body>
Recurso
Hello world!
</BODY></HTML>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 8
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Servidores HTTP
Fuente:
netcraft.com
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 9
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Navegadores web (clientes)
Fuente:
en.wikipedia.org/wiki/Usage_share_of_web_browsers
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 10
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Tipos de pá ginas W E B
Páginas web estáticas
Páginas web dinámicas
Ejecutadas en el cliente
JavaScript
Applet
Ejecutadas en el servidor
C GI (Common Gateway
Interface)
PHP
ASP
Servlet
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 11
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
C G I ( Common G a te wa y Interface)
Programa C GI puede escribirse en:
Lenguajes de programación: C, Ada, C++,
Fortran.
Lenguaje de script: Perl, Tkl, Python.
Máquina Servidor
Servidor HTTP Máquina Cliente
Script CGI
Cliente WEB
Solicitud de hello.html
Contenidos de hello.html
Solicitud de hello.cgi
Datos del cliente
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 12
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Evolució n de la Web
HTML, XML
HTML HTML
HTML, XML
Acceso Aplicaciones
Web
Empleados
Clientes
? Otras
aplicaciones
Datos Aplicaciones
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 14
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Servicios Web
Idea: Adaptar el modelo de programación web (débilmente
acoplado) para su uso en aplicaciones no basadas en navegador
El objetivo es ofrecer una plataforma para construir aplicaciones
distribuidas utilizando un software que enmascare la
heterogenidad
Un servicio web es una colección de protocolos y estándares
abiertos que sirven para intercambiar datos entre aplicaciones:
Escritas en distintos lenguajes de programación
Ejecutan en distintos sistemas operativos y arquitecturas
Desarrolladas de manera independiente
Los servicios web son independientes de la aplicación que los usa
Estandarización controlada por un grupo del W3C:
http://www.w3.org/2002/ws/
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 15
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Otras definiciones
The W3C defines a web service as a software
system designed to support interoperable
Machine to Machine interaction over the
network
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 16
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ventajas e inconvenientes
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 17
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Interfaz y operaciones
Una interfaz de servicio web consta de un
conjunto de operaciones que pueden ser accedidas
por un cliente en Internet
Los servicios web no son específicos de HTTP
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 18
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Principios bá sicos de diseñ o
Interoperabilidad en entornos
heterogéneos
Patrones de comunicación
Independencia del modelo de
programación
Representación de los mensajes
C ombinación de servicios W eb
Referencias de servicios
Activación de servicios
Transparencia
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 19
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Interoperabilidad en entornos heterogé neos
Servicios basados en protocolos abiertos y
estándar
Protocolo del nivel de aplicación para la transferencia
de mensajes (ej. HTTP)
SOAP: empaqueta la información y la transmite entre
el cliente y el proveedor del servicio
XML: describe la información, los mensajes
U D D I: lista de servicios disponibles
WSDL: descripción del servicio (lenguaje de interfaz)
Ventajas:
Paso de cortafuegos
Difícil en otros entornos como Java RMI o C O RBA
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 20
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Está ndares empleados
Aplicaciones
Servicios de directorio Seguridad
SOAP
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 21
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Diferentes patrones de comunicació n
Patrón petición-respuesta
síncrono
Modelos basados en RPC
Mensajes asíncronos
Mensajería
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 22
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Independencia del modelo de programació n
Servicios Web ofrecen un modelo de computación
en Internet
Independencia del lenguaje de programación
Independencia del modelo de programación
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 23
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Representació n de mensajes
Mensajes SO A P y datos representados en
X ML
XM
L
Aplicación 1 Aplicación 2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 24
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
X ML
eXtensible Markup Language (XML)
D efinido por W 3C (www.w3c.org)
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 26
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
S O AP
SOAP especifica:
C ómo representar los m ensajes de texto en X ML
Cómo combinar mensajes S O A P para un modelo
petición- respuesta
Cómo procesar los elementos de los mensajes
Cómo utilizar el protocolo de aplicación (HTTP,
SMTP,
… ) para enviar mensajes SO AP
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 27
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Nodo S OA P
Nodo que transmite, recibe, procesa y responde
un mensaje SO AP
Emisor SOAP
Receptor SO AP
Intermediario
I
E R
I I
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 28
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Mensaje S OA P
U nidad básica de
comunicación
entre dos nodos SO AP
El mensaje es transportado en
un
envelope
Encabezado opcional (header)
Cuerpo (body)
http://es.wikipedia.org/wiki/Simple_Object_Access_Protocol
Los elementos X ML anteriores
son definidos como un
esquema en el espacio de
nombres X ML
Esquema definido en www.w3.or
g
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 29
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Encabezado (header)
Elemento opcional
Incluye información de control
Identificador de transacción para su uso con un servicio
de transacciones
Un identificador de mensajes para relacionar mensajes entre
sí (Los servicios son autónomos e independientes entre sí)
Un nombre de usuario, una clave pública, etc.
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 30
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Cuerpo (Body)
Elemento obligatorio
En el elemento body se incluye:
Mensaje
Referencia al esquema X ML que describe el
servicio
Comunicación cliente-servidor
El elemento body contiene una petición o una
respuesta
Basada en RPC
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 31
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo: S OA P request
PO ST / engelen/calcserver.cgi línea de peticion
H T T P/1.1 H ost: websrv.cs.fsu.edu
C abeceras HTTP
U ser-A gent: gSO A P/2.7
Cabecera
C ontent-Type: text/xm l;
HTTP
charset=utf-8 C ontent-Length: 464
C onnection:
close
SO A PA ction: " "
<?xml version="1.0" encoding="UTF-8"?> SOAP Envelope
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" C abeceras SO AP
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/
" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Cuerpo HTTP
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:c="urn:calc"> Cuerpo SOAP
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/
">
<c:add>
<a>1</a>
<b>2</b>
</c:add>
</SOAP-ENV:Body>
</SOAP-
ENV:Envelope>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 32
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo: S OA P response
H T T P/1.1 200 O K línea de respuesta
D ate:W ed, 05 M ay 2010 16:02:21
C abeceras HTTP
GMT
Cabecera
Server:A pache/2.0.52 (Scientific
HTTP
Linux) C ontent-Length: 463
C onnection: close
C ontent-Type: text/xm l; charset=utf-
8
<?xml version="1.0" encoding="UTF-8"?> SOAP Envelope
<SOAP-ENV:Envelope C abeceras
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SO AP
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/
Cuerpo HTTP
" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="urn:calc">
Cuerpo SOAP
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/
">
<ns:addResponse>
<result>3</result>
</ns:addResponse>
</SOAP-ENV:Body>
</SOAP-
ENV:Envelope>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 33
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Identificació n de servicios
Cada servicio Web contiene una URI (Uniform
Resource Identifier) que identifica unívocamente un
recurso
U RL (Uniform Resource Locator)
Especificado en RFC 1630, 1738, 1808
Incluyen la localización del recurso
El formato general de una URL es:
esquema://máquina[:puerto]/directorio/archivo
Ejemplo: http://www.arcos.inf.uc3m.es/~infosd
U RN (Uniform Resource N ame)
Especificado en RFC 2141
N ombres de recursos que no incluyen su localización
<URN > ::= "urn:" <N ID > ":" <N SS>
Ejemplo: urn:issn:0167-6423
Los clientes usan la URI Mª.para
F. García-Carballeira, referenciar
Soledad Escolar, Luis Miguel Sánchez,el servicio
Fco. Javier García 34
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Activació n de servicios
Tipos de activación
El servicio web se activa bajo demanda
El servicio web ejecuta continuamente
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 35
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Combinació n de servicios Web
Fuente: www.w3c.es
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 36
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Empleo de servicios Web
Uso directo de SO AP y X ML tanto en clientes
como servidores
Dificultad de uso
Uso a través de un A PI que oculta los detalles
del SO AP y del X ML
Más sencillo
Formas de invocación:
Invocación estática mediante un proxy o stub
Invocación dinámica: operación genérica que convierte
la llamada y los argumentos a SO AP y X ML
dinámicamente
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 37
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
WS D L
Web Services Description Language
Lenguaje de descripción de interfaz (IDL) para servicios Web en
XML
Describe el protocolo de aplicación
Intercambio de los mensajes
Formato de los mensajes
W SDL es un documento escrito en X ML
Se utiliza para:
D escribir servicios Web
Localizar servicios Web
WSDL todavía no es un estándar del W3C (draft)
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 38
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Descripció n de servicios web
D escribir el servicio W eb
Especificar la localización del servicio
Especificar las operaciones y métodos del servicio
web
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 39
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo: generació n de có digo
El servicio da lugar a:
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 40
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
E jem plo
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="
http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.dataaccess.com/webservicesserver/"
name="Conversions" targetNamespace="http://www.dataaccess.com/webservicesserver/">
<types>
<xs:schema elementFormDefault="qualified" targetNamespace="http://www.dataaccess.com/webservicesserver/">
<xs:element name="NumberToWords">
<xs:complexType>
<xs:sequence>
<xs:element name="ubiNum" type="xs:unsignedLong"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="NumberToWordsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="NumberToWordsResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 41
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
E jem plo
<message name="NumberToWordsSoapRequest">
<part name="parameters" element="tns:N umberToW ords"/>
</message>
<message name="NumberToWordsSoapResponse">
<part name="parameters" element="tns:NumberToWordsResponse"/>
</message>
<portType name="ConversionsSoapType">
<operation name="N umberToW ords">
<documentation>Returns the word corresponding to the positive number passed as parameter. Limited to
quadrillions.</documentation>
<input message="tns:NumberToWordsSoapRequest"/>
<output message="tns:NumberToWordsSoapResponse"/>
</operation>
</portType>
<binding name="ConversionsSoapBinding" type="tns:ConversionsSoapType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="N umberToW ords">
<soap:operation soapAction="" style="document"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="C onversions">
<documentation>The Conversion Visual DataFlex Web Service will provide different conversion functions. The function currently available will help you converting numbers
intowords.</documentation>
<port name="ConversionsSoap" binding="tns:ConversionsSoapBinding">
<soap:address location="http://www.dataaccess.com/webservicesserver/conversions.wso"/>
</port>
</service>
</definitions>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 42
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Estructura de u n documento W SD L
<definitions>
<types>
definición de tipos (independientes del lenguajes)
</types>
<message>
definición de mensajes (a intercambiar)
</message>
<portType>
definición de puertos (interfaz de funciones, incluyendo parámetros, etc.)
</portType>
<binding>
definición de enlaces (formato de los mensajes y datos a usar)
</binding>
<services>
definición de servicios (nombre de servicio y 1 ó más puertos donde se da)
</services>
</definitions>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 43
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
E lem entos
Types: tipos independientes del lenguaje
M essages: tipos de mensajes a intercambiar
PortTypes (interfaz): define la interfaz de funciones (nombre de
la operación, parámetros de entrada, parámetros de salida)
Bindings: especifica el formato de los mensajes y de los datos a
ser utilizados.
Services: especifica el nombre del servicio y uno o más sitios
(puertos)
donde encontrar el servicio..
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 44
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Espacios de nombres (namespaces)
Objetivo: evitar conflictos
Dos servicios web distintos A y B que tienen un
elemento común f
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 45
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
UDDI
Universal Description, Discovery, and
Integration
N o estándar: Propuesta inicial de Microsoft, IBM y
Ariba
C atálogo de negocios de Internet
Registro distribuido de servicios web ofrecidos por
empresas
Información clasificada en 3 categorías (guías):
Páginas blancas: D atos de la empresa
Páginas amarillas: Clasificación por tipo de actividades
Páginas verdes: Descripción de servicios web (WSDL)
Se accede a su vez como un servicio web
Puede consultarse en tiempo de desarrollo o
incluso dinámicamente en tiempo de ejecución
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 46
Permite búsquedas por distintos criterios
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
cliente servicio
Respuesta SOAP
Proveedor de servicio
4
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 47
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo: Serializació n de Mensajes
<ObtenerPrecio>
<item>mesa</item>
</ObtenerPrecio>
float precio;
precio=
ObtenerPre
cio(mesa)
<ObtenerPrecioResponse>
<precio>134.5</precio>
</ObtenerPrecioResponse>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 48
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo: mensajes X M L
Ej: float
ObtenerPrecio(string item);
Petición: Esquema:
<ObtenerPrecio> <element name=“ObtenerPrecio">
<item>mesa</item> <complexType><all>
</ <element name=“item" type="string"/>
ObtenerPrecio> </all></complexType>
</element>
<element name=“ObtenerPrecioResponse">
Respuesta: <complexType><all>
<ObtenerPrecioResponse> <element name=“Precio"
<Precio>134.5</Precio> type="float"/>
</ObtenerPrecioResponse> </all></complexType>
</element>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 49
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo de petició n/respuesta
POST /StockQuote HTTP/1.1
......................
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
Petición
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:ObtenerPrecio
xmlns:m="
http://example.com/
stockquote.xsd
">
<item>mesa</
item>
</m:ObtenerPrecio>
</SOAP-ENV:Body>
</SOAP-
Respuesta
ENV:Envelope>
HTTP/1.1 200 OK
...............
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:ObtenerPrecioRe
sponse xmlns:m=" F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 50
Este obra está http://example.com/s
bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
tockquote.xsd
">
Transporte de mensajes S OA P
Protocolo H T T P
Estilo RPC :
Petición: método P O S T
Respuesta: respuesta al PO ST
Protocolo S M T P
Simple Mail Transfer Protocol es un protocolo de
transferencia de correo en Internet (RFC 2821)
La especificación indica cómo encapsular mensajes SOAP
en mensajes SMTP
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 51
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Desarrollo de u n servicio web
Programación de biblioteca de servicio
En algunos entornos hay que incluir información específica
En VisualStudio .N et: etiqueta [WebMethod] sobre métodos
exportados
Desarrollo de cliente:
Obtener fichero WSDL y generar proxy para aplicación cliente
En VisualStudio .N et:“Add Web Reference”
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 52
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplos de servicios web
Google: http://www.google.com/apis
Para aplicaciones que relizan búsquedas en
Internet
Amazon:
http://simplest-shop.com/camera
Mapquest
UPS, Fedex, etc.
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 53
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Otros enlaces de interé s
Main Page http://www.w3.org/
UD D I Page http://www.uddi.org/
Cursos sobre SOAP,WSDL y otras tecnologías
web:
http://www.w3schools.com/
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 54
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Entornos de desarrollo
N úmero creciente de entornos de
desarrollo
Algunas implementaciones de interés:
gSOA P
.N et de Microsoft
W eb Services Project de Apache
Java W eb Services Developer Pack
IBM W ebSphere SD K for W eb services
(W SD K )
W ASP de Systinet
JOnAS
AXIS
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 55
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
gS O AP
gSOAP: Generator Tools for Coding SOAP/XML Web Services in C
and C++ (Robert van Engelen, University of Florida)
http://www.cs.fsu.edu/~engelen/soap.html
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 56
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Carcterísticas de gSOAP
Conversión SOAPC/C++
Independiente de la plataforma
Inicialmente pensado para C++, soporta el desarrollo
de aplicaciones escritas en C
Soporta el desarrollo de aplicaciones stand-alone
multithread
Tolerancia a fallos
Versión de gSO AP sobre U D P
Soporta las versiones IPv4 e IPv6
Soporta autenticación HTTP
Gestión de memoria
Marshalling/Unmarshalling de datos
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 57
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Desarrollo de u n a aplicació n
Aplicación servidor Aplicación cliente
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 59
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Herramientas proporcionadas por gSOAP
Wsdl2h
wsdl2h es un parseador de código
WSDL y esquemas de XML que
genera un fichero de cabecera con los
servicios web y los tipos de datos en
C/C++ usados por esos servicios
soapcpp2
soapcpp2 es un compilador que a
partir de un fichero de cabecera de
C/C++ genera código de los stubs del
cliente, los esqueletos de los servicios
web implementados en el servidor y
los ficheros para la serialización/
deserialización de los datos http://www.cs.fsu.edu/~engelen/soap.html
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 60
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo de uso
wsdl2
h
wsdl2h -
o
XmethodsQuery.h
XMethod Fichero generado por wsdl2h
http://www.xmethods.net/wsdl/query.wsdl
sQuery.h Fichero de entrada en formato
http://ww W SD L
La opción –o nombre_fichero.h
w.xmetho especifica el nombre
ds.net/ws
del
fichero de salida
dl/query.
wsdl
soapcpp2
donde-c XMethodsQuery.h
soapcpp2
donde
XmethodsQuery.h Fichero de cabecera de
entradaen el lenguaje
La opción –c especifica que se generará código
C
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 61
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Especificació n de servicios web en
gSOAP
Un fichero de cabecera de definición de servicios web puede contener
un
conjunto de directivas que especifican las propiedades del servicio
Especificar nombre de servicio
// gsoap namespace-prefix service name: myservice-name
Especificar una acción SO APAction para un método
// gsoap namespace-prefix service method-action: method-name-action
Especificar la localización del servicio mediante una URL
// gsoap namespace-prefix service location: url
// gsoap namespace-prefix service port:url
Especificar la URI del espacio de nombres de un servicio
web
// gsoap namespace-prefix service namespace: namespace-URI
Especificar la URI del esquema del espacio de nombres de
un servicio web
// gsoap namespace-prefix squema namespace: namespace-
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 62
Este obra está URI
bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo:
calcu ladora
// contents of file calc.h
// gsoap ns service name: calculator
// gsoap ns service style: rpc
// gsoap ns service encoding: encoded
// gsoap ns service port: http://mydomain/path/calculator.cgi
// gsoap ns service namespace: urn:calculator
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 63
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Invocació n de servicios web en gSOAP
Los servicios web se especifican en un fichero de cabecera (.h)
como prototipos de funciones de C ++
[int] [namespace_prefix ]method_name([inparam1,
inparam2], &outparam)
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 64
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
El programa cliente (I)
Antes de invocar uno o varios servicios web el
cliente debe crear un entorno de ejecución de
gSO AP:
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 65
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
El programa cliente (II)
Un programa cliente podrá invocar los servicios web
usando el siguiente prototipo de función:
int soap_call_[namespace_prefix ]method_name(struct soap
*soap, char *URL, char *action, [inparam1,
inparam2, …], &outparam)
Donde
namespace_prefix Prefijo del espacio de nombres especificado en el archivo de
cabecera Nombre del servicio web especificado en el archivo de
method_name
soap Entorno de cabecera
ejecución de Gsoap del
URL cliente Localización del
actio servicio web
n
inparam1, Una acción de
La las especificadas
lista en el API
de argumentos de entrada: tipo
inparam2,.. de
nameSOAP. Si opcional
El argumento de“”salida del
outparam servicio web
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 66
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
El programa cliente (III)
Después de invocar uno o varios servicios web el
cliente debe eliminar el entorno de ejecución
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 67
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
El programa servidor (I)
El programa servidor deberá crear un entorno de ejecución antes
de poder proporcionar los servicios web al cliente
Usa las mismas llamadas que el programa cliente
Además, el servidor debe:
Implementar el bucle principal que atiende las peticiones de los clientes.
Los servicios web pueden proporcionarse de dos maneras:
Servidor usando CGI (common Gateway Interface)
Servidor stand-alone
Implementar las funciones (servicios web) especificados en el fichero
de cabecera de entrada
Finalmente, destruir el entorno de ejecución cuando quiera dejar
de proporcionar los servicios a los clientes
Usa las mismas llamadas que el programa cliente
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 68
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
El programa servidor (II)
El servidor utiliza el siguiente prototipo de función para
activar el servicio web correspondiente al solicitado
por el cliente
int soap_serve (struct soap *soap)
donde
soap Entorno de ejecución de gSO AP en el
servidor
Implementación del servicio web:
Si el servicio web solicitado es un CGI, entonces el servidor
únicamente deberá invocar la rutina soap_serve
Si el servicio web solicitado es una función implementada en un
servidor stand-alone, el servidor deberá invocar funciones análogas a
las usadas en sockets
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 69
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo:
programa servidor basado en C G I
#include “soapH.h”
#include “ns.nsmap”
int main(){
/* Entorno de ejecución del servidor */
struct soap soap;
/* Inicializar un entorno de ejecución
*/
soap_init(&soap);
/* Activar un servicio web */
soap_serve
/* Liberar recursos y destruir un
entorno de ejecución */
soap_end(&soap);
soap_done(&soap);
exit(0);
}
/* Implementación de los servicios web */
int mi_funcion(input1,input2,output){
/* Algún tratamiento */
return SOAP_OK;
} F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 70
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
El programa servidor (III)
El servidor puede proporcionar los servicios web como
stand-alone usando el protocolo HTTP y cualquier puerto
Para ello deberá usar las siguientes funciones del API
de gSO AP (funciones análogas a las de sockets
stream)
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 71
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo:
programa servidor stand-alone (I)
#include “soapH.h”
#include “ns.nsmap”
int main(){
int m,s;
struct soap /* Entorno de ejecución del servidor */
soap; /* Inicializar un entorno de ejecución */
soap_init(&soap)
if (m=soap_bind(&soap, “machine.cs.fsu.edu”, 18083, 100))<0){
;
soap_print_fault(&soap,stderr);
exit(-1);
}
….
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 72
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo:
programa servidor stand-alone (II)
….
for (int i=1;;i++){
if ((s=soap_accept(&soap))<0)
{ soap_print_fault(&soap,stder
r); exit(-1);
}
if (soap_serve(&soap)!=SOAP_OK){
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 73
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
E jem plo:
programa servidor stand-alone multithread (I)
#include “soapH.h”
#include “ns.nsmap”
int main(){
int m,s;
struct soap soap; /* Entorno de ejecución del servidor */
struct soap *soap2;
soap_init(&soap); /* Inicializar un entorno de ejecución */
if (m=soap_bind(&soap, “machine.cs.fsu.edu”, 18083, 100))<0){
soap_print_fault(&soap,stderr);
exit(-1);
}
….
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 74
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
E jem plo:
programa servidor stand-alone multithread (II)
….
for (int i=1;;i++){
if ((s=soap_accept(&soap))<0){
soap_print_fault(&soap,stderr);
exit(-1);
}
soap2 = soap_copy(&soap); // make a safe
copy
if (!soap2)
break;
pthread_creat
e(&tid,
NULL,
(void*(*)
(void*))pro
cess_reques
t,
(void*)soap
soap_destroy((struct soap*)soap); // dealloc C++ data
2);
soap_end((struct soap*)soap); // dealloc data and clean up
} soap_done((struct soap*)soap); // detach soap struct
soap_done(&soap);
return NULL;
} // detach soap
struct
}
void
*process_request(v F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 75
oid *soap)
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
{
pthread_detach(pt
hread_self());
M á s ejemplos
WSDL:
http://www.dataaccess.com/webservicesserver/numberconversi
on.wso?WSDL
Accesible desde http://www.xmethods.com/
Dos métodos:
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 76
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Elementos del W S D L
<operation name="NumberToWords">
<documentation>Returns the word corresponding to the positive
number passed as parameter. Limited to quadrillions.
</documentation>
<input message="tns:NumberToWordsSoapRequest" />
<output message="tns:NumberToWordsSoapResponse" />
<message name="NumberToWordsSoapRequest">
<part name="parameters" element="tns:NumberToWords" />
</message>
<message name="NumberToWordsSoapResponse">
<part name="parameters"
element="tns:NumberToWordsResponse" />
</message>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 77
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Elementos del W S D L
<xs:element name="NumberToWords">
<xs:complexType>
<xs:sequence>
<xs:element name="ubiNum"
type="xs:unsignedLong" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="NumberToWordsResponse">
<xs:complexType>
<xs:sequence>
<xs:element
name="NumberToWordsResult"
type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 78
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Generació n de u n cliente
Paso 1: Obtener el archivo de cabecera a partir
del WSDL:
wsdl2h -o conversions.h
http://www.dataaccess.com/webservicesserver/numberconversion.wso?WSD
L
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 79
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo:
implementació n del programa cliente
#include "soapH.h" // obtain the generated stub
#include "ConversionsSoapBinding.nsmap"
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 81
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo VIII:
Programar u n servidor y cliente en TCP
Máquina A Máquina B
sumar(5,2)
cliente servido
r 5+2
RED
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 82
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Ejemplo:
programa calculadora
Paso 1. Fichero de cabecera calculadora.h
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 83
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Paso 3:
Desarrollo del servidor (I)
#include "soapH.h"
#include "ns.nsmap"
if (s < 0)
{
soap_print_fault(&soap, stderr);
exit(-1);
}
soap_serve(&soap);
soap_end(&soap);
} /* end for */
soap_done(&soap);
} /* end else */
return 0;
}
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 85
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Paso 3:
Desarrollo del servidor (III)
int ns__suma (struct soap *soap, int a, int b, int *res)
{
*res = a + b;
return SOAP_OK;
}
int ns__resta
(struct soap
*soap, int a, int
b, int *res)
{
*res = a - b;
return SOAP_OK;
}
int ns__sqrt
(struct soap
*soap, int a, int
*res)
{ F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 86
Este obra*res=sqrt(a);
está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
return SOAP_OK;
Paso 4:
desarrollo del cliente (I)
#include "soapH.h"
#include "ns.nsmap"
// const char
server[] =
// "
http://websrv.cs.fs
u.edu/~engelen/calc
server.cgi
";
// const char
server[] =
"http://localhost:9
000";
if (argc != 2)
{ printf("Uso: http://server:port\n");
int main(int argc,
calcClient exit(0);
char
} **argv)
{
struct soap soap;
soap_init(&soap);
char *server;
int a, b, res;
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 87
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Paso 4:
desarrollo del cliente (II)
server =
argv[1]; a = 5;
b = 7;
&res); if (soap.error)
{
soap_print_fault(&soap, stderr);
exit(1);
}
printf("Resultado = %d \n", res);
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 88
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
Paso 5: compilació n y ejecució n
Cliente:
calcClient: calcClient.c soapC.c
soapClient.c
Servidor:
calcServer: calcServer.c soapC.c
soapServer.c
>./calcServer 9000
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 89
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
B ibliografía
gSO AP 2.8.1 User Guide
http://www.cs.fsu.edu/~engelen/soapdoc2.pd
f
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García 90
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.