61 votes

Python SOAP Client - utiliser SUDS ou autre chose?

Je suis actuellement à la recherche dans la mise en œuvre d'un client qui permettra d'utiliser une vaste SAVON de gestion des API.

J'ai regardé dans les différents SAVON implémentations comme pysimplesoap et de la MOUSSE. Alors que la première a eu des problèmes de l'analyse du WSDL à cause de trop de récurrences, de la mousse a bien fonctionné (mais lent) et j'ai vraiment comme le module.

Cependant, il semble y avoir plusieurs problèmes avec de la MOUSSE, comme la forte consommation de la mémoire, le WSDL de l'analyse de la vitesse et de manque de soutien pour certains WSDL attributs (par exemple. le choix de l'attribut).
Bien qu'il existe beaucoup de personnes s'engageant activement les rapports de bogues et des correctifs, il n'y a pas de libération de la MOUSSE depuis 0.4 sur 2010-09-15. Aussi, le wiki et la feuille de route look un peu négligé.

Pour moi, cela ressemble à de la MOUSSE n'est plus maintenu.

Donc voici mes questions:

  1. Est-il raisonnable de base à un projet plus vaste sur la mousse comme du savon client?
  2. Est-il de la mousse fourche qui implémente déjà quelques correctifs disponibles dans le système de billetterie?
  3. Quelles sont les alternatives disponibles, qui ont une faible empreinte mémoire et sont faciles à utiliser et peuvent traiter des dossiers complexes de gros fichiers WSDL

[Mise À Jour Novembre 2013]

Plus de deux ans ont passé et il s'avère que l'origine de la mousse projet est vraiment mort. Il y a pas eu d'autres versions depuis 2010. Pour cette raison, beaucoup de gens ont commencé à faire un fork de la mousse et des et des distributions comme Debian sont le déploiement de versions corrigées de l'original de la mousse paquet de résoudre certains de ces problèmes.

Je peux recommander Jurko est activement maintenu fourche que j'ai utilisé avec succès. Il prend en charge python 3 et adresses de beaucoup de mousse a connu des problèmes. Notes de publication et de suivi de bogues sont disponibles sur Bitbucket l'emballage est également disponible sur PyPI de sorte qu'il peut être installé à l'aide de pip.

49voto

jathanism Points 15208

Alors qu'il n'y a pas un étalon certifié, si vous devez utiliser de SAVON, la Mousse est votre meilleur choix. La mousse peut être lent sur de gros fichiers wsdl, et c'est quelque chose qu'ils travaillent sur.

En attendant, si vous ne vous attendez pas votre WSDL souvent à changer, vous avez deux options que vous pouvez acheter beaucoup de vitesse:

  1. Le téléchargement de votre fichier WSDL à localhost
  2. En utilisant la mise en cache

Le téléchargement de votre fichier WSDL

Avec de gros fichiers wsdl partie du problème est que vous devez d'abord télécharger le fichier WSDL, à chaque fois, ce qui peut ajouter de frais généraux. La mousse va prendre le temps de télécharger et d'analyser l'ensemble du WSDL au démarrage pour s'assurer qu'il n'a pas changé.

Si vous pouvez le télécharger sur le système local, puis de passer à l' Client constructeur à l'aide d'un file:// régime dans l'URL. Car la Mousse s'utilise urllib2 pour le transport HTTP, ce qui est parfaitement légitime.

Maintenant, parce que vous n'êtes pas fournir un nom d'hôte dans votre URL WSDL, vous devrez également passer un location argument en précisant l'URL de l'application du SAVON.

Voici un exemple:

from suds.client import Client

# The service URL
soap_url = 'http://myapp.example.notreal/path/to/soap'

# The WSDL URL, we wont' use this but just illustrating for example. This 
# would be the file you download to your system and save as wsdl_file
wsdl_url = 'http://myapp.example.notreal/path/to/soap?wsdl' 

# The full path to the downloaded WSDL file on your local system
wsdl_file = '/path/to/myapp.wsdl'
wsdl_url = 'file://' + wsdl_file # Override original wsdl_url

client = Client(url=wsdl_url, location=soap_url)

Si vous êtes intéressé, j'ai utilisé cette méthode dans mon travail et open source le code.

La mise en cache de votre WSDL

L'autre option est d'utiliser de la Mousse' excellente fonctionnalité de mise en cache. Vous devez créer explicitement un objet du cache et de passer ensuite que le constructeur à l'aide de l' cache argument. Sinon, il est par défaut un ObjectCache avec une durée de 1 jour.

Vous pouvez également envisager l'utilisation de ces deux approches.

7voto

gecco Points 4063

Vous trouverez un article intéressant à jour ici: Quelle est la meilleure bibliothèque client SOAP pour Python et où se trouve la documentation? Malheureusement, la bibliothèque SOAP parfaite que vous recherchez ne semble pas exister (pour le moment)

5voto

RobotNerd Points 1072

Il est 2013. C'est une mise à jour pour n'importe qui qui a rencontré le problème avec Python et du SAVON comme moi.

J'ai essayé d'utiliser du SAVON en Python. J'ai essayé la mousse, mais, malheureusement, la bibliothèque n'a pas été mis à jour depuis 2010. Dans le premier test de mon code, j'ai reçu ce message d'erreur:

RuntimeError: maximum recursion depth exceeded while calling a Python object

Qui s'avère être un problème de mousse a avec récursive des références sur les connexions HTTPS. Voir drfence de réponse. J'avais manuellement le patch de la mousse pour obtenir au-delà de cette question.

Je suis passé à php. Pas aussi simple que python, mais j'ai été capable de le faire fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X