Accéder à des services web en Python
Dans cet article nous allons voir comment accéder très simplement à des services web (webservices) en utilisant le langage Python.
Voyons tout d’abord, grossièrement, ce qu’est un service web : c’est « un programme informatique permettant la communication et l’échange de données entre applications et systèmes hétérogènes dans des environnements distribués » (source Wikipédia). Il s’agit donc d’une application qui expose (met à disposition) des fonctionnalités. Celles-ci sont accessibles par Internet ou en mode plus restreint (Intranet). Un exemple de service web pourrait être un moteur de recherche qui met à disposition des fonctions permettant la recherche et/ou l’indexation de documents.
L’intérêt d’un service web, outre le fait qu’il soit accessible à distance, est qu’il peut être accessible par une application qui est écrite dans un langage différent de celui de l’application qui expose ses services web. Pour reprendre l’exemple précédent, je peux très bien avoir une plateforme de recherche de documents écrite en Java et accéder à ses services par un programme réalisé en Python.
Concernant le protocole de communication utilisé, il existe deux grandes familles : REST ou SOAP / WSDL. Je ne rentrerai pas ici dans les détails concernant les différences vous pouvez approfondir en lisant cet article sur Wikipédia. Disons que si REST est très flexible et simple à mettre en oeuvre, SOAP est assez utilisé dans le monde de l’entreprise. Vous pouvez aussi lire cet article qui explique bien la philosophie de ces deux protocoles.
Nous utiliserons ici SOAP. La première chose est d’installer la bibliothèque Python qui va nous permettre d’utiliser SOAP pour communiquer avec notre service web. Il existe plusieurs bibliothèques, citons :
- Pour les « anciennes » :
SOAPpy (simple à utiliser mais n’est plus maintenue), ZSI (plus complexe à utiliser) - Pour les « nouvelles » :
SUDS (simple à utiliser pour déclarer un client, plus complexe pour un serveur, soaplib (le contraire).
Comme ici nous souhaitons accéder à un service web existant, il nous faut un client SOAP. J’ai donc choisi SUDS.
Installation de la bibliothèque
sudo easy_install suds
Accès au service web
from suds.client import Client
URL = 'http://localhost:8180/ori-oai-indexing-solr/xfire/IndexingService?wsdl'
my_ws = Client(URL)
if my_ws is None:
exit(msg="Error can't connect to :%s" % URL)
print("service : %s" % my_ws)
print("Connected to %s" % URL)
URL est donc l’url de mon service web.
Je pense que ces lignes se passent de commentaires tellement elles sont explicites. A noter que l’avant dernière ligne permet d’afficher l’ensemble des fonctionnalités (fonctions) qui sont exposées par le service web.
Ensuite pour accéder à une fonction, il suffit d’utiliser l’attribut service :
my_ws.service.my_function(...)
Evidemment la fonction my_fonction doit avoir été exposée et donc se retrouver dans la liste affichée par print(my_ws).