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.

Le tableau suivant présente les arguments d'entrée de transformation sortante.
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.
Ces paramètres peuvent être référencés en fonction de la spécification CEL.
L'expression 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   
}
Remarque : il n'est pas nécessaire d'inclure les clés lorsque aucune modification n'est apportée. L'exemple précédent sert uniquement à illustrer le format de mappe.
Le tableau suivant présente les clés de transformation sortante.
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é.

Le tableau suivant présente les arguments d'entrée de transformation entrante.
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.
Remarque :
  • Seul le corps d'une transformation entrante est modifiable. Les modifications apportées à header ou status_code sont sans effet.
  • Les transformations entrantes ne sont démarrées qu'une fois le code de statut validé. Vérifiez que la zone expectedStatus du webhook ou de la ressource est correctement définie.

Bogues courants dans les transformations

Vous pourriez rencontrer des problèmes communs similaires.
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, CEL appliqué à 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.value produit 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","")
}