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.
Recent Comments