Transformationen

Wenn Sie Webhooks in IBM® Verify anwenden, müssen Sie sich an ferne Systeme wenden, die nicht immer vom Tenantadministrator erstellt und implementiert werden. Da diese fernen Systeme möglicherweise starre APIs bereitstellen, kann es erforderlich sein, dass die Anforderungs- oder Antwortnutzdaten eines Webhook-Aufrufs mutiert werden, um eine funktionierende Integration zwischen Verify und dem fernen System zu erreichen.

Um diese Integration zu erreichen, stellen Webhooks eine Funktion bereit, die als Transformationen bezeichnet wird. Administratoren können diese Funktion verwenden, um Ausdrücke zu verfassen, die die HTTP-Anforderung und -Antwort verändern.

Eine Webhook-Transformation ist ein CEL-Ausdruck, dessen Ausgabe eine Zuordnung ist, die bekannte Schlüssel enthält. Diese Schlüssel werden den Teilen zugeordnet, aus denen eine HTTP-Anforderung oder -Antwort besteht. Jeder Schlüssel in der Transformationsausgabe ist optional. Wenn er nicht angegeben wird, wird dieser Teil der Anforderung oder Antwort nicht geändert.

Abgehende Transformationen

Abgehende Transformationen gelten für die HTTP-Anforderung, bevor sie an das Webhook-Ziel gesendet wird.

Die folgende Tabelle zeigt die Eingabeargumente für die abgehende Transformation.
Ihren Namen Typ Schreibgeschützt Anmerkungen
body map[string]object N
header map[string]list[string] N
method string N
path string N
host string Y Nur vorhanden, wenn der Host in allen konfigurierten URLs konsistent ist.
Diese Parameter können gemäß der CEL-Spezifikation referenziert werden.
Der Ausdruck CEL ist eine Zuordnung, die wie im folgenden Beispiel mit bekannten Schlüsseln deklariert wird.
{
  "body":body,
  "header":header,
  "path":path   
}
Hinweis: Es ist nicht erforderlich, Schlüssel anzugeben, wenn keine Änderungen vorgenommen werden. Das vorherige Beispiel dient lediglich zur Veranschaulichung des Zuordnungsformats.
Die folgende Tabelle zeigt die abgehenden Transformationsschlüssel.
Ihren Namen Typ Anmerkungen
body map[string]object oder string
header map[string]list[string] oder map[string]string
method string
path string
query map[string]string oder map[string]list[string]
skip_authentication boolean Bei Angabe von "true" wird das konfigurierte Authentifizierungsverfahren nicht verwendet. Verwenden Sie diesen Schlüssel für Situationen, in denen die Transformation der Anforderung Berechtigungsdetails hinzufügt.
title_case_bearer boolean Verwenden Sie diese Transformation in Fällen, in denen die empfangende API Großschreibung erwartet, um den Header korrekt zu verarbeiten. trueWenn diese Option aktiviert ist, wird der Autorisierungstyp-Bezeichner bearer im authorization Header, sofern vorhanden, in Groß-/Kleinschreibung umgewandelt (bearer -> Bearer).

Eingehende Transformationen

Eingehende Transformationen gelten für die HTTP-Antwort, wenn sie vom gestarteten Webhook empfangen wird.

Die folgende Tabelle zeigt die Eingabeargumente für die eingehende Transformation.
Ihren Namen Typ Schreibgeschützt Anmerkungen
body map[string]object N
header map[string]list[string] Y
status_code integer Y
request map[string]object Y Enthält die Argumente für die Ausgangstransformation. Beispielsweise, request.body um auf den ursprünglichen Anfragetext zuzugreifen.
Hinweis:
  • Nur der Hauptteil einer eingehenden Transformation kann geändert werden. Änderungen an header oder status_code haben keine Auswirkungen.
  • Eingehende Umsetzungen werden erst gestartet, nachdem der Statuscode geprüft wurde. Stellen Sie sicher, dass das Feld expectedStatus des Webhooks oder der Ressource entsprechend festgelegt ist.

Allgemeine Fehler in Transformationen

Möglicherweise treten ähnliche allgemeine Probleme auf.
Anzahl der fehlgeschlagenen Gleichheiten
Wenn ein Vergleich für eine Zahl durchgeführt wird, die aus dem HTTP-Hauptteil stammt, funktioniert eine Gleichheitsüberprüfung möglicherweise nicht wie erwartet für eine Zahl. Der folgende Code ist ein Beispiel für Nutzdaten, die auf sie angewendete CEL und die Ausgabe.
body argument value:
{
  "value": 2
}
CEL:
{ 
  "body" : body.put("gte": body.value >= 2)
}
Result:
{
  "value":2,
  "gte": false
}

Dies liegt daran, dass der Ausdruck body.value einen Dezimalwert ergibt. Als JSON sind Zahlen per Definition keine Ganzzahlen. Eine Umsetzung korrigiert das Verhalten. Siehe folgendes Beispiel.

Incoming body:
{
  "value": 2
}
CEL:
{
   "body" : body.put("gte": int(body.value) >= 2)
}
Result:
{
  "value":2,
  "gte": true
}
Entfernen des Textkörpers aus einer Anfrage
Bei einigen APIs ist es unter Umständen erforderlich, dass alle Informationen im ` URL ` und in den Headern übermittelt werden und dass die Anfrage keinen Hauptteil enthält. Bei diesen APIs ist möglicherweise eine Transformation erforderlich, um den ausgehenden „ HTTP “-Body aus der Anfrage zu entfernen. Um den Textkörper aus der ausgehenden Anfrage zu entfernen, führen Sie die folgenden Schritte aus.
  • Setze den Content-Type auf eine leere Zeichenfolge.
  • Setzen Sie den Wert von „ HTTP “ auf eine leere Zeichenfolge.

Das folgende Beispiel zeigt, wie man den Textkörper im Rahmen einer ausgehenden Transformation entfernt:

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