XML-RPC
- Avec l’avènement du Web, l’idée d’invoquer des services sur http s’est développée.
- La première approche Web Service a été XML-RPC.
- L’idée :
- Envoyer un document XML
- Le traiter sur le serveur (éventuellement effectuer des actions)
- Renvoyer en réponse un autre document XML que le client peut traiter.
- Remote Procedure Call (RPC)
- Sun RPC, CORBA IIOP, Java RMI, MS DCOM ORPC
- XML RPC
- Requête-réponse :
- Méthode POST de HTTP pour le transport
- XML pour l’encodage
- HTTP/SSL pour la sécurité
Types de données
Type de base
<!ELEMENT i4 (#PCDATA)>
<!ELEMENT int (#PCDATA)>
<!ELEMENT boolean (#PCDATA)>
<!ELEMENT string (#PCDATA)>
<!ELEMENT double (#PCDATA)>
<!ELEMENT dateTime.iso8601 (#PCDATA)>
<!ELEMENT base64 (#PCDATA)>
<!ELEMENT nil (EMPTY)>
`
Tableau
<!ELEMENT array (data)>
<!ELEMENT data (value*)>
Structure
<!ELEMENT struct (member*)>
<!ELEMENT member (name, value)>
<!ELEMENT name (#PCDATA)>
Récursion
<!ELEMENT value ( i4 | int | boolean | string | dateTime.iso8601| double | base64 |
struct | array )>
Requête
<!ELEMENT methodCall (methodName, params)>
<!ELEMENT methodName(#PCDATA)>
<!ELEMENT params (param*)>
<!ELEMENT param(value)>
Réponse
<!ELEMENT methodResponse(params|fault)>
<!ELEMENT fault (value)>
Fault
<!ELEMENT fault (faultCode,faultString)>
<!ELEMENT faultCode(#PCDATA)>
<!ELEMENT faultString(#PCDATA)>
Exemple de requête
POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param> <value><i4>41</i4></value> </param>
</params>
</methodCall>
- methodName peut être interprété à la convenance du serveur .Cela peut être un script à lancer sur le document XML, une méthode Java …
- Il n’y a pas de limite au nombre de paramètre
- Il n’est pas possible à la lecture du document de savoir ce qui va réellement être fait par le serveur.
Exemple de réponse
HTTP/1.1 200 OK
Connection: close
Content-Length: 158
Content-Type: text/xml
Date: Fri, 17 Jul 1998 19:55:08 GMT
Server: UserLand Frontier/5.1.2-WinNT
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value>
<string>South Dakota</string>
</value>
</param>
</params>
</methodResponse>
- Le code retour http doit être 200 sauf en cas d’erreur http.
- Le reste des headers http doit être correctement valorisé.
- methodResponse peut contenir soit un élément soit un élément
- ne peut contenir qu’un unique
Exemple de réponse en erreur
HTTP/1.1 200 OK
Connection: close
Content-Length: 426
Content-Type: text/xml
Date: Fri, 17 Jul 1998 19:55:02 GMT
Server: UserLand Frontier/5.1.2-WinNT
<?xml version="1.0"?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>4</int></value>
</member>
<member>
<name>faultString</name>
<value>
<string>Too many parameters.</string>
</value>
</member>
</struct>
</value>
</fault>
</methodResponse>
- Les « faultCode » ne sont pas normalisés et leur signification doit être diffusée au client pour qu’il puisse les interpréter
- Dans le cas ou le retour est un élément le retour http peut être 200 !!
Conclusion
- XML RPC est simple à implémenter et permet d’exposer rapidement des services sur le net.
- Il est difficile de savoir ce que fait réellement un service.
- Il n’y a pas dans la spécification de notion de sécurité : tout est envoyé en clair.
- Les différentes implémentations d’XML RPC ont «étendues» les spécifications et donc ne sont pas toujours interopérables.
- L’approche XML-RPC n’est quasiment plus utilisée en entreprise du fait du manque de sécurité du protocole
- Elle n’a pas été retenue dans l’implémentation de la nouvelle pile JEE 5.
Références