Callbacks¶
Unter diesem Thema werden die Callbacks beschrieben, die für die Kommunikation zwischen Apps zur Verfügung stehen.
Snowflake Native App Framework stellt Callbacks bereit, die die Verwaltung des Lebenszyklus der App unterstützen. Sie können diese Callbacks verwenden, um die Funktionalität Ihrer App zu erweitern und den Workflow zu verbessern.
Um Callbacks zu verwenden, fügen Sie diese zum lifecycle_callbacks-Abschnitt der Manifest-Datei hinzu, wie im folgenden Beispiel dargestellt:
lifecycle_callbacks:
before_configuration_change: app_schema.before_config_change_callback
Typen von Callbacks¶
Snowflake Native App Framework bietet synchrone und asynchrone Callbacks.
Synchrone Callbacks¶
Synchrone Callbacks werden als Teil des auslösenden SQL-Befehls aufgerufen. Synchrone Callbacks blockieren den aufrufenden SQL-Befehl. Wenn der Callback einen Fehler zurückgibt, gibt der Befehl einen Fehler zurück, und die Fehlermeldung des Callbacks wird als Teil der SQL-Fehlermeldung des Befehls zurückgegeben.
Synchrone Callbacks werden in einem Warehouse ausgeführt, sodass für die aufrufende Prozedur ein Sitzungs-Warehouse festgelegt werden muss.
Asynchrone Callbacks¶
Asynchrone Callbacks werden im Hintergrund ausgeführt, nachdem der aufrufende SQL -Befehl abgeschlossen wurde. Asynchrone Callbacks blockieren den aufrufenden SQL-Befehl nicht, und Fehler in asynchronen Callbacks werden vom aufrufenden Befehl nicht zurückgegeben.
Um sicherzustellen, dass ein asynchroner Callback über die aktuellsten Informationen verfügt, enthält die Callback-Signatur keine Zustands- oder Statusinformationen. Stattdessen sollte der Callback die aktuellen Informationen unter Verwendung der entsprechenden SQL-Befehle, wie SHOW CONFIGURATIONS oder SHOW SPECIFICATIONS, abrufen. Weitere Informationen finden Sie in den Beschreibungen zu jedem asynchronen Callback.
Der Rückgabewert von asynchronen Callbacks wird ignoriert.
Vorsicht
Die Ausführungsreihenfolge von asynchronen Callbacks ist nicht garantiert. Ihre App sollte sich nicht auf die Reihenfolge asynchroner Callbacks verlassen, um ihre Operationen auszuführen.
Berechtigungen¶
Die in diesem Thema aufgeführten Callback-Prozeduren müssen keiner Anwendungsrolle zugewiesen werden. Die Prozedur kann App-intern sein und muss nicht vom Verbrauchenden ausgeführt werden. Snowflake Native App Framework löst den Callback aus.
Spezifikations- im Vergleich zu Verbindungs-Callbacks¶
Sowohl after_specification_change als auch after_server_connection_change werden ausgeführt, wenn eine Spezifikation genehmigt oder abgelehnt wurde. Die Unterschiede zwischen den beiden Callbacks sind wie folgt:
after_specification_change ist Teil des Frameworks für Anwendungsspezifikationen. Er wird nur ausgelöst, wenn der Verbrauchende eine Spezifikationsanforderung genehmigt oder ablehnt.
after_server_connection_change ist Teil des Frameworks für die Kommunikation zwischen Apps. Er wird durch jede Operation ausgelöst, die sich direkt oder indirekt auf den Verbindungsstatus der Anwendungsspezifikation auswirkt, einschließlich der folgenden:
Genehmigen einer Spezifikation
Ablehnen einer genehmigten Spezifikation
Löschen einer genehmigten Spezifikation
Löschen der Server-Anwendung
Verwenden Sie after_server_connection_change, wenn Ihre App auf Änderungen in der Verbindung selbst reagieren muss, z. B. wenn eine Verbindung hergestellt wird, verloren geht oder die Server-Anwendung gelöscht wird. Dieser Callback bietet eine bessere Verbindungsverfolgung, da er einen größeren Bereich von Ereignissen abdeckt als nur die Genehmigung von Spezifikationen.
Verwenden Sie after_specification_change, wenn Ihre App nur auf die Genehmigung oder Ablehnung einer Spezifikationsanfrage reagieren muss, oder wenn Sie andere Anwendungsspezifikationstypen als CONNECTION verarbeiten.
Callback-Referenz¶
Die folgenden Kategorien von Callbacks sind für Snowflake Native Apps vorgesehen:
Konfigurations-Callbacks¶
Diese Callbacks werden ausgelöst, wenn sich eine Konfiguration ändert.
validate_configuration_change¶
Dieser Callback ist ein synchroner Callback.
Dieser Callback wird als Teil des ALTER APPLICATION SET CONFIGURATION VALUE-Befehls aufgerufen. Mit diesem Callback kann die App eine zusätzliche benutzerdefinierte Validierung des von der Server-App bereitgestellten Werts durchführen. Wenn der Callback fehlschlägt, z. B. bei einem Syntaxfehler, oder wenn der Callback einen Fehler zurückgibt, schlägt der set-Befehl fehl und der neue Wert wird nicht festgelegt.
Signatur¶
validate_configuration_change(configuration_name, configuration_value)
Parameter¶
configuration_name: Der Name des Konfigurationsobjekts.configuration_value: Der von der Server-App bereitgestellte Wert.
Rückgabewert¶
Der Callback muss eine Zeichenfolge im folgenden JSON-Format zurückgeben, um einen Erfolg oder einen Fehler bei der Validierung anzuzeigen.
{
"type": "SUCCESS | ERROR",
"payload":{
"error_message": "Error message indicating the validation failure"
}
}
Wenn die Funktion ERROR als type zurückgibt, wird die Fehlermeldung als Teil der SQL-Fehlermeldung des SET-Befehls zurückgegeben. Wenn die Funktion SUCCESS als type zurückgibt, wird die Fehlermeldung ignoriert.
before_configuration_change¶
Dieser Callback ist ein synchroner Callback. Dieser Callback wird als Teil des ALTER APPLICATION SET CONFIGURATION VALUE- und des ALTER APPLICATION UNSET CONFIGURATION-Befehls aufgerufen. Mit diesem Callback kann die App weitere Operationen auf der Grundlage des eingestellten Konfigurationswertes ausführen. Der im Callback übergebene Wert ist „null“ für den ALTER APPLICATION UNSET CONFIGURATION-Befehl.
Signatur¶
before_configuration_change(configuration_name, configuration_value)
Parameter¶
configuration_name: Der Name des Konfigurationsobjekts.configuration_value: Der von der Server-App bereitgestellte Wert.
Rückgabewert¶
Der Rückgabewert des Callbacks wird ignoriert.
after_configuration_change¶
Dieser Callback ist ein asynchroner Callback. Dieser Callback wird Abschluss der ALTER APPLICATION SET CONFIGURATION VALUE- und ALTER APPLICATION UNSET CONFIGURATION-Befehle aufgerufen. Mit diesem Callback kann die Client-App benachrichtigt werden, wenn ein Wert von der Server-App bereitgestellt wird.
Signatur¶
after_configuration_change(configuration_name)
Parameter¶
configuration_name: Der Name des Konfigurationsobjekts.
Abrufen des neuesten Status¶
Im Callback kann der folgende Codeausschnitt verwendet werden, um den aktuellen Status und Wert der Konfiguration abzurufen:
session.sql(f"""
SHOW CONFIGURATIONS ->>
SELECT "status", "value"
FROM $1
WHERE "name" = '{configuration_name}';
""");
Verbindungs-Callbacks¶
Diese Callbacks werden ausgelöst, wenn sich der Status einer Verbindung ändert.
after_server_connection_change¶
Dieser Callback ist ein asynchroner Callback. Dieser Callback wird durch jede Operation ausgelöst, die sich direkt oder indirekt auf den Verbindungsstatus der Anwendungsspezifikation auswirkt, einschließlich der folgenden:
Genehmigen einer Spezifikation
Ablehnen einer genehmigten Spezifikation
Löschen einer genehmigten Spezifikation
Löschen der Server-Anwendung
Signatur¶
after_server_connection_change(server_name)
Parameter¶
server_name: Der Name der Server-App, für die die Verbindung geändert wurde.
Abrufen des neuesten Status¶
Im Callback ruft der folgende Codeausschnitt den aktuellen Verbindungsstatus zur Server-App ab:
session.sql(f"""
SHOW SPECIFICATIONS ->>
SELECT "status"
FROM $1
WHERE PARSE_JSON("definition"):"SERVER_APPLICATION"::STRING = '{server_name}';
""");
after_client_connection_change¶
Dieser Callback ist ein asynchroner Callback. Dieser Callback wird durch jede Operation ausgelöst, die sich direkt oder indirekt auf den Verbindungsstatus der Anwendungsspezifikation auswirkt, einschließlich der folgenden:
Genehmigen einer Spezifikation
Ablehnen einer genehmigten Spezifikation
Löschen einer genehmigten Spezifikation
Löschen der Client-App
Signatur¶
after_client_connection_change(client_name)
Parameter¶
client_name: Der Name der Client-App, für die die Verbindung geändert wurde.
Abrufen des neuesten Status¶
Im Callback ruft der folgende Codeausschnitt ab, welche Rollen der Client-App ggf. zugewiesen wurden:
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¶
Dieser Callback ist ein asynchroner Callback. Dieser Callback wird aufgerufen, nachdem sich die Version oder die Patchnummer der Server-App geändert hat. Damit kann die Client-App auf das Upgrade oder Downgrade reagieren.
Signatur¶
after_server_version_change(server_name)
Parameter¶
server_name: Der Name der Server-App, für die sich die Version geändert hat.
Abrufen des neuesten Status¶
Im Callback kann der folgende Codeausschnitt verwendet werden, um die aktuelle Version der Server-App abzurufen:
session.sql(f"""
SHOW APPLICATIONS ->>
SELECT "version", "patch"
FROM $1
WHERE "name" = {server_name}
""");
Spezifikations-Callbacks¶
Der Callback wird ausgelöst, wenn eine Spezifikation eines beliebigen Typs eine Statusänderung aufweist
after_specification_change
after_specification_change¶
Dieser Callback ist ein asynchroner Callback. Dieser Callback wird nach Abschluss des ALTER APPLICATION APPROVE SPECIFICATION- oder ALTER APPLICATION DECLINE SPECIFICATION-Befehls aufgerufen. Mit diesem Callback kann die App benachrichtigt werden, wenn sich ihr Spezifikationsstatus ändert.
Dieser Callback ersetzt die Funktionalität des specification_action-Callbacks. Sie können entweder nur after_specification_change oder nur specification_action in der Manifest-Datei angeben. Weitere Informationen zum specification_action-Callback, finden Sie unter Callback-Funktionen mit App-Spezifikationen verwenden.
Signatur¶
after_specification_change(spec_name)
Parameter¶
spec_name: Der Name der Anwendungsspezifikation, die genehmigt oder abgelehnt wurde.
Abrufen des neuesten Status¶
Im Callback kann der folgende Codeausschnitt verwendet werden, um den aktuellen Status der Spezifikation abzurufen:
session.sql(f"""
SHOW SPECIFICATIONS ->>
SELECT "status"
FROM $1
WHERE "name" = '{spec_name}';
""");