Introducción a los
Servicios Web
Ingeniería del Software II
Curso 2008/2009
Sergio Ilarri Artigas
[email protected]
Índice
Introducción
Servicios Web SOAP
SOAP
WSDL
UDDI
APIs
Servicios Web REST
CORBA vs. Servicios Web
Introducción (I)
“In simple terms a Web Service is an
application or business logic that is
accessible using standard Internet
protocols.”
Fuente: http://faq.javaranch.com/java/WebServicesFaq
Introducción (II)
”Can I access a web service from any
application?
Yes, if your application supports XML
based object request and response.”
Fuente: http://faq.javaranch.com/java/WebServicesFaq
Introducción (III)
Service-oriented architecture (SOA) is an evolution of distributed
computing based on the request/reply design paradigm for
synchronous and asynchronous applications. An application's
business logic or individual functions are modularized and
presented as services for consumer/client applications. What's key
to these services is their loosely coupled nature; i.e., the service
interface is independent of the implementation. Application
developers or system integrators can build applications by
composing one or more services without knowing the services'
underlying implementations.
Fuente: http://www.javaworld.com/javaworld/jw-06-2005/jw-0613-soa.html
Fuente: http://geekandpoke.typepad.com/geekandpoke/2007/01/the_consultants.html
Introducción (IV)
Idea: utilizar la web como mecanismo
de transporte “universal”
Un servicio web proporciona una serie
de puntos de acceso o endpointsque
pueden invocarse remotamente
Accesibles a través de HTTP
Tecnologías
web
(normalmente)
Peticiones y respuesta en XML
(normalmente)
Introducción (V)
HTML
Web
Aplicación
Web
Aplicación
Web
XML
Web
Servicio
Web
Introducción (VI)
Mensajería
SOAP, XML
Descripción
WSDL, XML Schema
Descubrimiento
UDDI
Seguridad
TLS, SSL
Introducción (VII)
Dos aproximaciones:
1. Aproximación basada en SOAP
Estilo RPC
Tecnologías: SOAP, WSDL, UDDI
2. Aproximación REST
Representational Style Transfer
Nuevo estilo arquitectónico
Tecnologías: HTTP 1.1, XML
SW SOAP: SOAP (I)
Simple Object Access Protocol(inicialmente)
Protocolo para el intercambio de mensajes
(peticiones y respuestas) con estructura en XML
Estándar del W3C: versiones 1.1 y 1.2
Es sólo un formato de mensajes
Métodos de transporte:
HTTP (normalmente; atraviesa firewalls)
SMTP
FTP
JMS (Java Message Service)
…
SW SOAP: SOAP (II)
Servicios en SOAP:
Servicio: conjunto de puertos
Puerto: ofrece un conjunto de operaciones
Operaciones:
Nombre, parámetros (E, S, E/S), valor de
retorno, faults(excepciones)
Síncronas (RPC) o asíncronas
SW SOAP: SOAP (III)
SOAP estandariza la estructura de los
mensajes de petición/respuesta:
Envelope:elemento raíz, header+body
Header(opcional)
Body(obligatorio): contenido del mensaje
SW SOAP: SOAP (IV)
Ejemplo de petición SOAP sobre HTTP
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
Fuente: http://www.w3schools.com
SW SOAP: SOAP (V)
Ejemplo de respuesta SOAP sobre HTTP
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>
Fuente: http://www.w3schools.com
SW SOAP: WSDL (I)
Web Services Description Language
Especificación en XMLde las operaciones que ofrece
un servicio web (su interfaz):
Puertos, operaciones, tipos de datos
Versiones:
Versión 1.1 (WC3 Note, 2001)
Versión 2.0 (W3C Recommendation, 2007)
Compilador de WSDL (APIs):
Stuben el cliente (patrón Proxy)
Skeletonen el servidor (patrón Adapter)
En Axis: Java2WSDLy WSDL2Java
(http://ws.apache.org/axis/java/user-guide.html)
Podríamos manejar
los mensajes SOAP
nosotros
SW SOAP: WSDL (II)
Elementos básicos:
Definición de las operaciones (tipos de puertos):
<portType> (≈ módulo de lenguaje de programación)
Definición de los mensajes (inputy output de operaciones):
<message>
“Partes”
Parámetros “In”, “Out”, e “InOut”
Valor de retorno
Excepción (fault)
Definición de los tipos de datos de los mensajes de petición
y de respuesta (XML Schema, tipos SOAP): <types>
Definición de los protocolos de comunicación: <binding>
Definición de una dirección: <port>
Definición de servicios (conjuntos de puertos): <service>
SW SOAP: WSDL (III)
<definitions> Elemento raíz
<types> Tipos de datos que se transmiten
<message> Mensajes que se transmiten
<portType> Operaciones soportadas
<binding> Cómo se transmiten los mensajes por la red
<service> Dónde se localiza el servicio
SW SOAP: WSDL (IV)
1. Service Definition Layer
Tipos de datos
Tipos de mensajes
Operaciones
Servicios
2. Binding Layer
Protocolos de comunicación
Formatos de datos:
SOAP, HTTP, tipos MIME, etc.
Propiedades
abstractas
Propiedades
concretas
SW SOAP: WSDL (V)
Ejemplo
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
Fuente: http://www.w3schools.com
SW SOAP: WSDL (VI)
Tipos de operaciones (WSDL 1.1):
(1)
Fuente: http://www2.roguewave.com/support/docs/leif/leif/html/webservicesug/5-2.html
SW SOAP: WSDL (VII)
Ejemplo One-way
<message name="newTermValues">
<part name="term" type="xs:string"/>
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="setTerm">
<input name="newTerm"
message="newTermValues"/>
</operation>
</portType >
Fuente: http://www.w3schools.com
SW SOAP: WSDL (VIII)
Tipos de operaciones (WSDL 1.1):
(2)
Fuente: http://www2.roguewave.com/support/docs/leif/leif/html/webservicesug/5-2.html
SW SOAP: WSDL (IX)
Ejemplo Request-Response
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
Fuente: http://www.w3schools.com
SW SOAP: WSDL (X)
Tipos de operaciones (WSDL 1.1):
(3)
Fuente: http://www2.roguewave.com/support/docs/leif/leif/html/webservicesug/5-2.html
SW SOAP: WSDL (XI)
Ejemplo Solicit-Response
<message name="RenewResponse">
<part name="RenewResponse" type="xsd:string"/>
</message>
<message name="RenewRequest">
<part name="RenewRequest" type="xsd:string"/>
</message>
<portType name=“weather">
<operation name="weatherUpdateRenew">
<output message="tns:RenewRequest"/>
<input message="tns:RenewResponse"/>
</operation>
</portType>
Fuente: http://www2.roguewave.com/support/docs/leif/leif/html/webservicesug/5-2.html
SW SOAP: WSDL (XII)
Tipos de operaciones (WSDL 1.1):
(4)
Fuente: http://www2.roguewave.com/support/docs/leif/leif/html/webservicesug/5-2.html
SW SOAP: WSDL (XIII)
Ejemplo Notification
<message name="getSummaryResponse">
<part name="weatherData" type="wsx:WeatherSummary"/>
</message>
<portType name=“weather">
<operation name="weatherNotification">
<output message="tns:getSummaryResponse"/>
</operation>
</portType>
Fuente: http://www2.roguewave.com/support/docs/leif/leif/html/webservicesug/5-2.html
SW SOAP: WSDL (XIV)
Patrones de intercambio de mensajes (MEPs)
en WSDL 2.0:
In-Only
Robust In-Only
In-Out
In-Optional-Out
Out-Only
Robust Out-Only
Out-In
Out-Optional-In
http://www.w3.org/TR/2004/WD-wsdl20-extensions-20040803/#meps
SW SOAP: WSDL (XV)
Un bindingespecifica el protocolo y formato de datos
para un puerto (hijos soap:binding y operation)
Atributos del elemento binding
Name: el nombre que se da al binding
Type: referencia al puerto para el binding
Atributos del nodo hijo soap:binding
Usando más de un
puerto, es posible ligar
un portType a más de
un protocolo
Style : "rpc"o "document”
Transport : protocolo SOAP (Ej., HTTP, SMTP, FTP, JMS)
Nodo hijo operation
Define las operaciones que expone el puerto
Para cada operación, se indica la acción SOAP
Además, se debe especificar cómo se codifica la entrada y la
salida (ej., “literal”)
SW SOAP: WSDL (XVI)
Ejemplo de binding
<binding type="glossaryTerms" name="b1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<soap:operation soap
Comentarios de: Introducción a los Servicios Web - Java (0)
No hay comentarios