Ir para o conteúdo

Webhooks

Visão Geral

O Vinyl suporta a capacidade de invocar um evento em resposta a um email, mensagem de texto ou uma chamada de API para um endpoint do Vinyl usando Webhooks. Webhooks são retornos de chamada HTTP definidos pelo usuário e normalmente são acionados por um evento. Quando o evento especificado ocorre, o site de origem faz uma solicitação HTTP para a URL configurada para o Webhook.

Um exemplo de Webhook no Vinyl é se um aplicativo Vinyl envia um email a um usuário solicitando que ele aprove ou rejeite uma transferência. O usuário responderia ao email digitando "aprovar" ou "desaprovar" no corpo da mensagem. Se o usuário responder com "aprovar", o Vinyl invoca um evento; "desaprovar", outro evento é invocado. Este recurso permite que o usuário responda ao email ou mensagem de texto sem sair do aplicativo.

Como Configurar um Webhook

Neste exemplo temos uma aplicação Vinyl que é utilizada para gerenciamento de pedidos. O usuário deseja criar um novo pedido por meio de uma chamada de API e receber o número do pedido na resposta da API. O objetivo do Webhook será gerar um novo registro de pedido, calcular o número do pedido e retornar esse número na resposta.

Nossa tabela Order tem um OrderID (PK), nome da empresa, nome do produto e OrderNumber:

tabelapedidos.png

Etapa 1: Adicionar Webhook em Servidores de Dados

  1. Criar servidor:

    • Navegue até IDE, Data Servers e clique em +Servidor
    • Atribua um Nome de servidor. Por exemplo: OrderWebhook
    • Selecione Tipo como Webhook API em serviços da web
    • Escolha o Conteúdo do tipo de conteúdo de solicitação/resposta apropriado. Em nosso exemplo, ambos são JSON
    • Clique em Salvar e feche o pop-up:

      orderdataserver.png

  2. Criar Endpoint:

    • Clique no botão Servidor de dados Detalhes
    • Clique no botão Endpoints
    • Clique em + Endpoint no painel Endpoints
    • Nome seu endpoint. Por exemplo: Pós-pedido

      Nota

      Este nome não aparecerá na URL do Webhook.

    • Selecione o Método HTTP que seu Webhook usa. Normalmente, este será um POST para atualizar informações em uma tabela.

    • Clique no ícone marca de seleção para salvar
  3. Crie parâmetros de Endpoint:

    • Clique em Discover no painel Endpoints
    • Se o Webhook aceitar um corpo (por exemplo, um POST usando o tipo de conteúdo JSON ou XML Request), forneça uma amostra de Corpo da solicitação. Para nosso exemplo, nosso JSON é:

      {
          "Company": "Jitterbit",
          "Product": "Vinyl"
      }
      

      (Iremos gerar o OrderID e o OrderNumber como parte dos eventos acionados pelo Webhook)

      webhookendpoint.png

    • Clique em Salvar

    • Clique em Descobrir. Isso adicionará automaticamente os parâmetros de Endpoint de entrada.
  4. Se desejar, adicione o parâmetro de endpoint de resposta. Em nosso exemplo, seria o tipo String, comprimento -1 caracteres, sem valor de teste, nenhum tipo selecionado para Cookie/Cabeçalho/Consulta e Direção é Saída.

Etapa 2: Adicione Webhook ao Seu Aplicativo

  1. Navegue até App Workbench > Fontes de dados
  2. Clique em + Fonte
  3. Selecione Link para fonte existente
  4. Clique em Avançar
  5. Selecione REST Webhook API configurado na Etapa 1
  6. Clique no botão Link
  7. Revise o resumo do desempenho do Vinyl e clique em Concluído

Etapa 3: Crie uma Regra de Negócios de Webhook

  1. Navegue até App Workbench > Regras.
  2. Confirme se a Fonte de dados do aplicativo selecionada é a fonte de dados do Webhook recém-criada e não a fonte de dados do aplicativo
  3. Clique em + Regra

    appdatasources.png

  4. Atribua um Nome. Por exemplo: Pedido (Webhook)

  5. Selecione Webhook como finalidade
  6. Selecione a fonte de dados do Webhook como Fonte de dados de origem
  7. Defina Target para o endpoint do Webhook
  8. Clique em Salvar
  9. Adicione sua tabela Endpoint e selecione todas as colunas. Em nosso exemplo, esta é a tabela PostOrder.

Etapa 4: Criar Regras de Negócios XP CRUD

Crie uma Regra de Negócio XP CRUD que Insere o valor recebido do Webhook em uma tabela na Fonte de Dados da sua Aplicação. Isso deve ser registrado na fonte de dados do Webhook como o objeto Webhook que acabamos de criar. Algumas notas:

  • A tabela de pedidos deve permitir leitura/gravação pública, que é configurável nas configurações de caso extremo da tabela de pedidos no design da tabela
  • A camada de destino deve ser definida como Camada Lógica

Adicionaremos uma coluna para gerar um PK usando o newuuid() funcionar e adicionar as colunas Empresa e Produto do nosso objeto webhook com os alvos apropriados:

orderxpcrud.png

xpcolumns.png

Nota

Não precisamos adicionar o OrderNumber porque ele é gerado como parte do evento Insert da tabela Order

Etapa 5: Crie uma Regra de Negócios XP CRUD

Crie uma regra de negócios XP CRUD que atualize e grave uma resposta com o OrderNumber do novo pedido.

  1. Crie uma nova regra XP CRUD registrada na fonte de dados Webhook. Por exemplo, PostOrder (resposta de atualização)
  2. Defina a ação como Atualizar
  3. Fonte de dados de origem para a fonte de dados do seu aplicativo
  4. Fonte de dados de destino para a fonte de dados do seu Webhook
  5. Defina a camada de destino como Camada Lógica
  6. Defina o destino para seu objeto Webhook. Por exemplo, Encomendar Webhook
  7. Adicionar tabela de pedidos da fonte de dados do aplicativo
  8. Adicione a coluna OrderNumber visando a coluna Response
  9. Adicione a cláusula Where que filtra com base na ordem recém-gerada (utilizamos a função gerada para recuperar o OrderID gerado neste evento)

    postxpexample.png

Nota

A função gerada retorna uma string, então precisamos converter o OrderID como uma string para que isso funcione

Etapa 6: Adicionar as Regras de Negócios CRUD Como Ações

Adicione as duas regras de negócios CRUD criadas ao evento de inserção da camada lógica da regra de negócios do Webhook.

insertevent.png

Etapa 7: Expor o Webhook ao Mundo

Crie um Endpoint para seu aplicativo. Isso pode já ter sido feito para sua aplicação.

  1. Navegue até Vinyl IDE > APIs REST (em Connect) > Webhooks
  2. Clique no botão Gerenciar Endpoints
  3. Selecione o aplicativo para o qual deseja inserir o valor do endpoint. Por exemplo: WebhookDocumentation.
  4. Clique no ícone de edição de lápis do aplicativo que você está configurando
  5. Insira o valor do Endpoint no campo Endpoint. Por exemplo WebhookDoc
  6. Clique em continuar para salvar
  7. Para configurar o objeto Webhook, no painel Webhooks clique em +Webhook
  8. Selecione seu objeto Webhook. Ele selecionará automaticamente um nome de Endpoint. Esta se tornará a parte do webhook da URL do Webhook.
  9. Clique em Salvar

    exposewebhook.png

Etapa 8: Crie uma Chave de API para um Usuário Acessar Este Webhook

Criaremos uma chave de API básica e a atribuiremos a um usuário para acessar este Webhook. Isso pode ser feito uma vez para um usuário do serviço ou várias vezes para usuários individuais.

  1. Navegue até IDE, Provedores de segurança
  2. Em Autenticação do usuário, crie um registro do tipo Autenticação básica HTTP se não existir. Se isso acontecer, você pode pular esta etapa
  3. Navegue até IDE, Gerenciamento de usuários
  4. Selecione o usuário que precisa de uma chave
  5. Em Autenticação clique em Chaves
  6. Clique em Criar
  7. Para Provedor, selecione o provedor de segurança do tipo Autenticação básica HTTP nas etapas 1 e 2
  8. Clique em Salvar
  9. Anote o Identificador e a Chave gerados, pois essas informações não estarão disponíveis novamente

Etapa 9: Teste

Você pode testar este Webhook usando Postman ou Insomnia. Envie uma chamada POST API com o corpo semelhante ao corpo da amostra usado para criar os parâmetros na etapa 1. Você usará a autenticação básica com o identificador como nome de usuário e a chave como a senha da etapa anterior.

Para testar, use o link: https://<url>/webhook/v1/<application-endpoint>/<endpoint>

No cenário em que nenhuma autenticação é necessária, em vez de configurar uma chave x-api no cabeçalho, você pode ajustar o URL para uma destas opções:

  1. https://{{identificador do usuário da Etapa 8.9}}:{{chave do usuário da Etapa 8.9}}@{{url da etapa 9}} (para ser usado se o provedor for http basic auth sem parâmetros)

    Cuidado

    O método básico HTTP descrito acima requer que o cabeçalho Authorization seja incluído na payload recebida. Para contornar isso, use o método API Key.

  2. https://{{url da etapa 9}}?apiKey={{chave do usuário da Etapa 8.9}} (a ser usado se o provedor for uma chave de API e as propriedades incluírem HttpHeaderName 'X-API-Key')