Transformations
Lorsque vous appliquez des webhooks dans IBM® Verify, il s'agit de contacter des systèmes distants qui ne sont pas toujours créés et déployés par l'administrateur titulaire. Comme ces systèmes distants peuvent exposer des API rigides, il peut s'avérer nécessaire de muter le contenu de la demande ou de la réponse d'un appel webhook pour réaliser une intégration fonctionnelle entre Verify et le système distant.
Pour réaliser cette intégration, les webhooks exposent une fonctionnalité appelée transformations. Les administrateurs peuvent utiliser cette fonctionnalité pour créer des expressions qui mutent la demande et la réponse HTTP.
Une transformation webhook est une expression CEL, dont la sortie est une mappe contenant des clés identifiées. Ces clés sont mappés aux parties qui constituent une demande ou une réponse HTTP. Chaque clé de la sortie de transformation est facultative et, si elle n'est pas fournie, cette partie de la demande ou de la réponse ne sera pas modifiée.
Transformations sortantes
Les transformations sortantes s'appliquent à la demande HTTP avant qu'elle ne soit envoyée à la destination du webhook.
| Nom | Type | Lecture seule | Remarques |
|---|---|---|---|
body |
map[string]object |
N | |
header |
map[string]list[string] |
N | |
method |
string |
N | |
path |
string |
N | |
host |
string |
Y | Présent uniquement lorsque l'hôte est cohérent sur toutes les URL configurées. |
CEL.CEL est une mappe qui est déclarée avec des clés identifiées, comme illustré dans l'exemple suivant.{
"body":body,
"header":header,
"path":path
}| Nom | Type | Remarques |
|---|---|---|
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 |
Si la valeur est true, le mécanisme d'authentification configuré n'est pas utilisé. Utilisez cette clé pour les cas de figure où la transformation ajoute les détails d'autorisation à la demande. |
title_case_bearer |
boolean |
Utilisez cette transformation lorsque l'API destinataire nécessite une mise en majuscules pour traiter correctement l'en-tête. Lorsqu'il est défini sur true, le spécificateur bearer de type d'autorisation dans l'en-tête authorization , s'il est présent, est converti pour utiliser la casse titre (bearer -> Bearer). |
Transformations entrantes
Les transformations entrantes s'appliquent à la réponse HTTP telle qu'elle est reçue du webhook qui a été démarré.
| Nom | Type | Lecture seule | Remarques |
|---|---|---|---|
body |
map[string]object |
N | |
header |
map[string]list[string] |
Y | |
status_code |
integer |
Y | |
request |
map[string]object |
Y | Contient les arguments de transformation de sortie. Par exemple, request.body pour accéder au corps de la requête d'origine. |
- Seul le corps d'une transformation entrante est modifiable. Les modifications apportées à
headeroustatus_codesont sans effet. - Les transformations entrantes ne sont démarrées qu'une fois le code de statut validé. Vérifiez que la zone
expectedStatusdu webhook ou de la ressource est correctement définie.
Bogues courants dans les transformations
- Echec des égalités de nombre
- Lorsqu'une comparaison est effectuée sur un nombre provenant du corps HTTP, une vérification d'égalité peut ne pas fonctionner comme prévu sur un nombre. Le code suivant est un exemple de contenu,
CELappliqué à celui-ci et la sortie.body argument value:{ "value": 2 }CEL:{ "body" : body.put("gte": body.value >= 2) }Result:{ "value":2, "gte": false }Ce résultat est dû au fait que l'expression
body.valueproduit une valeur décimale. Dans le format JSON, les nombres ne sont pas, par définition, des entiers. Un transtypage corrige ce comportement. (voir l'exemple suivant).Incoming body:{ "value": 2 }CEL:{ "body" : body.put("gte": int(body.value) >= 2) }Result:{ "value":2, "gte": true } - Supprimer le corps d'une requête
- Certaines API peuvent exiger que toutes les informations soient fournies dans l' URL e et les en-têtes, et qu'aucun corps ne soit inclus dans la requête. Pour ces API, une transformation peut s'avérer nécessaire afin de supprimer le corps de l' HTTP sortante de la requête. Pour supprimer le corps de la requête sortante, procédez comme suit.
- Définissez le type de contenu sur une chaîne vide.
- Définissez le corps de l' HTTP e sur une chaîne vide.
L'exemple suivant montre comment supprimer le corps dans le cadre d'une transformation sortante :
CEL:{ "body":"", "header": header.put("content-type","") }