コールバック¶
このトピックでは、アプリ間の通信で使用可能なコールバックについて説明します。
|naf|は、アプリのライフサイクル管理に役立つコールバックを提供します。これらのコールバックを使用して、アプリの機能とワークフローを強化できます。
コールバックを使用するには、次の例のように、マニフェストファイルの lifecycle_callbacks セクションに追加します。
lifecycle_callbacks:
before_configuration_change: app_schema.before_config_change_callback
コールバックの型¶
Snowflake Native App Framework は同期コールバックと非同期コールバックを提供します。
同期コールバック¶
同期コールバックは、SQLコマンドのトリガーの一部として呼び出されます。同期コールバックは呼び出し元のSQLコマンドをブロックします。コールバックがエラーを返す場合、コマンドはエラーを返し、コールバックのエラーメッセージはコマンドのSQLエラーメッセージの一部として返されます。
同期コールバックはウェアハウスで実行されるため、呼び出しプロシージャにはセッションウェアハウスが設定されている必要があります。
非同期コールバック¶
非同期コールバックは、SQLコマンドの呼び出しが完了した後、バックグラウンドで実行されます。非同期コールバックは呼び出し元SQLコマンドをブロックせず、非同期コールバックのエラーは、呼び出し元のコマンドによって返されません。
非同期コールバックが最新の情報を持っていることを確認するために、コールバック署名は状態またはステータス情報を提供しません。代わりに、コールバックは、:doc:`SHOW CONFIGURATIONS </sql-reference/sql/show-configurations>`や:doc:`SHOW SPECIFICATIONS </sql-reference/sql/show-specifications>`など、適切なSQLコマンドを使用して最新の情報を取得する必要があります。詳細については、各非同期コールバックの説明をご参照ください。
非同期コールバックからの戻り値は無視されます。
注意
非同期コールバックの実行順序は保証されません。アプリは、操作を実行するにあたって非同期コールバックの順序に依存するべきではありません。
権限¶
このトピックにリストされているコールバックプロシージャは、アプリケーションロールに付与する必要はありません。プロシージャはアプリの内部に配置でき、コンシューマーが実行できるようにする必要はありません。コールバックは|naf|によってトリガーされます。
仕様と接続コールバック¶
:ref:`label-native_apps_specification_callbacks_after_specification_change`および:ref:`label-native_apps_connection_callbacks_after_server_connection_change`はどちらも、仕様が承認または拒否されたときに実行されます。2つのコールバックの違いは次のとおりです。
after_specification_change はアプリケーション仕様フレームワークの一部です。これは、コンシューマーが仕様リクエストを承認または拒否した場合にのみトリガーされます。
after_server_connection_change はアプリ間通信フレームワークの一部です。これは、アプリケーション仕様の接続状態に直接的または間接的に影響を与えるあらゆる操作によってトリガーされます。これには以下が含まれます。
仕様の承認
承認された仕様の拒否
承認された仕様のドロップ
サーバーアプリのドロップ
接続の確立、切断、サーバーアプリの削除など、接続自体の変化にアプリが対応する必要がある場合は、:ref:`label-native_apps_connection_callbacks_after_server_connection_change`を使用してください。このコールバックは、仕様の承認飲みの場合よりも幅広いイベントをカバーするため、より優れた接続追跡を提供します。
アプリケーションが仕様リクエストの承認または拒否にのみ対応する必要がある場合、または``CONNECTION``以外のアプリケーション仕様タイプを処理する場合は、:ref:`label-native_apps_specification_callbacks_after_specification_change`を使用します。
コールバックリファレンス¶
|native-apps|には、次のカテゴリのコールバックが提供されています。
構成コールバック¶
これらのコールバックは、:doc:`構成</developer-guide/native-apps/app-configuration>`が変更されたときにトリガーされます。
validate_configuration_change¶
このコールバックは同期コールバックです。
このコールバックは、 ALTER APPLICATION SET CONFIGURATION VALUE コマンドの一部として呼び出されます。このコールバックにより、アプリはサーバーアプリから提供された値に対して追加のカスタム検証を実行できます。構文エラーなどでコールバックが失敗した場合、またはコールバックがエラーを返す場合、設定コマンドは失敗し、新しい値は設定されません。
署名¶
validate_configuration_change(configuration_name, configuration_value)
パラメーター¶
configuration_name:構成オブジェクトの名前。configuration_value:サーバーアプリによって提供される値。
戻り値¶
コールバックは、以下のJSON形式の文字列を返して検証の成功またはエラーを示す必要があります。
{
"type": "SUCCESS | ERROR",
"payload":{
"error_message": "Error message indicating the validation failure"
}
}
関数が type ERROR を返すと、 SET コマンドのSQLエラーメッセージの一部としてエラーメッセージが返されます。関数が type SUCCESS を返すと、エラーメッセージは無視されます。
before_configuration_change¶
このコールバックは同期コールバックです。このコールバックは、 ALTER APPLICATION SET CONFIGURATION VALUE および ALTER APPLICATION UNSET CONFIGURATION コマンドの一部として呼び出されます。このコールバックにより、アプリは設定値セットに基づいてさらに操作を実行できます。コールバックに渡される値は、 ALTER APPLICATION UNSET CONFIGURATION コマンドに対してnullです。
署名¶
before_configuration_change(configuration_name, configuration_value)
パラメーター¶
configuration_name:構成オブジェクトの名前。configuration_value:サーバーアプリによって提供される値。
戻り値¶
コールバックの戻り値は無視されます。
after_configuration_change¶
このコールバックは非同期コールバックです。このコールバックは、 ALTER APPLICATION SET CONFIGURATION VALUE および ALTER APPLICATION UNSET CONFIGURATION コマンドが完了した後に呼び出されます。このコールバックにより、サーバーアプリから値が提供されたときに、クライアントアプリに通知することができます。
署名¶
after_configuration_change(configuration_name)
パラメーター¶
configuration_name:構成オブジェクトの名前。
最新の状態の取得¶
コールバックでは、以下のコードスニペットを使用して、構成の現在のステータスと値を取得できます。
session.sql(f"""
SHOW CONFIGURATIONS ->>
SELECT "status", "value"
FROM $1
WHERE "name" = '{configuration_name}';
""");
接続コールバック¶
これらのコールバックは、接続のステータスが変更されたときにトリガーされます。
after_server_connection_change¶
このコールバックは非同期コールバックです。このコールバックは、アプリケーション仕様の接続状態に直接的または間接的に影響を与えるあらゆる操作によってトリガーされます。これには以下が含まれます。
仕様の承認
承認された仕様の拒否
承認された仕様のドロップ
サーバーアプリのドロップ
署名¶
after_server_connection_change(server_name)
パラメーター¶
server_name:接続が変更されたサーバーアプリの名前。
最新の状態の取得¶
コールバックでは、次のコードスニペットはサーバーアプリへの現在の接続ステータスを取得します。
session.sql(f"""
SHOW SPECIFICATIONS ->>
SELECT "status"
FROM $1
WHERE PARSE_JSON("definition"):"SERVER_APPLICATION"::STRING = '{server_name}';
""");
after_client_connection_change¶
このコールバックは非同期コールバックです。このコールバックは、アプリケーション仕様の接続状態に直接的または間接的に影響を与えるあらゆる操作によってトリガーされます。これには以下が含まれます。
仕様の承認
承認された仕様の拒否
承認された仕様のドロップ
クライアントアプリのドロップ
署名¶
after_client_connection_change(client_name)
パラメーター¶
client_name:接続が変更されたクライアントアプリの名前。
最新の状態の取得¶
コールバックでは、次のコードスニペットを使用して、クライアントアプリに付与されているロール(ある場合)が取得されます。
session.sql(f"""
SHOW GRANTS TO APPLICATION {client_name} ->>
SELECT "name"
FROM $1
WHERE "granted_on" = 'APPLICATION_ROLE'
AND STARTSWITH("name", CURRENT_DATABASE())
""");
after_server_version_change¶
このコールバックは非同期コールバックです。このコールバックは、サーバーアプリのバージョン番号またはパッチ番号が変更された後に呼び出されます。これにより、クライアントアプリはアップグレードまたはダウングレードに対応することができます。
署名¶
after_server_version_change(server_name)
パラメーター¶
server_name:バージョンが変更されたサーバーアプリの名前。
最新の状態の取得¶
コールバックでは、次のコードスニペットを使用して、サーバーアプリの現在のバージョンを取得できます。
session.sql(f"""
SHOW APPLICATIONS ->>
SELECT "version", "patch"
FROM $1
WHERE "name" = {server_name}
""");
仕様コールバック¶
コールバックは、いずれかの型の仕様でステータスが変更されたときにトリガーされます。
after_specification_change
after_specification_change¶
このコールバックは非同期コールバックです。このコールバックは ALTER APPLICATION APPROVE SPECIFICATION または ALTER APPLICATION DECLINE SPECIFICATION コマンドが完了した後に呼び出されます。このコールバックにより、仕様ステータスが変更されたときにアプリに通知されます。
このコールバックは、specification_action`コールバックの機能を置き換えます。マニフェストファイル内で、 :code:`after_specification_change または specification_action のいずれかのみを指定できます。specification_action コールバックについては、 アプリ仕様でのコールバック関数の使用 をご参照ください。
署名¶
after_specification_change(spec_name)
パラメーター¶
spec_name:承認または拒否されたアプリケーション仕様の名前。
最新の状態の取得¶
コールバックでは、次のコードスニペットを使用して仕様の現在のステータスを取得できます。
session.sql(f"""
SHOW SPECIFICATIONS ->>
SELECT "status"
FROM $1
WHERE "name" = '{spec_name}';
""");