私はこれまでSOAPを使用したことがなく、Python は初めてです。私は両方の技術に精通するためにこれを行っています。SOAPlibをインストールし、クライアントのドキュメントを読んでみましたが、よくわかりません。Python 用の SOAP クライアント ライブラリとしてより適しているものを他に調べることはできますか?
編集:念のため、Python 2.6 を使用しています。
更新 (2016):
SOAP クライアントのみが必要な場合は、zeepと呼ばれる適切に管理されたライブラリがあります。Python 2 と 3 の両方をサポートしています:)
アップデート:
上記に加えて、SOAPおよび他のすべての Web サービス タイプに対してアクティブに維持および推奨されるすべてのモジュールを常に最新の状態に保つPython WebServicesページを参照します。
残念ながら、現時点では「最高の」Python SOAP ライブラリはないと思います。利用可能な主流のものには、それぞれ長所と短所があります。
古いライブラリ:
SOAPy : 「最高」でしたが、現在は維持されていません。Python 2.5 以降では動作しません
ZSI : 使用するのが非常に面倒で、開発が遅い。SOAPy (上記) とは異なる "SOAPpy" というモジュールがあります。
「新しい」ライブラリ:
SUDS : 非常に Pythonic で、WSDL を使用する SOAP クライアントを簡単に作成できます。SOAP サーバーの作成は少し難しくなります。(このパッケージは Python3 では動作しません。Python3 については SUDS-py3 を参照してください)
SUDS-py3 : SUDS の Python3 バージョン
spyne : サーバーを作成するのは簡単ですが、クライアントを作成するのは少し難しいです。ドキュメントがやや不足しています。
ladon : サーバーの作成は、soaplib の場合とよく似ています (デコレータを使用)。Ladon は、追加のユーザー コードを必要とせずに、SOAP よりも多くのインターフェイスを同時に公開します。
pysimplesoap : 非常に軽量ですが、クライアントとサーバーの両方に役立ちます - web2py に同梱されている web2py サーバー統合が含まれています。
上記のうち、個人的にはSUDSしか使ったことがなく、とても気に入りました。
この質問に対する他の回答のアドバイスに従い、SUDSを試してみました。「怒って」それを使用した後、私は同意しなければなりません:SUDSはとてもいいです!強くお勧めします!
プロキシの背後から HTTPS ベースの Web サービスを呼び出す際に問題が発生しました。この記事の執筆時点では、これはを使用するすべてのPython Web サービス クライアントに影響するurllib2
ため、ここで解決策を文書化します。
urllib2
Python 2.6.2 以下に同梱されているモジュールCONNECT
は、HTTPS-over-HTTP-proxy セッションのプロキシに a を発行しません。これにより、タイムアウトが長くなるか、運が良ければ次のようなエラーが発生します。
abort: error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
これは、Python バグ トラッカーの問題 1424152 でした。バグ レポートには、Python 2.x および Python 3.x でこれを修正するパッチが添付されています。この問題は既に修正されています。
SUDS https://fedorahosted.org/sudsで良い経験をしました
TestSuite をドキュメントとして使用しました。
SUDSは進むべき道であり、それについては疑問の余地はありません。
SUDS を見ている人への参考までに、このチケットが解決されるまで、SUDS は WSDL の「choice」タグをサポートしません。
https://fedorahosted.org/suds/ticket/342
参照: 泡と選択タグ
SUDS は使いやすいですが、再入可能であるとは限りません。パフォーマンスを向上させるために WSDL Client() オブジェクトをスレッド化されたアプリに保持している場合、いくつかのリスクが伴います。このリスクに対する解決策である clone() メソッドは、回復不能な Python 5508 バグをスローします。これは、出力されているように見えますが、実際には例外をスローしていません。混乱するかもしれませんが、うまくいきます。それは今でも群を抜いて最高の Python SOAP クライアントです。
シンプルで機能的なクライアント/サーバーをサポートする新しいライブラリPySimpleSOAPをリリースしました。目標は、使いやすさと柔軟性 (クラス、自動生成コード、xml は不要)、WSDL のイントロスペクションと生成、WS-I 標準への準拠、互換性 (Java AXIS、.NET、Jboss WS を含む) です。フルスタック ソリューションを有効にするために Web2Py に含まれています (XML_RPC、JSON、AMF-RPC などの他のサポートされているプロトコルを補完します)。
誰かが SOAP を学んでいる、またはそれを調査したい場合は、始めるのに良い選択だと思います。
私は、soaplib がその SOAP クライアント (「送信者」) を非推奨にして、sud を支持していると思います。この時点で、soaplib は Web フレームワークにとらわれない SOAP サーバー (「レシーバー」) になることに重点を置いています。現在、soaplib は活発に開発されており、通常は Python SOAP メーリング リストで議論されています。
私の結論では、次のようになります。
SOAP クライアント側:
Suds-jurko (updated 2016) sudsのみ を使用
してください。
UPDATE 06/2017: suds -jurko ライブラリは更新されておらず、明らかに放棄されています。
zeepライブラリをテストしましたが、トークンに関する制限がありました。現在は UsernameToken のみをサポートしています。バグを報告してタイムスタンプ トークンを作成し、コードを更新して修正します。
Zeep の起動は良好で、ドキュメントも充実しているため、最近、コードを suds から zeep に移行し、正常に動作しました。
SOAP サーバー側:
TGWS、soaplib (pysimplesoap はテストされていません) IMHO の使用と help soaplib を選択する必要があります。
よろしくお願いします、
泡はかなり良いです。SOAPpyを試しましたが、必要な方法で機能しませんでしたが、sudはすぐに機能しました。
ここで提案したように、自分でロールすることをお勧めします。実際にはそれほど難しいことではありません。それが、より優れた Python SOAP ライブラリが世の中にない理由だと思います。
本番環境で SOAPpy を Python 2.5.3 で使用しています。
SOAPpy でいくつかのファイルを手動で編集する必要がありました (ヘッダー コードが間違った場所にあることに関する何か) が、それ以外は機能し、非常に確実に機能し続けています。
これは役に立ちますか: http://users.skynet.be/pascalbotte/rcx-ws-doc/python.htm#SOAPPY
wsdl
andを検索して見つけたpython
のですが、合理的な理由から、有用なクライアント ラッパーを実行するには、SOAP サーバーの wsdl 記述が必要であることがわかりました....
Python Web ServicesのSOAPpy を使用していましたが、ZSI (同じソース) がそれを置き換えているようです。