Présentation technique des Webservices dans PMB
page précédentepage suivante

Considérations sur les protocoles

Nous allons aborder un peu plus en détail les protocoles SOAP et JSON-RPC.

Le protocole SOAP (Simple Object Access Protocol)

Le protocole SOAP est un protocole d'appel de méthodes distantes basé sur XML. Le protocole défini un format de requêtes XML qui permettent d'appeler un méthode particulière et de transmettre des structures de données en argument de l'appel. De même le protocole définit une réponse SOAP qui renvoie un structure de données contenant le résultat de l'appel.

Le WSDL

A l'initialisation du protocole, le serveur SOAP fournit une feuille WSDL qui décrit l'ensemble des méthodes appelables, leur arguments et la structure de ces derniers, ainsi que la structure des données en réponse.

Vous pouvez accéder au WSDL du webservice en appelant directement dans votre navigateur : http://demo.bibli.fr/ws/connector_out.php?source_id=2&wsdl

Le WSDL est mis en forme par une feuille XSLT afin de le rendre lisible. Vous pouvez regarder le code source du navigateur pour voir l'original.

WSDL mis en forme par XSLT
WSDL mis en forme par XSLT
WSDL source
WSDL source
Exemple d'une requête SOAP : appel de la méthode pmbesSearch_simpleSearch(0,"fleur")

<?xml version="1.0" encoding="UTF-8"?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body>

<SOAP-ENV:pmbesSearch_simpleSearch>

<searchType xsi:type="xsd:int">0</searchType>

<searchTerm xsi:type="xsd:string">fleur</searchTerm>

<pmbUserId xsi:nil="true"/>

<OPACUserId xsi:nil="true"/>

</SOAP-ENV:pmbesSearch_simpleSearch>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

Notez les lignes importantes : SOAP-ENV : le nom de la méthode appelée, suivi par les quatre arguments de la méthode.

Exemple d'une réponse SOAP : réponse à la requête pmbesSearch_simpleSearch(0,"fleur")

<?xml version="1.0" encoding="UTF-8"?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://sigb.net/pmb/es/apisoap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body>

<SOAP-ENV:pmbesSearch_simpleSearchResponse>

<result xsi:type="ns1:pmbesSearch_simpleSearchResponseStruct">

<searchId xsi:type="xsd:string">48a573a24c9f499e5d1e52a5a599b702</searchId>

<nbResults xsi:type="xsd:int">12</nbResults>

</result>

</SOAP-ENV:pmbesSearch_simpleSearchResponse>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

Notez la structure de données de la réponse pmbesSearch_simpleSearchResponseStruct qui contient les données renvoyées :  <searchId xsi:type="xsd:string">48a573a24c9f499e5d1e52a5a599b702</searchId> et <nbResults xsi:type="xsd:int">12</nbResults>

Intérêts du protocole SOAP

L'intérêt du SOAP est la description très détaillée de toutes les structures de données et des appels possibles. De plus, le protocole SOAP est implémenté nativement dans la plupart des langages en toute transparence (PHP, Java, C#, VB, C++, Phyton, Ruby, Perl, ...). Enfin, par les entêtes HTTP, on peut gérer une authentification.

Inconvénients du protocole SOAP

Il est lourd et complexe à manipuler. De plus, beaucoup d'informations de description sont transmises au détriment des données utiles. Enfin, le temps d'analyse du WSDL peut ralentir les appels.

Pour en savoir plus sur le protocole SOAP sur Wikipedia : http://fr.wikipedia.org/wiki/SOAP1

Le protocole JSON-RPC (JavaScript Object Notation Remote Procedure Call)

Qu'est-ce que c'est ?

C'est un protocole d'appel qui utilise comme format des structures objet en notation Json (JavaScript Object Notation). Il est utilisé par plusieurs fournisseurs de services et notamment dans des gadgets (Yahoo, Google, ...), grace au fait qu'il soit nativement en syntaxe javascript, mais aussi dans des applications plus complètes.

Catalogue des méthodes

En appelant le webservice à vide, on obtient le catalogue des méthodes disponibles. Appelez dans votre navigateur l'adresse : http://demo.bibli.fr/ws/connector_out.php?source_id=3, vous obtenez un fichier texte.

{

"serviceType":"JSON-RPC",

"serviceURL":"http:\/\/demo.bibli.fr\/\/ws\/connector_out.php?source_id=3",

"methods":[

{"name":"pmbesSearch_simpleSearch","parameters":[{"name":"searchType"},{"name":"searchTerm"},{"name":"pmbUserId"},{"name":"OPACUserId"}]},

{"name":"pmbesSearch_simpleSearchLocalise","parameters":[{"name":"searchType"},{"name":"searchTerm"},{"name":"pmbUserId"},{"name":"OPACUserId"},{"name":"localisation"},{"name":"section"}]}, [...]

On distingue bien dans la section methods la liste des méthodes disponibles et leur arguments. Contrairement à SOAP, JSON-RPC n'impose pas la description de la structure des données passées aux méthodes.

Appel d'une méthode : pmbesSearch_simpleSearch(0,"fleur")

L'appel d'une méthode se fait par le postage (une requête HTTP POST) d'un objet Json. Il doit contenir le nom de la méthode, les valeurs des arguments et un identifiant qui sera renvoyé dans la réponse.

{"method": "pmbesSearch_simpleSearch", "params": [0,"fleur"], "id": 1}

Réponse de l'appel à la méthode pmbesSearch_simpleSearch(0,"fleur")

La réponse contient l'identifiant passé à l'appel, un indicateur d'erreur et un objet Json qui représente les données retournées.

{"result": {"searchId" : "48a573a24c9f499e5d1e52a5a599b702", "nbResults" : 12}, "error": null, "id": 1}

Avantages du protocole JSON-RPC

Il est simple, léger et compact. De plus il est facilement utilisable en Javascript (il n'existe pas d'implémentation SOAP complète en Javascript). Il est de plus en plus utilisé dans de nombreux langages, grace à sa simplicité de mise en oeuvre.

Inconvénients du protocole JSON-RPC

Les structures de données attendues ne sont pas décrites, et le protocole n'est pas encore complétement normalisé.

Pour en savoir plus sur le protocole JSON-RPC sur Wikipedia : http://en.wikipedia.org/wiki/JSON-RPC2

  1. Le protocole SOAP
    Le protocole SOAP

    Pour en savoir plus : présentation de SOAP et liens vers les spécifications techniques dans Wikipédia (en français).

  2. Le protocole JSON-RPC
    Le protocole JSON-RPC

    Description du protocole et liens vers des documentations techniques dans Wikipedia (en anglais).

page précédentepage suivante
A propos...PMB ServicesRéalisé avec Scenari