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.
| 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. |
CEL.CEL é um mapa declarado com chaves conhecidas, conforme mostrado no exemplo a seguir.{
"body":body,
"header":header,
"path":path
}| 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.
| 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. |
- Apenas o corpo de uma conversão recebida é modificável. As mudanças para
headeroustatus_codenã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
expectedStatusdo webhook ou recurso esteja configurado adequadamente.
Erros comuns nas conversões
- 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
CELaplicado 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.valueestá 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","") }