Protocoles des messages pris en charge

Les applications client peuvent accéder aux services Web en envoyant des messages qui utilisent les protocoles SOAP/HTTP ou SOAP/JMS, ou trois protocoles des messages de type REST.

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 :

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 :

Tableau 1. Colonnes de la table EMPLOYEE
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.

Tableau 2. Valeurs à insérer dans la table EMPLOYEE
Nom de la colonne Valeur
EMPNO 200170
LASTNAME Durant
FIRSTNME Michel
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>

Opération définie dans le service Web :

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

Exemple de message d'entrée utilisant le protocole SOAP/HTTP

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>

Exemple de messages d'entrée utilisant les protocoles des messages de type REST

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.

Exemple de message d'entrée utilisant le protocole HTTP GET de type REST (codé dans l'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
L'adresse URL résultante pour la requête ressemble à l'extrait suivant :
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.
Exemple de message d'entrée utilisant le protocole HTTP POST de type REST (codé dans l'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
Exemple de message d'entrée utilisant le protocole HTTP POST de type REST (text/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>
Exemple de message d'entrée utilisant le protocole HTTP POST de type 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>"}}

Commentaires