Retornos de chamada

Este tópico descreve os retornos de chamada disponíveis para comunicação entre aplicativos.

O Snowflake Native App Framework fornece retornos de chamada para ajudar a gerenciar o ciclo de vida do app. Você pode usar esses retornos de chamada para aprimorar a funcionalidade e o fluxo de trabalho do seu app.

Para usar retornos de chamada, adicione-os à seção lifecycle_callbacks do arquivo de manifesto, como no exemplo a seguir:

lifecycle_callbacks:
    before_configuration_change: app_schema.before_config_change_callback
Copy

Tipos de retornos de chamada

O Snowflake Native App Framework fornece retornos de chamada síncronos e assíncronos.

Retornos de chamada síncronos

Os retornos de chamada síncronos são chamados como parte do acionamento do comando SQL. Retornos de chamada síncronos bloqueiam o comando SQL de chamada. Se o retorno de chamada retornar um erro, o comando também retornará um erro, e a mensagem de erro do retorno de chamada será retornada como parte da mensagem de erro do comando SQL.

Os retornos de chamada síncronos são executados em um warehouse, então o procedimento de chamada deve ter um warehouse de sessão definido.

Retornos de chamada assíncronos

Os retornos de chamada assíncronos são executados em segundo plano, após concluir o comando SQL de chamada. Retornos de chamada assíncronos não bloqueiam o comando SQL de chamada, e erros em retornos de chamada assíncronos não são retornados pelo comando de chamada.

Para garantir que um retorno de chamada assíncrono tenha as informações mais atuais, a assinatura do retorno de chamada não fornece informações de estado ou status. Em vez disso, o retorno de chamada deve recuperar as informações mais atuais usando comandos SQL apropriados, como SHOW CONFIGURATIONS ou SHOW SPECIFICATIONS. Consulte a descrição de cada retorno de chamada assíncrono para obter mais informações.

O valor de retorno dos retornos de chamada assíncronos é ignorado.

Cuidado

A ordem de execução dos retornos de chamada assíncronos não é garantida. Seu app não deve depender da ordem dos retornos de chamada assíncronos para realizar as operações.

Permissões

Os procedimentos de retorno de chamada listados neste tópico não precisam ser concedidos a nenhuma função de aplicativo. O procedimento pode ser interno ao app e não precisa ser executado pelo consumidor. O Snowflake Native App Framework aciona o retorno de chamada.

Retornos de chamada de especificação e de conexão

Tanto after_specification_change quanto after_server_connection_change são executados quando uma especificação é aprovada ou recusada. Estas são as diferenças entre os dois retornos de chamada:

  • after_specification_change faz parte da estrutura de especificação do aplicativo. Ele só é acionado quando o consumidor aprova ou recusa uma solicitação de especificação.

  • after_server_connection_change faz parte da estrutura de comunicação entre aplicativos. Ele é acionado por qualquer operação que impacte direta ou indiretamente o estado de conexão da especificação do aplicativo, incluindo o seguinte:

    • Aprovação de uma especificação

    • Rejeição de uma especificação aprovada

    • Descarte de uma especificação aprovada

    • Descarte do app de servidor

Use after_server_connection_change quando seu app precisa responder a alterações na própria conexão, como uma conexão que está sendo estabelecida, que foi perdida ou quando o app de servidor está sendo excluído. Esse retorno de chamada fornece um rastreamento de conexão melhor porque abrange um intervalo maior de eventos do que a aprovação de especificação sozinha.

Use after_specification_change quando seu app só precisa responder à aprovação ou recusa de uma solicitação de especificação, ou para processar tipos de especificação de aplicativo diferentes de CONNECTION.

Referência de retorno de chamada

As seguintes categorias de retornos de chamada são fornecidas para Snowflake Native Apps:

Retornos de chamada de configuração

Esses retornos de chamada são acionados quando uma configuração é alterada.

validate_configuration_change

Este retorno de chamada é síncrono.

Este retorno de chamada é acionado como parte do comando ALTER APPLICATION SET CONFIGURATION VALUE. Este retorno de chamada permite que o aplicativo execute validação personalizada adicional no valor fornecido pelo aplicativo do servidor. Se o retorno de chamada falhar (por exemplo, por causa de um erro de sintaxe) ou se o retorno de chamada resultar em um erro, o comando de definição falha e o novo valor não é definido.

Assinatura
validate_configuration_change(configuration_name, configuration_value)
Copy
Parâmetros
  • configuration_name: o nome do objeto de configuração.

  • configuration_value: o valor fornecido pelo aplicativo do servidor.

Valor de retorno

O retorno de chamada deve retornar uma cadeia de caracteres no seguinte formato JSON para indicar sucesso ou erro na validação.

{
  "type": "SUCCESS | ERROR",
  "payload":{
      "error_message": "Error message indicating the validation failure"
  }
}
Copy

Se a função retornar um type de ERROR, a mensagem de erro é retornada como parte da mensagem de erro SQL do comando SET. Se a função retornar um type de SUCCESS, a mensagem de erro é ignorada.

before_configuration_change

Este retorno de chamada é síncrono. Este retorno de chamada é acionado como parte dos comandos ALTER APPLICATION SET CONFIGURATION VALUE e ALTER APPLICATION UNSET CONFIGURATION. Este retorno de chamada permite que o aplicativo execute outras operações com base no valor de configuração definido. O valor passado para o retorno de chamada é nulo para o comando ALTER APPLICATION UNSET CONFIGURATION.

Assinatura
before_configuration_change(configuration_name, configuration_value)
Copy
Parâmetros
  • configuration_name: o nome do objeto de configuração.

  • configuration_value: o valor fornecido pelo aplicativo do servidor.

Valor de retorno

O valor do retorno de chamada é ignorado.

after_configuration_change

Este retorno de chamada é assíncrono. Este retorno de chamada é acionado após os comandos ALTER APPLICATION SET CONFIGURATION VALUE e ALTER APPLICATION UNSET CONFIGURATION serem concluídos. Este retorno de chamada permite que o aplicativo do cliente seja notificado quando um valor é fornecido pelo aplicativo do servidor.

Assinatura
after_configuration_change(configuration_name)
Copy
Parâmetros
  • configuration_name: o nome do objeto de configuração.

Recuperação do estado mais recente

Na função de retorno de chamada, o seguinte trecho de código pode ser usado para recuperar o status e o valor atuais da configuração:

session.sql(f"""
  SHOW CONFIGURATIONS ->>
      SELECT "status", "value"
      FROM $1
      WHERE "name" = '{configuration_name}';
  """);
Copy

Retornos de chamada de conexão

Estes retornos de chamada são acionados quando o status de uma conexão muda.

after_server_connection_change

Este retorno de chamada é assíncrono. Esse retorno de chamada é acionado por qualquer operação que impacte direta ou indiretamente o estado de conexão da especificação do aplicativo, incluindo o seguinte:

  • Aprovação de uma especificação

  • Rejeição de uma especificação aprovada

  • Descarte de uma especificação aprovada

  • Descarte do app de servidor

Assinatura
after_server_connection_change(server_name)
Copy
Parâmetros
  • server_name: O nome do aplicativo servidor para o qual a conexão foi alterada.

Recuperação do estado mais recente

Na função de retorno de chamada, o seguinte trecho de código recupera o status da conexão atual com o aplicativo servidor:

session.sql(f"""
  SHOW SPECIFICATIONS ->>
  SELECT "status"
  FROM $1
  WHERE PARSE_JSON("definition"):"SERVER_APPLICATION"::STRING = '{server_name}';
  """);
Copy

after_client_connection_change

Este retorno de chamada é assíncrono. Esse retorno de chamada é acionado por qualquer operação que impacte direta ou indiretamente o estado de conexão da especificação do aplicativo, incluindo o seguinte:

  • Aprovação de uma especificação

  • Rejeição de uma especificação aprovada

  • Descarte de uma especificação aprovada

  • Descarte do app cliente

Assinatura
after_client_connection_change(client_name)
Copy
Parâmetros
  • client_name: O nome do aplicativo cliente para o qual a conexão foi alterada.

Recuperação do estado mais recente

No retorno de chamada, o seguinte trecho de código recupera quais funções (se houver) foram concedidas ao app 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

Este retorno de chamada é assíncrono. Este retorno de chamada é chamado após a versão do aplicativo do servidor ou o número do patch ser alterado. Isso permite que o aplicativo do cliente reaja à atualização ou ao downgrade.

Assinatura
after_server_version_change(server_name)
Copy
Parâmetros
  • server_name: O nome do aplicativo servidor para o qual a versão foi alterada.

Recuperação do estado mais recente

No retorno de chamada, o seguinte trecho de código pode ser usado para recuperar a versão atual do aplicativo servidor:

session.sql(f"""
  SHOW APPLICATIONS ->>
  SELECT "version", "patch"
  FROM $1
  WHERE "name" = {server_name}
  """);
Copy

Retornos de chamada de especificação

O retorno de chamada é acionado quando uma especificação de qualquer tipo tem uma alteração de status

  • after_specification_change

after_specification_change

Este retorno de chamada é assíncrono. Este retorno de chamada é acionado após os comandos ALTER APPLICATION APPROVE SPECIFICATION ou ALTER APPLICATION DECLINE SPECIFICATION serem concluídos. Esse retorno de chamada permite que o app seja notificado quando seu status de especificação for alterado.

Esse retorno de chamada substitui a funcionalidade do retorno de chamada specification_action. Você só pode especificar after_specification_change ou specification_action no arquivo de manifesto. Para mais informações sobre o retorno de chamada specification_action, consulte Uso de funções de retorno de chamada com especificações de aplicativo.

Assinatura
after_specification_change(spec_name)
Copy
Parâmetros
  • spec_name: O nome da especificação do aplicativo que foi aprovada ou recusada.

Recuperação do estado mais recente

Na função de retorno de chamada, o seguinte trecho de código pode ser usado para recuperar o status atual da especificação:

session.sql(f"""
  SHOW SPECIFICATIONS ->>
      SELECT "status"
      FROM $1
      WHERE "name" = '{spec_name}';
  """);
Copy