Transformações

Quando você aplica webhooks no IBM® Verify, isso envolve entrar em contato com sistemas remotos, que nem sempre são criados e implementados pelo administrador do locatário. Como esses sistemas remotos podem expor APIs rígidas, pode ser necessário que a carga de solicitação ou resposta de uma chamada de webhook seja alterada para obter uma integração funcional entre o Verify e o sistema remoto.

Para atingir essa integração, os webhooks expõem uma capacidade que é chamada de conversões. Os administradores podem usar esse recurso para criar expressões que alteram a solicitação e a resposta HTTP.

Uma conversão de webhook é uma expressão do CEL, cuja saída é um mapa que contém chaves conhecidas. Essas chaves são mapeadas para as partes que compõem uma solicitação ou resposta HTTP. Cada chave na saída de conversão é opcional e, se não for fornecida, essa parte da solicitação ou resposta não será modificada.

Conversões de saída

As conversões de saída se aplicam à solicitação HTTP antes que ela seja enviada ao destino do webhook.

A tabela a seguir mostra os argumentos de entrada de conversão de saída.
Nome Tipo Somente leitura Notas
body map[string]object N
header map[string]list[string] N
method string N
path string N
host string Y Presente apenas quando o host é consistente em todas as URLs configuradas.
Esses parâmetros podem ser referenciados de acordo com a especificação do CEL.
A expressão do CEL é um mapa declarado com chaves conhecidas, conforme mostrado no exemplo a seguir.
{
  "body":body,
  "header":header,
  "path":path   
}
Observação: não é necessário incluir chaves quando não forem feitas alterações. O exemplo anterior é apenas para ilustrar o formato do mapa.
A tabela a seguir mostra as chaves de conversão de saída.
Nome Tipo Notas
body map[string]object ou string
header map[string]list[string] ou map[string]string
method string
path string
query map[string]string ou map[string]list[string]
skip_authentication boolean Se definido como true, o mecanismo de autenticação configurado não é usado. Use essa chave para situações em que a conversão está incluindo os detalhes de autorização na solicitação.
title_case_bearer boolean Use essa transformação em situações em que a API de destino exija letras maiúsculas para processar corretamente o cabeçalho. Quando definido como true, o especificador bearer do tipo de autorização no authorization cabeçalho, se houver, é convertido para usar maiúsculas no início das palavras (bearer -> Bearer).

Conversões de entrada

As conversões de entrada se aplicam à resposta HTTP conforme ela é recebida do webhook que foi iniciado.

A tabela a seguir mostra os argumentos de entrada de conversão recebidos.
Nome Tipo Somente leitura Notas
body map[string]object N
header map[string]list[string] Y
status_code integer Y
request map[string]object Y Contém os argumentos da transformação de saída. Por exemplo, request.body para acessar o corpo da solicitação original.
Nota:
  • Apenas o corpo de uma conversão recebida é modificável. As mudanças para header ou status_code não tem efeito.
  • As conversões de entrada são iniciadas somente após a validação do código de status. Assegure-se de que o campo expectedStatus do webhook ou recurso esteja configurado adequadamente.

Erros comuns nas conversões

Você pode encontrar problemas comuns semelhantes.
Igualdades numéricas falhando
Quando uma comparação é executada em um número que sai do corpo HTTP, uma verificação de igualdade pode não funcionar conforme o esperado em um número. O código a seguir é um exemplo de uma carga útil, o CEL aplicado a ele e a saída.
body argument value:
{
  "value": 2
}
CEL:
{ 
  "body" : body.put("gte": body.value >= 2)
}
Result:
{
  "value":2,
  "gte": false
}

Esse resultado é porque a expressão do body.value está rendendo um valor decimal. Como JSON, números são por definição não inteiros. Um cast corrige o comportamento. Consulte o exemplo a seguir.

Incoming body:
{
  "value": 2
}
CEL:
{
   "body" : body.put("gte": int(body.value) >= 2)
}
Result:
{
  "value":2,
  "gte": true
}
Removendo o corpo de uma solicitação
Algumas APIs podem exigir que todas as informações sejam fornecidas no parâmetro ` URL ` e nos cabeçalhos, e que não seja incluído nenhum corpo na solicitação. Para essas APIs, pode ser necessária uma transformação para remover o corpo da solicitação HTTP da solicitação. Para remover o corpo da solicitação de saída, execute as seguintes ações.
  • Defina o tipo de conteúdo como uma string vazia.
  • Defina o corpo do ` HTTP ` como uma string vazia.

O exemplo a seguir mostra como remover o corpo do corpo como parte de uma transformação de saída:

CEL:
{
  "body":"",
  "header": header.put("content-type","")
}