💭
gunicorn + SOAPでサーバを実装
はじめに
業務で SOAP を使う事になったので調査したが、使用しないようなので供養として。
SOAP の仕様を理解して実装した、というよりもspyne
とzeep
の使って SOAP であろう動作をする実装をしたので記事化。
なお需要があるかは不明。
サンプルコード
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