Rappels¶
Cette rubrique décrit les rappels disponibles pour la communication inter-applications.
Le Snowflake Native App Framework fournit des rappels pour aider à gérer le cycle de vie de l’application. Vous pouvez utiliser ces rappels pour améliorer les fonctionnalités de votre application et le workflow.
Pour utiliser les rappels, ajoutez-les à la section lifecycle_callbacks du fichier manifeste, comme dans l’exemple suivant :
lifecycle_callbacks:
before_configuration_change: app_schema.before_config_change_callback
Types de rappels¶
Le Snowflake Native App Framework fournit des rappels synchrones et asynchrones.
Rappels synchrones¶
Les rappels synchrones sont appelés dans le cadre de la commande SQL de déclenchement. Les rappels synchrones bloquent la commande SQL d’appel. Si le rappel renvoie une erreur, la commande renverra une erreur, et le message d’erreur du rappel sera renvoyé dans le cadre du message d’erreur SQL de la commande.
Les rappels synchrones s’exécutent dans un entrepôt, de sorte que la procédure appelante doit avoir un entrepôt de session défini.
Rappels asynchrones¶
Les rappels asynchrones s’exécutent en arrière-plan, une fois la commande SQL d’appel terminée. Les rappels asynchrones ne bloquent pas la commande SQL d’appel, et les erreurs dans les rappels asynchrones ne sont pas renvoyées par la commande d’appel.
Pour garantir qu’un rappel asynchrone dispose des informations les plus récentes, la signature du rappel ne fournit pas d’informations d’état ou de statut. Au lieu de cela, le rappel doit récupérer les informations les plus récentes en utilisant les commandes SQL appropriées, telles que SHOW CONFIGURATIONS ou SHOW SPECIFICATIONS. Consultez la description de chaque rappel asynchrone pour plus d’informations.
La valeur de retour des rappels asynchrones est ignorée.
Prudence
L’ordre d’exécution des rappels asynchrones n’est pas garanti. Votre application ne doit pas s’appuyer sur l’ordre des rappels asynchrones pour effectuer ses opérations.
Autorisations¶
Les procédures de rappel énumérées dans cette rubrique ne sont pas tenues d’être attribuées à un rôle d’application. La procédure peut être interne à l’application et n’a pas besoin d’être exécutée par le consommateur. Le Snowflake Native App Framework déclenche le rappel.
Rappels de spécification ou de connexion¶
after_specification_change et after_server_connection_change sont tous deux exécutés lorsqu’une spécification est approuvée ou rejetée. Les différences entre les deux rappels sont les suivantes :
after_specification_change fait partie du cadre de la spécification d’application. Il n’est déclenché que lorsque le consommateur approuve ou rejette une demande de spécification.
after_server_connection_change fait partie du cadre de la communication inter-applications. Il est déclenché par toute opération ayant un impact direct ou indirect sur l’état de connexion de la spécification d’application, notamment :
Approbation d’une spécification
Refus d’une spécification approuvée
Suppression d’une spécification approuvée
Suppression de l’application du serveur
Utilisez after_server_connection_change lorsque votre application doit répondre à des changements dans la connexion elle-même, comme une connexion établie ou perdue, ou la suppression de l’application serveur. Ce rappel offre un meilleur suivi des connexions, car il couvre un éventail d’événements plus large que l’approbation des spécifications uniquement.
Utilisez after_specification_change lorsque votre application ne doit répondre qu’à l’approbation ou au refus d’une demande de spécification, ou lors du traitement de types de spécifications d’application autres que CONNECTION.
Référence de rappel¶
Les catégories de rappels suivantes sont fournies pour les Snowflake Native Apps :
Rappels de configuration¶
Ces rappels sont déclenchés lorsqu’une configuration change.
validate_configuration_change¶
Ce rappel est un rappel synchrone.
Ce rappel est appelé dans le cadre de la commande ALTER APPLICATION SET CONFIGURATION VALUE. Ce rappel permet à l’application d’effectuer une validation personnalisée supplémentaire sur la valeur fournie par l’application serveur. Si le rappel échoue, par exemple en raison d’une erreur de syntaxe, ou si le rappel renvoie une erreur, la commande définie échoue et la nouvelle valeur n’est pas définie.
Signature¶
validate_configuration_change(configuration_name, configuration_value)
Paramètres¶
configuration_name: Nom de l’objet de configuration.configuration_value: Valeur fournie par l’application serveur.
Valeur de retour¶
Le rappel doit renvoyer une chaîne au format JSON suivant pour indiquer une réussite ou une erreur de validation.
{
"type": "SUCCESS | ERROR",
"payload":{
"error_message": "Error message indicating the validation failure"
}
}
Si la fonction renvoie un type d’ERROR, le message d’erreur est renvoyé dans le cadre du message d’erreur SQL de la commande SET. Si la fonction renvoie un type de SUCCESS, le message d’erreur est ignoré.
before_configuration_change¶
Ce rappel est un rappel synchrone. Ce rappel est appelé dans le cadre des commandes ALTER APPLICATION SET CONFIGURATION VALUE et ALTER APPLICATION UNSET CONFIGURATION. Ce rappel permet à l’application d’effectuer d’autres opérations en fonction de la valeur de configuration définie. La valeur transmise dans le rappel est nulle pour la commande ALTER APPLICATION UNSET CONFIGURATION.
Signature¶
before_configuration_change(configuration_name, configuration_value)
Paramètres¶
configuration_name: Nom de l’objet de configuration.configuration_value: Valeur fournie par l’application serveur.
Valeur de retour¶
La valeur de retour du rappel est ignorée.
after_configuration_change¶
Ce rappel est un rappel asynchrone. Ce rappel est appelé une fois les commandes ALTER APPLICATION SET CONFIGURATION VALUE et ALTER APPLICATION UNSET CONFIGURATION terminées. Ce rappel permet d’avertir l’application cliente lorsqu’une valeur est fournie par l’application serveur.
Signature¶
after_configuration_change(configuration_name)
Paramètres¶
configuration_name: Nom de l’objet de configuration.
Récupération du dernier état¶
Dans le rappel, l’extrait de code suivant peut être utilisé pour récupérer l’état actuel et la valeur de la configuration :
session.sql(f"""
SHOW CONFIGURATIONS ->>
SELECT "status", "value"
FROM $1
WHERE "name" = '{configuration_name}';
""");
Rappels de connexion¶
Ces rappels sont déclenchés lorsque l’état d’une connexion change.
after_server_connection_change¶
Ce rappel est un rappel asynchrone. Ce rappel est déclenché par toute opération ayant un impact direct ou indirect sur l’état de connexion de la spécification d’application, notamment :
Approbation d’une spécification
Refus d’une spécification approuvée
Suppression d’une spécification approuvée
Suppression de l’application du serveur
Signature¶
after_server_connection_change(server_name)
Paramètres¶
server_name: Nom de l’application serveur pour laquelle la connexion a été modifiée.
Récupération du dernier état¶
Dans le rappel, l’extrait de code suivant récupère l’état actuel de la connexion à l’application serveur :
session.sql(f"""
SHOW SPECIFICATIONS ->>
SELECT "status"
FROM $1
WHERE PARSE_JSON("definition"):"SERVER_APPLICATION"::STRING = '{server_name}';
""");
after_client_connection_change¶
Ce rappel est un rappel asynchrone. Ce rappel est déclenché par toute opération ayant un impact direct ou indirect sur l’état de connexion de la spécification d’application, notamment :
Approbation d’une spécification
Refus d’une spécification approuvée
Suppression d’une spécification approuvée
Suppression de l’application cliente
Signature¶
after_client_connection_change(client_name)
Paramètres¶
client_name: Nom de l’application cliente pour laquelle la connexion a été modifiée.
Récupération du dernier état¶
Dans le rappel, l’extrait de code suivant récupère les rôles, le cas échéant, qui ont été accordés à l’application cliente :
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¶
Ce rappel est un rappel asynchrone. Ce rappel est appelé après les modifications de la version ou du numéro de correctif de l’application serveur. Cela permet à l’application cliente de réagir à la mise à niveau ou à la rétrogradation.
Signature¶
after_server_version_change(server_name)
Paramètres¶
server_name: Nom de l’application serveur pour laquelle la version a changé.
Récupération du dernier état¶
Dans le rappel, l’extrait de code suivant peut être utilisé pour récupérer la version actuelle de l’application serveur :
session.sql(f"""
SHOW APPLICATIONS ->>
SELECT "version", "patch"
FROM $1
WHERE "name" = {server_name}
""");
Rappels de spécification¶
Le rappel est déclenché lorsqu’une spécification de tout type présente un changement d’état.
after_specification_change
after_specification_change¶
Ce rappel est un rappel asynchrone. Ce rappel est appelé une fois la commande ALTER APPLICATION APPROVE SPECIFICATION ou ALTER APPLICATION DECLINE SPECIFICATION terminée. Ce rappel permet à l’application d’être avertie lorsque son état de spécification est modifié.
Ce rappel remplace la fonctionnalité du rappel specification_action. Vous ne pouvez spécifier qu’une seule after_specification_change ou specification_action dans le fichier manifeste. Pour plus d’informations sur le rappel de specification_action, consultez Utiliser des fonctions de rappel avec des spécifications d’application.
Signature¶
after_specification_change(spec_name)
Paramètres¶
spec_name: Nom de la spécification d’application qui a été approuvée ou refusée.
Récupération du dernier état¶
Dans le rappel, l’extrait de code suivant peut être utilisé pour récupérer l’état actuel de la spécification :
session.sql(f"""
SHOW SPECIFICATIONS ->>
SELECT "status"
FROM $1
WHERE "name" = '{spec_name}';
""");