WSGI サポートの概要

コンテキスト
ウェブサーバーゲートウェイインターフェース(WSGI)は、ウェブサーバーがリクエストを Python プログラミング言語で記述されたウェブアプリケーションまたはフレームワークに転送するための単純な呼び出し規則です。 WSGI は PEP 3333 で詳しく説明された Python 規格です。
🤔 定義は良いとして、IRIS との関連性は何でしょうか?
IRIS 2024.2+ の新機能により、直接 IRIS で WSGI アプリケーションを実行できます。 この機能は、IRIS を他の Python フレームワークとライブラリに統合する優れた方法です。
これは、Python を使用して IRIS と対話できる Python ファーストエクスペリエンスのトレンドに沿ったもので、Python アプリケーションを IRIS 上で直接実行することもできるようになりました。
使用方法
IRIS で WSGI アプリケーションをインスタンス化するには、IRIS 管理ポータルのセキュリティ -> アプリケーション -> ウェブアプリケーションのセクションで構成する必要があります。
単純な Flask の例:
/irisdev/app/community ディレクトリにある app.py というファイル:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
UI 構成

このセクションでは、以下を指定することで WSGI アプリケーションを構成できます。
アプリケーション名
これは WSGI アプリケーションのファイル名に対応します
例:
app.pyですが、.py拡張子を除きます :appコーラブル名
WSGI サーバーによって呼び出されるコーラブル関数
例:
appは、app.pyファイルのapp変数に対応しますapp = Flask(__name__)
WSGI アプリディレクトリ
- WSGI アプリケーションが存在するパス
- 例:
/irisdev/app/community
Python プロトコルタイプ
wsgiまたhasgiwsgiはデフォルト値で、この例で使用されているタイプですasgiは非同期アプリケーションに使用しますasgiは現時点ではa2wsgiアダプターによって同期的にサポートされています
デバッグ
- オンの場合、WSGI アプリケーションはデバッグモードで実行します
- WSGI アプリケーションへの変更は自動的に再読み込みされるため、開発目的において便利です
- オンの場合、WSGI アプリケーションはデバッグモードで実行します
CPF マージ
CPF を使用して WSGI アプリケーションを構成することも可能です。 構成の例を以下に示します。
[Actions]
CreateApplication:Name=/flask,NameSpace=IRISAPP,WSGIAppLocation=/irisdev/app/community/,WSGIAppName=app,WSGICallable=app,Type=2,DispatchClass=%SYS.Python.WSGI,MatchRoles=:%ALL,WSGIDebug=0,WSGIType=0
ログファイル
WSGI アプリケーションログは、インスタンスの mgr ディレクトリにある WSGI.log ファイルに保存されます。
例
以下は、IRIS で実行できる WSGI アプリケーションの例です。IRIS で様々な Python フレームワークを実行する方法を示すことを目的としています。
基本的に、ユースケースはすべてのフレームワークで同一です。
エンドポイント
/iris- IRISAPP ネームスペースに存在する上位 10 個のクラスを持つ JSON オブジェクトを返します。/interop- IRIS の相互運用性フレームワークをテストするための ping エンドポイント。/posts- Post オブジェクトの単純な CRUD エンドポイント。/comments- Comment オブジェクトの単純な CRUD エンドポイント。
オブジェクトモデル
Post オブジェクト:
- id
- title
- content
Comment オブジェクト:
- id
- post_id(Post の外部キー)
- content
Flask
Django
FastAPI
制限
- ASGI は現時点では
a2wsgiアダプターによって同期的にサポートされています。 tornadoアプリケーション(jupyter、streamlit など )は、WSGI に対応していないためサポートされていません。