SOAP en Python

Python, tutoriels 5 Commentaires »

SOAP ?

Le SOAP (Simple Object Access Protocol) est un protocole d’échange d’information entre deux objets distants en format xml, il permet d’appeler une fonction distante et de récupérer son résultat .

Plusieurs sites publient leurs services pour qu’il soit accessible à tout le monde par exemple : altavista (service de traduction) , google (recherche ..) …

Donc l’utilisation du SOAP réside dans le faite d’appeler une ou plusieurs fonctions et d’en récupérer le résultat , mais le problème c’est que pour un service quelconque on connais pas les fonctions disponibles et même si on les connais , il nous faut bien savoir les paramètres qu’on doit passer à cette fonction , le typage etc , c’est pourquoi chaque service web utilisant SOAP, publie un fichier xml qui contient touts les fonctions disponibles et leur paramètres , leur type et l’objet en retour , ce fichier xml est structuré de manière que tout les clients SOAP puissent comprendre son contenu , c’est une normalisation standard appelé WSDL (Web Services Description Language).

Dans ces lignes qui vont venir je vais illustrer l’utilisation de SOAP en python à l’aide du module SOAPpy .

Comme vous le savez déjà python rend la programmation un jeux d’enfant , pour interroger un servce web rien de plus facile , plusieurs modules sont disponible pour atteindre notre but , (SOAPpy , ZSI ..) , j’ai choisi d’utiliser SOAPpy .

SOAPpy est disponible en téléchargement ici , et n’oublier pas d’installer PyXML et fpconst avant de procéder à l’installation de SOAPpy , maintenant passant au code :

Pour démarrer un service web rudimentaire :

Le serveur

>>> import SOAPpy

>>> def helloworld():

return “Hello World !”

>>> server = SOAPpy.SOAPServer((”127.0.0.1″, 80))

>>> server.registerFunction(helloworld)

>>> server.serve_forever()

Le client :

>>> import SOAPpy

>>> server = SOAPpy.SOAPProxy(”http://127.0.0.1:80/”)

>>> print server.helloworld()

Simple non ?

Maintenant on va faire quelque chose de plus intéressant

Altavista possède un service web SOAP , qui va nous permettre de faire une traduction sur un texte , donc on a besoin de connaître la fonction qu’on doit appeler et les paramètres à passer non ? on a besoin donc besoin du fameux fichier wsdl .

On a donc notre fichier wsdl , il contient tout ce qu’on veux savoir il contient aussi l’adresse le service web SOAP de babelfish .

On va commencer par récupérer toutes les fonctions fournis dans ce fichier

>>> from SOAPpy import WSDL

>>> fichier_wsdl = ‘http://www.xmethods.net/sd/2001/BabelFishService.wsdl’

>>> wsdl = WSDL.Proxy(fichier_wsdl)

>>> print wsdl.methods.keys()

[u’BabelFish’]

>>>

l’objet wsdl nous fourni une liste nommée methodes , qui contient toutes les fonctions trouvés dans le fichier de définition wsdl

voici le code si on veux connaître comment utiliser cette fonction :

>>> info = wsdl.methods[’BabelFish’]

>>> for param in info.inparams:

print param.name , ‘:’ , param.type

translationmode : (u’http://www.w3.org/2001/XMLSchema’, u’string’)

sourcedata : (u’http://www.w3.org/2001/XMLSchema’, u’string’)

>>> for param in info.outparams:

print param.name , ‘:’ , param.type

return : (u’http://www.w3.org/2001/XMLSchema’, u’string’)

donc d’après le fichier wsdl , altavista nous fournis une seule fonction nommée BabelFish qui reçoit deux paramètres le premier translationmode (le mode de traduction) et le deuxième sourcedata (le texte à traduire) .

on va appeler cette fonction pour traduire un texte en français vers l’anglais

>>> resultat = wsdl.BabelFish(’fr_en’,'oui , non , quoi , comment ?’)

>>> print resultat

yes, not, what, how?

Voilà donc notre texte traduit

Ressources :

xmethodes et programmableweb : pour une liste de services web

http://www.xmethods.net/tryit.html?url=VOTRE_FICHIER_WSDL : pour tester un service web directement

soapUI : un utilitaire open source pour développer et tester votre service web

Partager cet article : Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Technorati
  • Digg
  • del.icio.us
  • blogmarks
  • Scoopeo
  • BlinkList
  • Furl
  • Reddit
  • Ma.gnolia
  • Slashdot
  • YahooMyWeb
  • Bumpzee
  • Spurl
  • Netscape
  • Book.mark.hu