Les applications client peuvent effectuer des opérations de base de données en envoyant des requêtes aux services Web proposant ces opérations. Les requêtes correspondent à des messages que l'on trouve dans l'un des six protocoles suivants :
Ce protocole de message n'est pas pris en charge par certains produits.
Imaginez par exemple qu'une application client demande à un service Web d'insérer une ligne dans la table EMPLOYEE de la base de données DB2 SAMPLE. Les types de données des colonnes de la table EMPLOYEE sont les suivants :
Nom de la colonne | Type de données |
---|---|
EMPNO | integer |
LASTNAME | varchar |
FIRSTNME | varchar |
SKILLS | XML |
Le tableau ci-dessous répertorie les valeurs de la nouvelle ligne à insérer.
Nom de la colonne | Valeur |
---|---|
EMPNO | 200170 |
LASTNAME | Durant |
FIRSTNME | Michel |
SKILLS |
|
Opération définie dans le service Web :
INSERT INTO employee values (:empno, :lastname, :firstnme, :skills)
Voici un exemple de message qu'une application client pourrait envoyer avec le protocole 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>
Voici des exemples de messages de type REST qu'une application client pourrait envoyer. Les messages respectent le format REST mais ne se comportent pas comme des messages REST standard car ils n'accèdent pas directement à une entité de données. A la place, ils exécutent des fonctions. Par exemple, les messages au format GET ne demandent pas la copie d'une ressource. De même, les messages au format POST n'ajoutent pas nécessairement des informations à une ressource. A la place, les messages GET et POST envoyés par des applications client sont des requêtes d'exécution d'opérations sur les données de la base de données.
Dans les messages de type REST, les valeurs NULL sont traitées différemment selon qu'il s'agit de requêtes utilisant XML ou non. Dans les requêtes utilisant XML, on représente les valeurs NULL en ajoutant xsi:nil="true" à l'élément paramètre. Dans les requêtes n'utilisant pas XML, les valeurs NULL sont représentées comme étant absentes, c'est-à-dire que le nom du paramètre n'apparaît pas dans la liste des paramètres ou des valeurs.
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://serveur:numéro_port/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
L'adresse URL doit utiliser des caractères UTF-8 et être conforme à la norme 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>"}}