More about WSDL 2.0
authorgumartinm <gustavo@gumartinm.name>
Fri, 9 Nov 2012 17:59:11 +0000 (18:59 +0100)
committergumartinm <gustavo@gumartinm.name>
Fri, 9 Nov 2012 17:59:11 +0000 (18:59 +0100)
PFC.tex
capitulo5/capitulo5.tex
source/wsdl20skeleton.xml [new file with mode: 0644]

diff --git a/PFC.tex b/PFC.tex
index bd544cd..88cfb95 100644 (file)
--- a/PFC.tex
+++ b/PFC.tex
@@ -33,6 +33,7 @@
 \usepackage{caption}%Excluding items from list of figures and list of tables.
 \usepackage[bottom]{footmisc}
 \usepackage{lscape}
+\usepackage{listings}
 \hypersetup
 {
     bookmarks=true,
index cc1be8d..3918520 100644 (file)
@@ -167,7 +167,7 @@ El término \emph{Web services} está típicamente asociado con operaciones o ac
 
 \subsection{REST}
 
-\emph{REST} es un estilo de arquitectura que trata la Web como una aplicación centrada en recursos. De forma práctica, esto significa que cada URL en una aplicación RESTful representa un recurso. Las URLs son también fáciles de entender y recordar. Por ejemplo, una tienda de venta de libros puede definir la URL http://www.bookstore.com/books/ para una lista de libros que esa tienda vende y la URL http://www.bookstore.com/books/0321396/ para obtener detalles acerca de un libro determinado en función de su número ISBN. Esto es un claro contraste a las aplicaciones centradas en acciones, las cuales típicamente tienen largas y crípticas URLs describiendo acciones para realizar, tales como, http://www.bookstore.com/action/query?t=b\&id=111114532\&qp=0321396. Los parámetros de la query son usados para filtrar los resultados.
+\emph{REST} es un estilo de arquitectura que trata la Web como una aplicación centrada en recursos~\cite{C5:IBMREST}. De forma práctica, esto significa que cada URL en una aplicación RESTful representa un recurso. Las URLs son también fáciles de entender y recordar. Por ejemplo, una tienda de venta de libros puede definir la URL http://www.bookstore.com/books/ para una lista de libros que esa tienda vende y la URL http://www.bookstore.com/books/0321396/ para obtener detalles acerca de un libro determinado en función de su número ISBN. Esto es un claro contraste a las aplicaciones centradas en acciones, las cuales típicamente tienen largas y crípticas URLs describiendo acciones para realizar, tales como, http://www.bookstore.com/action/query?t=b\&id=111114532\&qp=0321396. Los parámetros de la query son usados para filtrar los resultados.
 
 El doctor Roy Fielding acuñó el término REST en su doctorado, donde él se refirió a el lenguaje HTTP y sus \emph{hyperlinks}\footnote{Sobre hyperlinks, ver: \url{http://en.wikipedia.org/wiki/Hyperlink}} como el motor de las aplicaciones basadas en estado. Esto significa que se espera que un recurso contenga \emph{hyperlinks}. Estos \emph{hyperlinks} son el método por el cual puede tomar lugar una transición que transfiere o cambia el estado de un recurso. Servicios Web REST hacen uso de \emph{hyperlinks}.
 
@@ -175,7 +175,7 @@ Aplicaciones Web tradicionales acceden a recursos usando operaciones HTTP GET o
 
 Hay otro componente clave relacionado con las aplicaciones REST: las aplicaciones RESTful no deberían tener estado. Esto significa que en una aplicación REST no se almacena el estado de la sesión en el servidor. Toda la información necesaria para satisfacer la petición es transportada en el mismo mensaje de petición.
 
-\subsubsection{Retornando otros tipos de contenidos}
+\subsubsection{Retornando otros tipos de contenidos~\cite{C5:IBMREST}}
 
 Los servicios Web generalmente devuelven datos como XML pero hay otros tipos de contenidos que son muy prácticos para los consumidores de servicios. Por ejemplo, en aplicaciones Ajax\footnote{\emph{Asynchronous JavaScript + XML}} suele ser preferible recibir datos del tipo JSON (\emph{JavaScript Object Notation}), por otro lado si el consumidor no es una máquina si no una persona que debe interpretar directamente los datos, probablemente quiera recibir estos datos como HTML, el cual puede ser fácilmente renderizado en el navegador Web. En el mundo HTTP, la selección del formato de los datos es conocida como \emph{content type negotiation}. En un \emph{content type negotiation}, el cliente especifica el tipo de contenido que prefiere y el que es aceptable, luego el servicio responde con el más apropiado tipo de contenido. Esto significa que un cliente puede pedir los datos desde un servicio Web como XML, y otro cliente puede pedir a ese mismo servicio Web los datos como JSON o algún otro tipo como puede ser YAML\footnote{Sobre YAML, ver: \url{http://www.yaml.org/}}.
 
@@ -197,3 +197,46 @@ Los clientes pueden usar estos detalles para interactuar con un servicio.
 El \emph{binding} en WSDL 1.1 era inadecuado para describir servicios Web REST. WSDL 2.0 fue declarado como una recomendación del W3C (\emph{World Wide Consortium}) en Junio del 2007. La segunda versión de WSDL fue precisamente creada para direccionar los problemas con WSDL 1.0, muchos de los cuales habían ya sido identificados por la organización WS-I (\emph{Web Services Interoperability}). Además WSDL 2.0 tiene buen soporte para generar HTTP bindings que son los que los servicios Web REST necesitan.
 
 WSDL es un lenguaje XML para formalmente describir un servicio Web. Se puede considerar la descripción mediante WSDL de un servicio Web como el contrato entre este servicio Web y los clientes que deben usarlo. La descripción WSDL especifica la dirección, los mecanismos de comunicación permitidos, el interfaz y los tipos de mensajes de un servicio Web. En resumen, una descripción WSDL proporciona toda la información que un cliente necesita para usar un servicio Web.
+
+La usabilidad de WSDL se extiende más allá de su uso como un contrato entre el cliente y el servicio alojado en un servidor. Siendo una definición formal, WSDL puede ser consumido por herramientas de servicios Web para realizar acciones, tales como:
+
+\begin{itemize}
+    \item Generar código de cliente en varios lenguajes.
+    \item Publicar un servicio Web.
+    \item Dinámicamente probar un servicio Web.
+\end{itemize}
+
+\subsection{Describir un servicio Web REST con WSDL 2.0}
+
+WSDL 2.0 es un lenguaje XML. El elemento raíz de un documento WSDL 2.0 es el elemento \emph{description}. Hay cuatro elementos hijo de tipo \emph{description} que juntos encapsulan todos los detalles sobre un servicio Web:
+
+\begin{itemize}
+    \item {\Large\emph{types}}
+    \item {\Large\emph{interface}}
+    \item {\Large\emph{binding}}
+    \item {\Large\emph{service}}
+\end{itemize}
+
+Un esqueleto de un documento WSDL 2.0 es mostrado en el Listado~\ref{list:WSDL20skeleton}):
+
+\definecolor{gray}{rgb}{0.9,0.9,0.9}
+\definecolor{shadecolor}{named}{gray} 
+\lstset{language=XML, breaklines=false, backgroundcolor=\color{gray}, frame=single, captionpos=b, caption={Esqueleto de un documento WSDL 2.0}, label={list:WSDL20skeleton}}
+\lstinputlisting{source/wsdl20skeleton.xml}
+
+La estructura de un documento WSDL 2.0 difiere de la WSDL 1.1. Las diferencias más importantes se detallan a continuación:
+
+\begin{itemize}
+    \item El elemento raíz ha cambiado desde \emph{definitions} a \emph{description}.
+    \item El elemento \emph{portType} ha sido reemplazado con el elemento \emph{interface} para reflejar mejor su uso.
+    \item El elmento \emph{message} no existe como un elemento global. Las descripciones de los mensajes son ahora encapsuladas en el elemento \emph{interface}.
+    \item Un \emph{binding} se puede en WSDL 2.0 reutilizar. No necesita ahora ser asociado con un interfaz específico. La asociación puede ser realizada en la declaración del servicio.
+\end{itemize}
+
+El elemento \emph{types} contiene todas las definiciones de tipos que describen los mensajes del servicio Web. WSDL 2.0 puede ser usado con otros sistemas de tipado, pero prácticamente es únicamente utilizado con el esquema XML.
+
+El elemento \emph{interface} define las operaciones del servicio Web, incluyendo los mensajes input, output y fault (de fallo) que son pasados, y también el orden en el cual son enviados.
+
+El elemento \emph{binding} define cómo un cliente puede comunicar con el servicio Web. En el caso de servicios Web REST, un binding especifica que los clientes pueden comunicarse con el servidor usando HTTP.
+
+El elemento \emph{service} asocia una dirección para el servicio Web con un interfaz y binding específicos.
diff --git a/source/wsdl20skeleton.xml b/source/wsdl20skeleton.xml
new file mode 100644 (file)
index 0000000..fe76888
--- /dev/null
@@ -0,0 +1,6 @@
+<wsdl:description xmlns:wsdl="http://www.w3.org/ns/wsdl">
+  <wsdl:types/>
+  <wsdl:interface/>
+  <wsdl:binding/>
+  <wsdl:service/>
+</wsdl:description>