ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

python で SOAP 通信をしてみる

API の開発をしていて、[SOAP API]というものにたずさわったためモを残します。
今回は WSDL がある [SOAP API] のメモになります。
python で Zeep というライブラリを使用して実装しました。

必要情報

WSDL とは

WSDL については以下が参考になりました。
ja.wikipedia.org

SOAP とは

【Simple Object Access Protocol】
遠隔地にあるコンピューターのプログラムやデータにアクセスするためのプロトコルを指すそうです。
SOAPはXMLやHTTPなどをベースとしていて、SOAPサービスをもとにアクセス用のクライアントクラスやサーバークラスを自動生成できたりするらしい。
Web サービスの一種で、REST などと比較されていて、REST は「リソース指向」、SOAP は「サービス指向」という違いがあるらしいです。

使い方

準備

  • プロジェクトに SOAP サーバーの WSDL というサービス定義用の XML を返すURIを登録する。
  • IDE(EclipseやVisualStudio) は WSDL から API を読み取り、裏でそのサービスをクラスオブジェクトとして定義する。

SOAP クライアントライブラリ

情報取得先
  • Zeep

リポジトリ
github.com

  • 公式ドキュメント

Zeep: Python SOAP client — Zeep 4.1.0 documentation

zeep インストール
$ pip install zeep

今回やったこと

wsdl はもらえることが前提で、この wsdl(Web Services Description Language)に API を利用するためのインターフェースが書いてあるので読み込んでクライアントを作成します。
クライアントを通じて API を実行します。

sampleコード

import pathlib
from zeep import Client
from zeep.transports import Transport
from requests.auth import HTTPBasicAuth
from requests import Session

# 認証情報
username = "xxxxxxxx";
password = "xxxxxxxx";
WSDL_path = pathlib.Path.cwd().joinpath('wsdl.xml')

# SOAPクライアント作成
session = Session()
session.auth = HTTPBasicAuth(username, password)
client = Client(str(WSDL_path), transport=Transport(session=session))