webservice

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