Protocolos de mensajes soportados

Las aplicaciones cliente pueden acceder a servicios web enviando mensajes que utilizan el protocolo SOAP/HTTP o SOAP/JMS o los tres protocolos de mensajes de tipo REST.

Las aplicaciones cliente pueden realizar operaciones de base de datos enviando solicitudes a servicios web que ofrecen dichas operaciones. Las solicitudes son mensajes que están en uno de los seis protocolos siguientes:

Por ejemplo, supongamos que una aplicación cliente solicita a un servicio web que inserte una fila en la tabla EMPLOYEE de la base de datos SAMPLE de DB2. Los tipos de datos de las columnas de la tabla EMPLOYEE son los siguientes:

Tabla 1. Columnas de la tabla EMPLOYEE
Nombre de columna Tipo de datos
EMPNO integer
LASTNAME varchar
FIRSTNME varchar
SKILLS XML

Esta tabla lista los valores para insertar en la nueva fila:

Tabla 2. Valores para insertar en la tabla EMPLOYEE
Nombre de columna Valor
EMPNO 200170
LASTNAME Yamamoto
FIRSTNME Kiyoshi
SKILLS
<skills>
<languages>
  <language name="Japanese" native="yes" level="excellent"/>
  <language name="English" native="no" level="good"/>
</languages>
<softskills>
  <skill name="team leadership" level="good"/>
  <skill name="presentation" level="medium"/>
</softskills>
</skills>

Se trata de la operación definida en el servicio web:

INSERT INTO employee values (:empno, :lastname, :firstnme, :skills)

Mensaje de entrada de ejemplo que utiliza el protocolo de mensajes SOAP/HTTP

Es un ejemplo del mensaje que una aplicación cliente podría enviar utilizando el protocolo SOAP/HTTP.

POST /Sample/services/Sample HTTP/1.1
Host: localhost:8070
Content-Type: text/xml; charset=utf-8
Content-Length: 704
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: IBM Web Services Explorer
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: "http://www.example.org/insertEmployee"
Connection: close

<soapenv:Envelope xmlns:q0="http://www.example.org" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <q0:insertEmployee>
  		<empno>200170</empno>
  		<name>Yamamoto</name>
  		<firstname>Kiyoshi</firstname>
		<skills>
			<skills>
				<languages>
  					<language level="excellent" name="Japanese" native="yes"/>
  					<language level="good" name="English" native="no"/>
				</languages>
				<softskills>
  					<skill level="good" name="team leadership"/>
  					<skill level="medium" name="presentation"/>
				</softskills>
			</skills>
		</skills>
	 </q0:insertEmployee>
  </soapenv:Body>
</soapenv:Envelope>

Mensajes de entrada de ejemplo que utilizan los protocolos de mensajes de tipo REST

Son ejemplos de los mensajes de tipo REST que una aplicación cliente podría enviar. Los mensajes siguen el formato REST, pero no se comportan como mensajes de tipo REST normales porque no acceden directamente a una entidad de datos. En lugar de ello, realizan funciones. Por ejemplo, los mensajes en formato GET no solicitan una copia de un recurso. Además, los mensajes en formato POST no necesariamente añaden información a un recurso. En lugar de ello, los mensajes GET y POST que envían las aplicaciones cliente son solicitudes para realizar operaciones en datos de una base datos.

En los mensajes tipo REST, los valores nulos se tratan de modo distinto para las solicitudes basadas en XML y las solicitudes que no están basadas en XML. En las solicitudes basadas en XML, los valores nulos se representan añadiendo xsi:nil="true" al elemento del parámetro. En las solicitudes que no son XML, los valores nulos se representan como ausentes; es decir, el nombre del parámetro no aparece en la lista de parámetros o valores.

Mensaje de entrada de ejemplo que utiliza HTTP GET de tipo REST (codificado para url)
GET /Sample/RestEndpoint/Sample/insertEmployee?empno=200170&name;=Yamamoto&firstname;=Kiyoshi&skills;=%3Cskills%3E%0D%0A%3Clanguages%3E%0D%0A++
%3Clanguage+level%3D%22very+good%22+name%3D%22Japanese%22+native%3D%22yes%22%2F%3E%0D%0A++%3Clanguage+level%3D%22good%22+name%3D%22English%22+
native%3D%22no%22%2F%3E%0D%0A%3C%2Flanguages%3E%0D%0A%3Csoftskills%3E%0D%0A++%3Cskill+level%3D%22good%22+name%3D%22team+leadership%22%2F%3E%
0D%0A++%3Cskill+level%3D%22medium%22+name%3D%22presentation%22%2F%3E%0D%0A%3C%2Fsoftskills%3E%0D%0A%3C%2Fskills%3E%0D%0A HTTP/1.1
User-Agent: Java/1.5.0
Host: localhost:8070
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
El URL resultante para la solicitud sería similar al siguiente:
http://servidor:número_puerto/Sample/RestEndpoint/Sample/insertEmployee?empno=200170&name;=Yamamoto&firstname;=Kiyoshi&skills;=%3Cskills%3E%0D%0A%3Clanguages%3E%0D%0A++
%3Clanguage+level%3D%22very+good%22+name%3D%22Japanese%22+native%3D%22yes%22%2F%3E%0D%0A++%3Clanguage+level%3D%22good%22+name%3D%22English%22+
native%3D%22no%22%2F%3E%0D%0A%3C%2Flanguages%3E%0D%0A%3Csoftskills%3E%0D%0A++%3Cskill+level%3D%22good%22+name%3D%22team+leadership%22%2F%3E%
0D%0A++%3Cskill+level%3D%22medium%22+name%3D%22presentation%22%2F%3E%0D%0A%3C%2Fsoftskills%3E%0D%0A%3C%2Fskills%3E%0D%0A
El URL debe utilizar caracteres UTF-8 y cumplir el estándar RPC 2396.
Mensaje de entrada de ejemplo que utiliza HTTP POST de tipo REST (codificado para url)
POST /Sample/RestEndpoint/Sample/insertEmployee HTTP/1.1
User-Agent: Java/1.5.0
Host: localhost:8070
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 485

empno=200170&name;=Yamamoto&firstname;=Kiyoshi&skills;=%3Cskills%3E%0D%0A%3Clanguages%3E%0D%0A++%3Clanguage+level%3D%22very+good%22+name%3D%22Japanese%22+
native%3D%22yes%22%2F%3E%0D%0A++%3Clanguage+level%3D%22good%22+name%3D%22English%22+native%3D%22no%22%2F%3E%0D%0A%3C%2Flanguages%3E%0D%0A%3Csof
tskills%3E%0D%0A++%3Cskill+level%3D%22good%22+name%3D%22team+leadership%22%2F%3E%0D%0A++%3Cskill+level%3D%22medium%22+name%3D%22presentation%2
2%2F%3E%0D%0A%3C%2Fsoftskills%3E%0D%0A%3C%2Fskills%3E%0D%0A
Mensaje de entrada de ejemplo que utiliza HTTP POST de tipo REST (texto/xml)
POST /Sample/RestEndpoint/Sample/insertEmployee HTTP/1.1
Content-Type: text/xml; charset=utf-8
User-Agent: Michael
Accept: text/xml, application/dime, multipart/related, text/*
Content-Length: 467
Host: localhost:8070
Connection: keep-alive


<q0:insertEmployee xmlns:q0="http://www.example.org"><empno>200170</empno><name>Yamamoto</name><firstname>Kiyoshi</firstname><skills><skills>
<languages>
<language name="Japanese" native="yes" level="excellent"/>
<language name="English" native="no" level="good"/>
</languages>
<softskills>
<skill name="team leadership" level="good"/>
<skill name="presentation" level="medium"/>
</softskills>
</skills></skills></q0:insertEmployee>
Mensaje de entrada de ejemplo que utiliza HTTP POST de tipo REST (json)
POST /Project1WebService1/rest/WebService1/insertEmployee HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Connection: keep-alive
Content-Type: application/json;charset=utf-8
Content-Length: 395

{"insertEmployee":{"EMPNO":200170,"LASTNAME":"Yamamoto","FIRSTNME":"Kiyoshi","SKILLS":"<skills>
<languages>
   <language name=\"Japanese\" native=\"yes\" level=\"excellent\"\/>
   <language name=\"English\" native=\"no\" level=\"good\"\/>
<\/languages>
<softskills>
   <skill name=\"team leadership\" level=\"good\"\/>
   <skill name=\"presentation\" level=\"medium\"\/>
<\/softskills>
<\/skills>"}}

Comentarios