現在、既存の広範なSOAP管理APIを使用するクライアントの実装を検討しています。
別のSOAP pysimplesoap や [〜#〜] suds [〜#〜] のような実装を調べました。再帰が多すぎるため、WSDLは正常に動作しましたが(遅い)、モジュールが本当に好きです。
ただし、SUDSには、高いメモリ消費量、WSDL解析速度、一部のWSDL属性(choice属性など)のサポートの欠落など、いくつかの問題があるようです。
バグレポートとパッチを積極的にコミットしている人はたくさんいますが、2010-09-15の0.4以降、SUDSの リリースなし がありました。また、wikiとロードマップは少し無視されています。
私にとっては、SUDSはもはやメンテナンスされていないようです。
だからここで私の質問:
[2013年11月更新]
2年以上が経ち、元の泡プロジェクトは本当に死んでいることがわかりました。この事実により、多くの人々が泡を分岐し始め、Debianのようなディストリビューションは元の泡パッケージのパッチを適用したバージョンを展開して、いくつかの問題を修正しています。
Jurkoのアクティブにメンテナンスされているフォークをお勧めします。 python 3をサポートし、多くの泡の既知の問題に対処します。リリースノートとバグトラッカーは Bitbucket で利用可能です。パッケージは PyPI したがって、pipを使用してインストールできます。
認定された標準はありませんが、SOAPを使用する必要がある場合は、Sudsが最適です。大規模なWSDLでは、泡が遅くなる可能性があり、それは彼らが取り組んでいるものです。
それまでの間、WSDLが頻繁に変更されることを期待していない場合は、2つのオプションを使用して速度を大幅に向上させることができます。
WSDLのダウンロード
大規模なWSDLの問題の一部は、最初に毎回WSDLをダウンロードする必要があるため、オーバーヘッドが追加されることです。 Sudsは、起動時にWSDL全体をダウンロードして解析し、変更されていないことを確認するのに時間がかかります。
ローカルシステムにダウンロードし、URLでfile://
スキームを使用してClient
コンストラクターに渡すことができる場合。 Sudsはurllib2
をHTTPトランスポートに使用するため、これは完全に合法です。
ここで、WSDL URLでホスト名を提供していないため、SOAPアプリケーションの実際のURLを指定するlocation
引数も渡す必要があります。
以下に例を示します。
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)
興味のある方は、私の仕事でこのアプローチを使用しており、 コードをオープンソース化 しています。
WSDLのキャッシュ
もう1つのオプションは、Sudsの 優れたキャッシング機能 を使用することです。キャッシュオブジェクトを明示的に作成し、cache
引数を使用してコンストラクターに渡す必要があります。それ以外の場合、デフォルトは1日のObjectCache
になります。
また、これらのアプローチの両方を使用することを検討することもできます。
新しいよく維持されたSOAPクライアントは zeep と呼ばれます。これはPython 2と3をサポートし、よく知られたlxmlとライブラリを要求します。
興味深い最新の投稿はここにあります: What SOAP Pythonにはクライアントライブラリがあり、ドキュメントはどこにありますか? 残念ながら、 SOAPお探しのライブラリは存在しないようです(まだ)
2013年です。これは、PythonおよびSOAP私のように。
PythonでSOAPを使用しようとしました。泡を試しましたが、残念ながら2010年以降ライブラリが更新されていません。コードの最初のテスト実行で、このエラーが表示されました
RuntimeError: maximum recursion depth exceeded while calling a Python object
これは、sudsがHTTPS接続の再帰的参照で問題になることが判明しました。 drfenceの答えを参照 。この問題を解決するには、手動で泡を修正する必要がありました。
代わりにphpに切り替えました。 pythonほど簡単ではありませんが、動作させることができました。