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
Copy

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)
Copy
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"
  }
}
Copy

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)
Copy
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)
Copy
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}';
  """);
Copy

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)
Copy
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}';
  """);
Copy

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)
Copy
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())
  """);
Copy

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)
Copy
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}
  """);
Copy

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)
Copy
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}';
  """);
Copy