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 | <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)
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%0AEl 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>"}}