Tuesday, March 10, 2015
Servicios Web:
SOAP y REST
Laboratorio de Tecnologías de Información
Dr. Víctor J. Sosa Sosa
Cinvestav-Tamaulipas
Caso de estudio:
Caso de estudio:
Caso de estudio:
Caso de estudio:
Proyecto Axis (SOAP)
Proyecto Axis (SOAP)
Proyecto Axis (SOAP)
Proyecto Axis (SOAP)
[email protected]
[email protected]
[email protected]
[email protected]
Objetivos y temas de la sesión
Introducción a los Servicios Web con SOAP y REST
Estándares de interoperabilidad para los Servicios
Web: portabilidad usando los APIs de Java (recordar
que Java ya es oficialmene Open Source bajo GPLv2).
Conocer algunas opciones para producir y consumir
servicios Web con software libre:
Proyecto
Axis
ejemplo
(construcción, despliegue e invocación de servicios).
http://ws.apache.org/axis/ o http://ws.apache.org/axis2/
(Java): Desglosamos
sencillo
Proyecto Mono (C#): Descripción breve.
http://www.mono-project.com/
Tuesday, March 10, 2015
1
Tuesday, March 10, 2015
Servicios Web (Web Services)
Definiciones
Componentedesoftwarereutilizableydistribuidoqueofreceuna
funcionalidadconcreta,
lenguajede
independientetantodel
programaciónenqueestáimplementadocomodelaplataformade
ejecución
que
auto-contenidas
Aplicaciones
ser
descritas,
pueden
publicadas,localizadaseinvocadassobrelaInternet
(ocualquier
otrared).
ActividadesrelacionadasconlosServiciosWebllevadasenel
WebConsortium(W3C):http://www.w3.org/2002/ws/Activity.html
Tuesday, March 10, 2015
Servicios como abstracción
La
computación Orientada
a Servicio se
fundamenta en una comunicación que se abstrae
del modelo de comunicación propio del
lenguaje y
de la plataforma de ejecución
No queremos “saber” si el servicio está programado en
Java, Lisp, C, C++,Fortran, etc…
No quiero saber si tengo que invocar un procedimiento,
método, función, …
No quiero saber nada de estructuras de datos en Java,
Lisp, C, C++
No quiero saber nada de UNIX, Windows,…
Tuesday, March 10, 2015
2
Tuesday, March 10, 2015
Algunas Tecnologías para
Servicios Web
Servidores de aplicaciones para servicios Web:
•Axis y el servidor Jakarta Tomcat (de Apache): ws.apache.org/axisaxisaxisaxis/
•Proyecto Mono: http://www.monomonomonomono-project
project.com/
project
project
•Java Web Services Development Pack (JWSDP) de Sun Microsystems (basado
en Jakarta Tomcat): http://java.sun.com/webservices/
•IBM Lotus Domino a partir de la versión 7.0: www.lotus
lotus.com
lotus
lotus
•ColdFusion MX de Macromedia: http://www.adobe.com/products/coldfusion/
•JOnAS (parte de ObjectWebuna iniciativa de código abierto) :
http://wiki.jonas.objectweb.org/
•Microsoft .NET: http://msdn.microsoft
microsoft.com/netnetnetnetframework/
microsoft
microsoft
•Novell exteNd (basado en la plataforma J2EE):
http://www.novell
novell.com/documentation/extend
extend5
novell
novell
extend
extend
•WebLogic: http://www.beasys.com
•WebSphere: http://www.ibm.com/websphere
websphere
websphere
websphere
•Zope es un servidor de aplicaciones Web orientado a objetos desarrollado en el
lenguaje de programación Python: http://www.zope.org/
•VERASTREAM de Attachmate WRQ para modernizar o integrar aplicaciones
host IBM y VT : http://www.attachmate.com/
•Proyecto NuSoap para PHP: http://dietrich.ganx4.com/nusoap/
Tuesday, March 10, 2015
Servicios de W3C: tecnologías
asociadas
• HTTP/HTTPS:
transportar los datos
Protocolo
ampliamente
aceptado
para
•XML (Extensible Markup Language): se usa para estructurar o
darle formato a la información contenida en los servicios.
• SOAP (Simple Object Oriented Protocol): es usado para
definir el protocolo de invocación/servicio.
• WSDL (Web Services Description Language): se usa para
describir los servicios disponibles.
•UDDI (Universal Description, Discovery, and Integration): se
utiliza para listar los servicios que están disponibles.
• WS-Security, XML-Signature, XML-Encryption, (esquemas para
manejo de seguridad).
Tuesday, March 10, 2015
3
Tuesday, March 10, 2015
SOAP en breve…
Protocolo basado en XML para
intercambio de información
Reglas de codificación para
instancias de tipos de datos
Convenciones para representar
invocaciones RPC
Diseñado para procesamiento entre
sistemas ligeramente acoplados
Sin manejo de referencias
remotas
Usado con XML Schema
Independiente del transporte
SOAP con Attachmentspermite
empacar datos de cualquier tipo.
Tuesday, March 10, 2015
Estructura del mensaje
Estructura del mensaje
Estructura del mensaje
Estructura del mensaje
SOAP1.1
SOAP1.1
SOAP1.1
SOAP1.1
<soap:Envelope
Sobre
SOAP
xmlns:soap="http://schemas.xmlsoap.org/soap/encoding/
"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/e
Cabeceras
ncoding/“
<soap:Header>
... ...
</soap:Header>
<soap:Body>
<!–- Código del usuario aqui -->
<soap:Fault>
... ...
</soap:Fault>
</soap:Body>
</soap:Envelope>
[Elemento:
Header]
Elemento:
Body
[Elemento:
Fault]
WSDL en breve…
Un documento WSDL describe
Quépuede hacer el servicio
Dóndereside
Cómoinvocarlo
Los WSDLs son como IDLs pero
mucho más flexible y extendible
Define enlaces para SOAP1.1,
HTTP GET/POST y MIME
Las descripciones WSDL pueden
ser hechas desde un registro UDDI
Tuesday, March 10, 2015
Estructura de documento
Estructura de documento
Estructura de documento
Estructura de documento
WSDL1.1
WSDL1.1
WSDL1.1
WSDL1.1
Documento
WSDL
[Types]
{Messages}
{Port Types}
{Bindings}
{Services}
4
Tuesday, March 10, 2015
Web Services: Invocación básica (I)
2.- El servicio K
en el servidor A
Servidor
UDDI
1.- ¿Qué
servicio Web
puede hacer X?
3.- ¿Cómo te invoco
servicio K?
4.- Revisa
esto: WSDL
5.- Invoca
operación X
< SOAP >
6.- Resultado de
la operación X
< SOAP >
Cliente
Servidor A
Tuesday, March 10, 2015
Web Services: Invocación básica (II)
Servidor
Contenedor de Web Services
Implementación
del Servicio
3
4
Stub
Servidor
WSDL
int operacionX(int a, int b)
int operacionY(int c, int d)
2
5
Stub
Cliente
Cliente
Aplicación
Cliente
1
6
Tuesday, March 10, 2015
5
Tuesday, March 10, 2015
APIs de Java para Servicios Web
Mensajes SOAP manejados como objetos Java
SAAJ ( SOAP with Attachments API for Java)
Modelo de Programación (RPC)
JAX-RPC ( JSR101), JSR109, EJB2.1
Modelo de Programación (Message-oriented)
JAX-WS (evoultion of JAX-RPC)
Acceso a descripciones WSDL
JWSDL (JSR110)
Acceso a registros de Servicios Web
JAXR (Java API for XML Registries)
Servicios Web con REST
JAX-RS (Java API for RESTful Web Services)
Tuesday, March 10, 2015
Modelo de Objetos de SAAJ
SOAPPart
SOAPMessage
AttachmentPart
Node
SOAPElement
SOAPFault
SOAPFaultElement
*
SOAPBody
SOAPHeader
*
SOAPBodyElement
SOAPHeaderElement
*
SOAPEnvelope
Tuesday, March 10, 2015
6
Tuesday, March 10, 2015
JAX-RPC
Traslada de WSDL/XML a Java
Traslada de Java a WSDL/XML
Gestiona Mensajes SOAP con archivos adjuntos
API para Cliente
Clases generadas desde WSDL
Proxy Dinámico
Interfaz de llamada dinámica DII
Gestor de mensajes SOAP
Asociación de tipos extensible
Tuesday, March 10, 2015
JAX-RPC: Arquitectura Física
Descripción WSDL
Cliente
Stub
Endpoint del servicio
WSDL<->Java Mapping
Contenedor
JAX-RPC API
JAX-RPC Cliente
Runtime System
Protocolo (SOAP)
Transporte
Dispatch
JAX-RPC API
JAX-RPC Server
Runtime System
Tuesday, March 10, 2015
7
Tuesday, March 10, 2015
Apache
Axis2: http://axis.apache.org/
axis1: http://axis.apache.org/axis/
Apache Axis
Máquina de procesamiento SOAP
Sistema cliente JAX-RPC
Sistema servidor JAX-RPC ( basado en Servlet)
Implementación SAAJ
Arquitectura flexible y extensible
Herramientas, ejemplos, documentación, …
Un buen lugar donde aprender Servicios Web !!
Open-source, auspiciado por Apache
Software Foundation
Tuesday, March 10, 2015
8
Tuesday, March 10, 2015
Instalación y Despliegue de
Apache Axis
Asegurarse de tener
J2SE SDK 1.4 o posterior
Un contenedor de Servlets (ej.
Tomcat)
descargar xml-axis-rc1-bin.zip de
http://xml.apache.org/axis
Descomprimirlo y revisar el árbol de
directorios. Note que Axis corre como
Servlet.
Desplegar Axis.
Copiar el directorio webapps\axis
al directorio webapps de Tomcat.
Alternativamente, modificar
server.xml de Tomcat.
Correr Tomcat: lanzar bin\startup del
directorio raíz de Tomcat
Tuesday, March 10, 2015
Estructura de directorio:
Estructura de directorio:
Estructura de directorio:
Estructura de directorio:
axis-1_0
webapps
lib
docs
samples
axis
WEB-INF
lib
classes
web.xml
……
Probar el despliegue..
Direccionar el navegador a
http://localhost:8080/axis
Tuesday, March 10, 2015
9
Tuesday, March 10, 2015
Un ejemplo sencillo…
•AddFunction: Una clase Java sencilla
con un método que suma dos enteros. Note la
extensión del archivo: .jws (refiere a Java Web
Service).
•Desplegar. Sólo copiamos el archivo
AddFunction.jws al directorio
webapps/axis.
// File: AddFunction.jws
public class AddFunction {
int addInt(int a, int b){
return(a+b);
}
}
• Examinamos su descripción: WSDL.
Dirigimos el navegador a:
http://localhost:8080/axis/AddFunction.jws?wsdl
Tuesday, March 10, 2015
Escribiendo un programa Cliente
Existen muchas formas para escribir un
programa Cliente:
Usando Interfaces de Invocación Dinámica (DII)
Usando la generación de los Stubs desde el
archivo de descripción del servicio WSDL
Usando un proxy dinámico
Analizaremos cada una de ellas.
Escribir el cliente requerirá más
trabajo que escribir el servicio ;-)
Tuesday, March 10, 2015
10
Tuesday, March 10, 2015
AddFunctionClient – usando DII
// Archivo: lección1\client\dii\AddFunctionClient.java
import javax.xml.rpc.Call;
import javax.xml.rpc.Service;
import javax.xml.namespace.QName;
public class AddFunctionClient {
public static void
Comentarios de: Servicios Web: SOAP y REST (1)