💭

gunicorn + SOAPでサーバを実装

2022/03/22に公開

はじめに

業務で SOAP を使う事になったので調査したが、使用しないようなので供養として。
SOAP の仕様を理解して実装した、というよりもspynezeepの使って SOAP であろう動作をする実装をしたので記事化。
なお需要があるかは不明。

サンプルコード

https://github.com/ryoutoku/gunicorn-soap
構成などは README.md を参照の事。
docker-compose を使える環境であればコンテナ内で実行可能。

概略

サーバ

使用しているパッケージはspyne

各ファイルの主な役割は下記。

  • docker-compose.yaml
    • localhost:8080 でgunicorn起動
  • wsgi.py
    • WSGI の起動のエントリーポイントの定義
  • app.py
    • クライアントに公開する API について定義
      • API に対応するクラス
      • in/out のプロトコル
      • namespace
      • etc...
  • service.py
    • クライアントに公開する API の処理の実体を定義
      • ServiceBaseを継承したクラスを定義
      • rpcデコレータを用いて、API のエントリーポイントとなるメソッドを定義

クライアント

使用しているパッケージはzeep

  1. http://0.0.0.0:8080/?wsdlにアクセスし、API 名や引数を取得
  2. 取得した結果を基に、API を実行

クライアントサンプルの API 実行と確認したかった動作内容

クライアントとして、以下サーバ側の API を実行している。

  • say_hello_1 : 引数と戻り値の動作
    • 引数 : 文字列(Unicode)、数値(Integer)
    • 戻り値 : 文字列のリスト(Iterable(Unicode))
  • say_hello_2 : 引数をクラスにした場合の動作
    • 引数 : 定義したクラス(RequestParameter)
    • 戻り値 : 文字列のリスト(Iterable(Unicode))
  • say_hello_3 : 引数、戻り値をクラスにした場合の動作
    • 引数 : 定義したクラス(RequestParameter)
    • 戻り値 : 定義したクラス(RequestParameter)
GitHubで編集を提案

Discussion