ものづくりのブログ

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

【python】SOAP 通信をしてみる

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

必要情報

WSDL とは

WSDLは Web Services Description Language の略で、Webサービスを外部のソフトウェアから接続・利用するための仕様(インターフェース)を記述することができる言語のことを指します。
WSDL については以下が参考になりました。
ja.wikipedia.org

SOAP とは

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))