💭
gunicorn + SOAPでサーバを実装
はじめに
業務で SOAP を使う事になったので調査したが、使用しないようなので供養として。
SOAP の仕様を理解して実装した、というよりもspyneとzeepの使って SOAP であろう動作をする実装をしたので記事化。
なお需要があるかは不明。
サンプルコード
構成などは README.md を参照の事。
docker-compose を使える環境であればコンテナ内で実行可能。
概略
サーバ
使用しているパッケージはspyne
各ファイルの主な役割は下記。
- docker-compose.yaml
- localhost:8080 で
gunicorn起動
- localhost:8080 で
- wsgi.py
- WSGI の起動のエントリーポイントの定義
- app.py
- クライアントに公開する API について定義
- API に対応するクラス
- in/out のプロトコル
- namespace
- etc...
- クライアントに公開する API について定義
- service.py
- クライアントに公開する API の処理の実体を定義
-
ServiceBaseを継承したクラスを定義 -
rpcデコレータを用いて、API のエントリーポイントとなるメソッドを定義
-
- クライアントに公開する API の処理の実体を定義
クライアント
使用しているパッケージはzeep
-
http://0.0.0.0:8080/?wsdlにアクセスし、API 名や引数を取得 - 取得した結果を基に、API を実行
クライアントサンプルの API 実行と確認したかった動作内容
クライアントとして、以下サーバ側の API を実行している。
- say_hello_1 : 引数と戻り値の動作
- 引数 : 文字列(
Unicode)、数値(Integer) - 戻り値 : 文字列のリスト(
Iterable(Unicode))
- 引数 : 文字列(
- say_hello_2 : 引数をクラスにした場合の動作
- 引数 : 定義したクラス(
RequestParameter) - 戻り値 : 文字列のリスト(
Iterable(Unicode))
- 引数 : 定義したクラス(
- say_hello_3 : 引数、戻り値をクラスにした場合の動作
- 引数 : 定義したクラス(
RequestParameter) - 戻り値 : 定義したクラス(
RequestParameter)
- 引数 : 定義したクラス(
Discussion