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:
Este protocolo de mensajes no se puede utilizar en algunos productos.
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:
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:
Nombre de columna | Valor |
---|---|
EMPNO | 200170 |
LASTNAME | Yamamoto |
FIRSTNME | Kiyoshi |
SKILLS |
|
Se trata de la operación definida en el servicio web:
INSERT INTO employee values (:empno, :lastname, :firstnme, :skills)
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>
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.
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
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.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
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>
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>"}}