Ir a contenido principal

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

La primera vez que se registra en developerWorks, se crea un perfil para usted. Información sobre su perfil (nombre, país/región y compañia) estará disponible al público y acompañará cualquiera de sus publicaciones. Puede actualizar su cuenta IBM en cualquier momento.

Toda la información enviada es segura.

  • Cerrar [x]

La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

Toda la información enviada es segura.

  • Cerrar [x]

Comprender las especificaciones de los servicios web, Parte 1: SOAP

Nicholas Chase, Freelance writer, Backstop Media
Nicholas Chase participó en el desarrollo de sitios Web para empresas como Lucent Technologies, Sun Microsystems, Oracle y Tampa Bay Buccaneers. Nick fue profesor de física en escuela secundaria, gerente de instalaciones para tratamiento de desechos con bajo nivel de radioactividad, editor de una revista online de ciencia ficción, ingeniero multimedios, instructor de Oracle y Director de Tecnología en una empresa de comunicaciones interactivas. Es autor de varios libros, entre ellos XML Primer Plus (Sams).

Resumen:  El énfasis actual en las arquitecturas orientadas a servicios (SOA) ha puesto el foco en los servicios web, pero es fácil perderse en toda la información disponible. Esta serie trae la verdadera historia de las principales especificaciones de los servicios web, y comienza con el Protocolo simple de acceso a objetos (SOAP), hasta llegar al Lenguaje de ejecución de procesos de negocios WS (WS-BPEL). Este tutorial explica los conceptos básicos de los servicios web y de SOAP, y explica cómo crear un servidor y un cliente SOAP.

Ver más contenido de esta serie

Fecha:  05-08-2011
Nivel:  Intermediaria

Actividad:  24561 vistas

Entender SOAP

Ahora que ya instaló el software, puede comenzar a ver el servicio web propiamente dicho. Ahora que ya instaló el software, puede comenzar a ver el servicio web propiamente dicho. Como mencioné en Other kinds of Web services (Otros tipos de servicios web), usted dispone de diversos formatos para elegir. En esta serie, usará SOAP.

Un breve comentario acerca de XML

Todos estos mensajes que van y vienen están basados en Extensible Markup Language (Lenguaje de marcado extensible) o XML. Si no está familiarizado con XML, investigue un poco al respecto antes de entrar en profundidad en los temas de los servicios web. Sin embargo, aquí aparecen los fundamentos que debe conocer antes de seguir adelante con este tutorial.

XML es un lenguaje de “marcado ampliable”, lo que significa que proporciona una forma de suministrar información adicional sobre el contenido. Esta información tiene la forma de “tags” (“etiquetas”), las que denotan “elements” (“elementos”). Por ejemplo, tome en cuenta este documento XML sencillo que aparece en el Listado 5:


Listado 5. Archivo XML que muestra los fundamentos
<article articleId="88271" categoryId="classifieds" subcategoryId="forsale">
  <articleHeadline>Fun, fun, fun</articleHeadline>
  <articleText>Vintage 1963 T-Bird.  Less than 300 miles.
Driven by my daughter until I took it away.  Serious 
inquires only.  555-3264 after 7 PM.</articleText>
</article>

Observe un par de cosas acerca de este texto. Ante todo, es texto. Eso lo hace legible por casi cualquiera, o por casi cualquier cosa. Segundo, las etiquetas están indicadas con > y <, con una etiqueta “open” (de apertura) que contiene un nombre, y atributos posibles, como la ID del artículo, y una etiqueta de cierre con una barra (/). Los elementos deben estar auto-contenidos y anidados correctamente. En otras palabras, usted no podría tener un documento XML similar al del Listado 6.


Listado 6. Muestra no válida de un documento XML
<article articleId="88271" categoryId="classifieds" subcategoryId="forsale">
  <articleHeadline>Fun, fun, fun
  <articleText></articleHeadline>Vintage 1963 T-Bird.  
Less than 300 miles. Driven by my daughter until I 
took it away.  Serious inquires only.  555-3264 after 
7 PM.</articleText>
</article>
					

XML también proporciona una forma de separar el contenido en diferentes "espacios de nombres”, para que pueda ser tratado de otra manera por una aplicación. Por ejemplo, un mensaje SOAP puede parecerse al siguiente, del Listado 7.


Listado 7. Ejemplo de mensaje SOAP
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope"> 
    <env:Header>
    </env:Header>
    <env:Body>
        <cms:getNumberOfArticles xmlns:cms="http://www.daily-moon.com/cms">
            <cms:category>classifieds</cms:category>
            <cms:subcategory>forsale</cms:subcategory>
        </cms:getNumberOfArticles>
    </env:Body>
</env:Envelope>
                        



No se preocupe por la estructura del mensaje, pero observe que hay dos “prefijos” distintos, cada uno de los cuales corresponde a un espacio de nombres en particular. En este caso, diferenciamos el “sobre” SOAP de la carga útil real.

Reitero, hay mucho para aprender acerca de XML, pero esos son los fundamentos que debe conocer para este tutorial.


El sobre SOAP

La unidad básica de un mensaje de servicio web es el sobre SOAP. Se trata de un documento XML que incluye toda la información necesaria para procesar el mensaje (ver Listado 8).


Listado 8. Ejemplo de mensaje SOAP
<?xml version='1.0' ?> <env:Envelope
                    xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
                    <env:Header> </env:Header> <env:Body>
                    </env:Body> </env:Envelope>

En este caso, usted tiene un Envelope (Sobre) sencillo, con el espacio de nombres especificado como SOAP versión 1.2. Incluye los dos sub-elementos, un Header (Encabezado) y un Body (Cuerpo). Veamos qué hacen cada uno de estos elementos.


El encabezado SOAP

El Header (Encabezado) de un mensaje SOAP tiene la finalidad de proporcionar información acerca del mensaje en sí mismo, contrariamente a la información destinada a la aplicación. Por ejemplo, el Header (Encabezado) puede incluir información de ruteo, tal como lo hace en este ejemplo que aparece en el Listado 9.


Listado 9. Información de ruteo en el Header (Encabezado)
						<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope"> 
 <env:Header>
  <wsa:ReplyTo xmlns:wsa=
        "http://schemas.xmlSOAP.org/ws/2004/08/addressing">
   <wsa:Address>
http://schemas.xmlSOAP.org/ws/2004/08/addressing/role/anonymous
   </wsa:Address>

  </wsa:ReplyTo>
  <wsa:From>
   <wsa:Address>
http://localhost:8080/axis2/services/MyService</wsa:Address>
  </wsa:From>
  <wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID> 
  </env:Header>

<env:Body>
</env:Body>
</env:Envelope>

En este caso usted ve un elemento de WS-Addressing, que incluye información acerca del destino del mensaje y del destino de las respuestas. El Header (Encabezado) y puede incluir todo tipo de información sobre el mensaje en sí mismo. En realidad, la especificación SOAP insume mucho tiempo en elementos que pueden ir en el Header (Encabezado), y cómo deben ser tratados por los "intermediarios SOAP”. En otras palabras, la especificación SOAP no infiere de manera alguna que el mensaje irá directamente de un punto a otro, desde el cliente al servidor. Permite la idea de que un mensaje SOAP puede ser procesado en efecto por diversos intermediarios, en su ruta al destino final, y la especificación es muy clara en cuanto a la forma en que deberán tratar esos intermediarios la información del Header (Encabezado). No obstante, esa discusión está más allá del alcance de este tutorial. Por lo que, por ahora, simplemente comprenda que el Header (Encabezado) le puede proporcionar una funcionalidad mucho mayor si la necesitara.

Ahora veamos la carga útil.


The SOAP body (El cuerpo SOAP)

Cuando usted envía un mensaje SOAP, lo hace con un motivo en mente. Usted trata de decirle al destinatario que haga algo, o trata de impartir información al servidor. Esta información se llama "carga útil". La carga útil va en el Body del Envolope. También tiene su propio espacio de nombres, en este caso el que corresponde al sistema de gestión de contenidos. En este caso, la elección del espacio de nombres, es completamente arbitraria. Sólo tiene que ser diferente del espacio de nombres de SOAP (ver Listado 10).


Listado 10. Ejemplo de una carga útil
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope"> 
 <env:Header>
...
</env:Header>
 <env:Body>
  <cms:addArticle xmlns:cms="http://www.daily-moon.com/cms">

    <cms:category>classifieds</category>
    <cms:subcategory>forsale</cms:subcategory>
    <cms:articleHeadline></cms:articleHeadline>
    <cms:articleText>Vintage 1963 T-Bird.  Less than 300 miles.  
Driven by my daughter until I took it away.  Serious inquires only.  
555-3264 after 7 PM.</cms:articleText>

  </cms:addArticle>
 </env:Body>
</env:Envelope>
						

En este caso, usted tiene una carga útil simple, que incluye instrucciones para agregar un artículo al sistema de gestión de contenidos para el Daily Moon.

La selección de la estructura de la carga útil incluye el estilo y la codificación.


Estilo y codificación

Este tema lo verá con mayor profundidad en la parte dos, que habla del Web Services Description Language (Lenguaje de descripción de los servicios web, WSDL), pero cuando cree su aplicación, necesitará decidir la estructura de la carga útil que enviará una y otra vez. A tal fin, tomemos unos instantes para hablar de la programación del estilo y de la codificación.

Dicho de manera sencilla, predominan dos estilos de programación diferentes para los mensajes SOAP. El primero es el estilo RPC, que se basa en el concepto de usar mensajes SOAP para crear Remote Procedure Calls (Llamadas a procedimientos remotos). En este estilo, la idea es que usted enviará un comando al servidor, como por ejemplo “agregar un artículo”, e incorporará los parámetros para ese comando, como por ejemplo el artículo que se agregará y la categoría a la que deberá ser incorporado, como elementos secundarios del método en general, según el Listado 11. Listado 11.


Listado 11. Estilo RPC
<env:Envelope
                    xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
                    <env:Header>

La alternativa al estilo RPC implica que usted tenga solamente sus datos como contenido del cuerpo SOAP, e incluye la información relativa al procedimiento o función a la que ésta pertenece en el ruteo del mensaje por parte del servidor de aplicaciones (ver Listado 12).


Listado 12. Datos como contenido en el cuerpo SOAP

<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope"> <env:Header> </env:Header> <env:Body> <cms:addArticle xmlns:cms="http://www.daily-moon.com/cms"> <cms:category>classifieds</category> <cms:subcategory>forsale</cms:subcategory> <cms:articleHeadline></cms:articleHeadline> <cms:articleText>Vintage 1963 T-Bird. Less than 300 miles. Driven by my daughter until I took it away. Serious inquires only. 555-3264 after 7 PM.</cms:articleText> </cms:addArticle> </env:Body> </env:Envelope>

Una variante del estilo RPC es RPC/encoded (RPC/codificado), a diferencia de RPC/literal, como podemos ver arriba. En aquel caso, el mensaje incluye información de tipo, tal como aparece en el Listado 13.


Listado 13. Ejemplo de RPC/codificado
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope"> 
 <env:Header>
 </env:Header>
 <env:Body>
  <cms:addArticle xmlns:cms="http://www.daily-moon.com/cms">

    <cms:category xsi:type="xsd:string">classifieds</category>
    <cms:subcategory xsi:type="xsd:string">forsale
</cms:subcategory>
    <cms:articleHeadline xsi:type="xsd:string" />

    <cms:articleText xsi:type="xsd:string">Vintage 1963 
T-Bird.  Less than 300 miles.  Driven by my daughter until
I took it away.  Serious inquires only.  555-3264 after 7 
PM.</cms:articleText>
  </cms:addArticle>
 </env:Body>
</env:Envelope>


Al segundo estilo se lo conoce como estilo document/literal, que implica únicamente la incorporación de los datos apropiados en el mensaje, como el que se muestra en el Listado14.


Listado 14. Ejemplo de estilo document/literal
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope"> 
 <env:Header>
 </env:Header>
 <env:Body>
    <category>classifieds</category>

    <subcategory>forsale</subcategory>
    <articleHeadline></articleHeadline>
    <articleText>Vintage 1963 T-Bird.  Less than 300 miles.
  Driven by my daughter until I took it away.  Serious 
inquires only.  555-3264 after 7 PM.</articleText>
</env:Body>
</env:Envelope>

En este caso, el mensaje propiamente dicho no incluye información acerca del proceso del destino a donde deberán ser enviados los datos; eso lo maneja el software de ruteo. Por ejemplo, todos los llamados a una URL o punto final en particular deben apuntar a una operación en particular. Usted también podría usar el estilo documento/codificado técnicamente, pero nadie lo hace, así que, por el momento, olvídelo.

Cada uno de estos estilos implica concesiones mutuas y, reitero, la parte dos de esta serie los abarca con más detalle. Sin embargo, es importante saber que hay un tercer estilo, "document wrapped," que no está especificado formalmente en ninguna parte, pero que se ha hecho popular por diversos motivos de interoperabilidad. En este caso, el contenido de la carga útil está ajustado en un único documento, pero ese elemento no puede llevar el mismo nombre de la aplicación o procedimiento al que pertenecen los datos. Para el ojo humano, estos mensajes son virtualmente idénticos a los mensajes RPC/literales.


Patrones de intercambio de mensajes

Cuando se trata del envío de mensajes, usted cuenta con una amplia variedad de opciones, que van desde el envío de una solicitud y la espera de una respuesta, al envío de una solicitud y olvidarse de ella, hasta el envío de una solicitud y hacerla pasar a través de intermediarios múltiples antes de que llegue a su destino final No obstante, al final, sólo tiene dos opciones:

  • Solicitud/Respuesta: Según el patrón Solicitud/Respuesta, usted envía una solicitud con forma de mensaje SOAP y simplemente espera la llegada de una respuesta. La solicitud puede ser sincrónica o asincrónica.
  • Mensajería unidireccional: Este caso, también conocido como método “dispare y olvídese”, implica el envío de la solicitud para después olvidarse directamente de ella. Esto lo puede usar en situaciones en las que simplemente imparte información, o en alguna otra en la que, en realidad, no le importa lo que el destinatario pueda decir de ella.

Ahora, observe la falta de los términos “cliente” y “servidor”. Esto se explica porque estos patrones de intercambio de mensajes pueden usarse básicamente para crear cualquier cantidad de alternativas diferentes, tal cual las mencionadas un poco más arriba. Por ejemplo, usted puede crear una situación en la cual envía una solicitud, y cuenta con que el destinatario se ocupará de ella, enviando un mensaje en algún momento futuro cuando esté listo lo que se supone que debe hacer. Para hacerlo, usted usará una combinación de mensajes unidireccionales, por lo que no tiene sentido hablar del "cliente" y del "servidor", porque cada mensaje tiene un remitente y un destinatario, y los así llamados cliente y servidor, cambian de lugar.

4 de 13 | Anterior | Siguiente

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=SOA y servicios web
ArticleID=660817
TutorialTitle=Comprender las especificaciones de los servicios web, Parte 1: SOAP
publish-date=08052011
author1-email=ibmquestions@nicholaschase.com
author1-email-cc=