Verwenden des Editors für switch-Richtlinienbedingungen

Der Editor für switch-Richtlinienbedingungen stellt eine Benutzerschnittstelle bereit, die Sie bei der Erstellung der Bedingungen für die case-Klauseln in einer switch-Richtlinie unterstützt.

Sie erstellen ein Bedingungsscript, indem Sie die Optionen Gruppe hinzufügen und Bedingung hinzufügen zusammen mit den Operatoroptionen und vorab bereitgestellten Funktionsauswahlen verwenden. Im Feld Ausgabe wird das sich ergebende Bedingungsscript angezeigt und dynamisch aktualisiert, während Sie Ihre Bedingung erstellen.

Hinzufügen von Bedingungen

Wenn Sie den Richtlinienbedingungseditor öffnen, ist schon eine Erstbedingung bereitgestellt, die Sie konfigurieren können.

Verwenden Sie die Dropdown-Liste, um die Funktion auszuwählen, mit der Ihre Bedingung beginnen soll.

JSONata-Unterstützung in API ConnectAI Gateway

API ConnectAI Gateway unterstützt „ v2.0 “ der JSONata-Spezifikation mit folgenden Einschränkungen:

  • Wenn Sie einen JSONata-Ausdruck zum Extrahieren oder Schwärzen von Feldern verwenden, sind auch die softverknüpften Kopien des Feldes von der Extraktions- oder Schwärzungsrichtlinie betroffen, selbst wenn sich die Felder an unterschiedlichen Speicherorten befinden.
  • API ConnectAI Gateway unterstützt keine JSONata-Funktionen höherer Ordnung (Funktionen, die andere Funktionen verarbeiten).
  • Wenn eine von JSONata unterstützte Funktion eine Funktion API ConnectAI Gateway höherer Ordnung als Argument aufruft, wird dieses Argument nicht unterstützt (da Funktionen höherer Ordnung nicht unterstützt werden).
  • Die folgenden Funktionen der JSONata- v2.0 werden nicht unterstützt:
    • $eval()
    • $sift()
    • $each()
    • $error()
    • $assert()
  • $fromMillis() wird mit folgenden Einschränkungen unterstützt:
    • Der $fromMillis() Parameter unterstützt Zahlen im Bereich von -5364662400000 bis 2903299199000.
      • Ein Wert kleiner als -5364662400000 wird als -5364662400000 interpretiert. Mit anderen Worten: Der Zeitstempel wird als „ 1800-01-01T00:00:00Z “ angegeben.
      • Ein Wert, der größer als 2903299199000 ist, verwendet 2903299199000. Mit anderen Worten: Der Zeitstempel wird als „ 2261-12-31T23:59:59Z “ angegeben.
  • $now() wird mit folgenden Einschränkungen unterstützt:
    • Die folgenden Komponentenbezeichner werden nicht unterstützt:
      • W = Woche im Jahr
      • w = Woche im Monat
      • X = ISO-Wochennummerierung Jahr
      • x = ISO-Wochennummerierung Monat
    • Die Darstellung von Zahlen als Wörter wird nicht unterstützt, daher werden die folgenden Darstellungsmodifikatoren nicht unterstützt:
      • W = Wort in Großbuchstaben (zum Beispiel: [YW] => ZWEITAUSENDVIERUNDZWANZIG)
      • w = Wort in Kleinbuchstaben (zum Beispiel: [Yw] => zweitausendvierundzwanzig)
      • Ww = Wort in Groß- und Kleinschreibung (zum Beispiel: [YWw] => Zweitausendvierundzwanzig)
    • Fehlermeldungen sind allgemein gehalten.

In Tabelle 1 sind die Funktionserweiterungen aufgeführt, die Sie mit der Standard-JSONata-Notation verwenden können. Jede Erweiterung entspricht einem Teil des API-Kontexts.

Tabelle 1. Funktionale Erweiterungen für JSONata
Erweiterung Variabel Beschreibung
$apiCtx() Generischer Zugriff auf einen API-Kontext Die $apiCtx() Erweiterung ermöglicht den generischen Zugriff auf einen API-Kontext.
  • Beispiel für ein Transformationsfeld in einer Extraktionsaktion:
    "$apiCtx().request.uri"
  • Beispiel für die Bedingung eines Falls in einer Switch-Anweisung:
    "$apiCtx().request.path = '/simple/apictx-function'"
$header(name) message.headers.name Nachrichtenheader
$httpVerb() request.verb HTTP-Methode der Anforderung
$operationID() api.operation.id ID der Operation
$operationPath() api.operation.path Pfad der Operation
$queryParameter('name')
  • request.parameters.name.locations

    Das unterstützte Schlüsselwort lautet query.

  • request.parameters.name.values
Sucht nach dem Index von query in request.parameters.name.locations und gibt zurück request.parameters.name.values[index], wobei der Wert für query [index] an den Stellen ist. Parameterwerte sind nicht URL-decodiert.
$statusCode() message.status.code Statuscode
$storageType([arg]) variable.body

Sie können eine beliebige Variable im API-Kontext angeben. Wenn keine Variable angegeben ist, wird die Standardvariable message.body verwendet.

Speichertyp der Nachricht. Die unterstützten Werte sind binary, empty, graphql, json, streamund xml.
$urlParameter('name')
  • request.parameters.name.locations

    Die unterstützten Schlüsselwörter sind path und query

  • request.parameters.name.values
Sucht nach dem Index von path und query in request.parameters.name.locations und gibt ein einzelnes Array zurück, das sowohl path als auch query Werte aus request.parameters.name.valuesenthält. Wenn die URL sowohl Pfad- als auch Abfrageparameterwerte enthält, enthält das Array die Pfadwerte gefolgt von den Abfragewerten. Die Werte der einzelnen Parametertypen werden in der Reihenfolge hinzugefügt, in der sie empfangen wurden. Parameterwerte sind URL-decodiert.
Beispielsweise enthält die folgende URL URL sowohl Pfad- als auch Abfrageparameterwerte.
http://example.com/petstore/cats/adopt?breed=Sphynx&breed=Siamese
Die Funktion $urlParameter('breed') ` URL ` gibt das folgende Array von Werten zurück.
[cats, adopt, Sphynx, Siamese]

In diesem Beispiel umfasst die URL einen API-Pfad, der als /petstore/{breed}/{breed} konfiguriert ist, wobei breed als Pfadparameter des API-Pfads konfiguriert ist. Daher sind cats und adopt in der Ausgabe enthalten.

$xpath(path, xpathExpression) Sie können eine beliebige beschreibbare Variable im API-Kontext angeben. Bei xpathExpression muss es sich um eine Literalzeichenfolge handeln. Ermöglicht die Verwendung von XPath-Ausdrücken. Im folgenden Beispiel werden alle Preiselemente in der Quelle angegeben.
$xpath($, '//price')

In Tabelle 2 sind die Funktionserweiterungen aufgeführt, die Sie mit den APIs von „ GraphQL “ nutzen können.

Tabelle 2. Funktionale Erweiterungen für JSONata für „ GraphQL “
Erweiterung Variabel Beschreibung
$gqlActiveOperation([graphql_message]) message.body Ruft den aktiven Vorgang ab, der in der angegebenen „ GraphQL “-Meldung gefunden wurde. Der Name operationName muss mit dem Namen des aktiven Vorgangs übereinstimmen.
$gqlAlias(graphql_field_node) message.body Ruft den Alias eines Feldknotens „ GraphQL “ ab.
$gqlFragments([graphql_message]) message.body Ruft die Fragmente ab, die in der angegebenen „ GraphQL “-Nachricht gefunden wurden.
$gqlName([graphql_node]) message.body Ruft den Knotennamen ab. Bei Operationen lautet der operationNameKnotenname. Bei Feldern, Fragmentdefinitionen, Argumenten und anderen Elementen entspricht der Knotenname dem Namen des Elements. Standardmäßig wird der Wert operationNamemessage.body von abgerufen.
$gqlOperations([graphql_message]) message.body Ruft die Operationen ab, die in der angegebenen „ GraphQL “-Nachricht enthalten sind.
$gqlType([graphql_node]) message.body Bei den Abfrage-, Änderungs- und Abonnement-Abfragetypen wird der Vorgangstyp des aktiven Vorgangs abgerufen.
Zusätzlich zu den Funktionserweiterungen stehen Ihnen folgende Operatoren zur Verfügung:
  • Sie können den Navigationsoperator & (Verkettung) verwenden.

Sie können die folgenden numerischen JSONata-Operatoren verwenden:

  • + (Ergänzung)
  • - (Subtraktion)
  • * (Multiplikation)
  • / (Division)
  • % (Modulo)

Sie können die folgenden JSONata-Vergleichsoperatoren für Zahlenwerte oder Zeichenfolgen verwenden:

  • =
  • !=
  • <
  • >
  • <=
  • >=
Sie können auch die folgenden Operatoren und Ausdrücke verwenden:
  • Klammern, um eine Folge in ein Array umzuwandeln, die Operatorpriorität festzulegen oder komplexe Ausdrücke auf einen Kontextwert anzuwenden.
  • Array-Bereiche und Prädikatsausdrücke.
  • Die Platzhalterzeichen „einfaches Sternchen“ (*) und „doppeltes Sternchen“ (**).
Die folgenden Elemente einer Abfrage nach dem Schema „ GraphQL “ können mithilfe der gezeigten Syntax in JSONata-Notation dargestellt werden.
  • query

    Die gesamte Abfrage „ GraphQL “, einschließlich Operationen und Fragmente.

  • operationName

    Bei einer anonymen Operation kann leer operationName sein.

  • ~fragmentSpreadName
  • on~typeCondition
  • ~~fragmentDefinitionName

Nachdem Sie die Funktion ausgewählt haben, werden abhängig von der ausgewählten Funktion zusätzliche Felder angezeigt, sodass Sie die Bedingung fertigstellen können. Beispiel: Wenn Sie die Funktion $httpVerb() auswählen, wird eine Vergleichsoperator-Auswahlliste (= oder !=) zusammen mit einer Auswahlliste mit HTTP-Verben auf der rechten Seite des Ausdrucks (GET, PUT, POST, DELETE, HEAD, OPTIONS oder PATCH) angezeigt.

Wenn Sie NOT auswählen, wird Ihre Bedingung mit einer $not-Funktion negiert.

Um weitere Bedingungen hinzuzufügen, klicken Sie auf Bedingung hinzufügen. Sie wählen dann aus, ob zwischen dieser Bedingung und der vorhergehenden ein and- oder ein or-Operator eingefügt werden soll.

Um zwei oder mehr Bedingungen in Klammern zu gruppieren, klicken Sie auf Gruppe hinzufügen und fügen Sie dann Ihre Bedingungen zur Gruppe hinzu. Danach wählen Sie aus, ob ein and- oder ein or-Operator zwischen dieser Gruppe und der vorhergehenden Bedingung oder Gruppe eingefügt werden soll.

Um eine eigene Bedingung völlig neu zu schreiben, wählen Sie Angepasst aus und geben Sie dann Ihr Script in das bereitgestellte Feld ein.

Beispiel

Erstellen Sie folgende Bedingung:
($statusCode() != 200 and ($httpVerb() = 'GET' or $httpVerb() = 'PUT'))
Führen Sie dazu die folgenden Schritte im Bedingungseditor aus:
  1. Wählen Sie $statusCode() aus, wählen Sie != für den Vergleichsoperator aus und geben Sie 200 in das Feld auf der rechten Seite der Bedingung ein.
  2. Klicken Sie auf „Gruppe hinzufügen “.
  3. Klicken Sie im angezeigten neuen Gruppenteilfenster auf Bedingung hinzufügen.
  4. Wählen Sie httpVerb() aus, belassen Sie den Vergleichsoperator als = und wählen Sie GET auf der rechten Seite der Bedingung aus.
  5. Klicken Sie im Gruppenteilfenster erneut auf Bedingung hinzufügen.
  6. Wählen Sie httpVerb() aus, belassen Sie den Vergleichsoperator als = und wählen Sie PUT auf der rechten Seite der Bedingung aus.
  7. Wählen Sie als Vergleichsoperator zwischen den zwei Bedingungen or aus.

Einfache Bedingungsanweisungen

Die folgenden Beispiele zeigen Bedingungen, die eine einzelne Funktion verwenden.

In diesem Beispiel wird die Erweiterung $httpVerb() verwendet, um die HTTP-Methode der Anforderung anzugeben.
$httpVerb()="GET"
In diesem Beispiel wird die Erweiterung $operationPath() verwendet, um den Pfad der Operation anzugeben.
$operationPath()="/base/path-2"
In diesem Beispiel wird die Erweiterung $operationID() verwendet, um die Operations-ID anzugeben.
$operationID()="test-gatewayscript-GET"
In diesem Beispiel wird die Erweiterung $statusCode() verwendet, um den Nachrichtenstatuscode anzugeben.
$statusCode()=200
In diesem Beispiel wird die Erweiterung $header(name) verwendet, um den Inhaltstyp des Nachrichtenheaders anzugeben.
$header("Content-Type")="application/json"

Kombinieren von Bedingungen mit logischen Operatoren

Sie können die Operatoren and und or verwenden, um mehrere Funktionen in einer einzigen Bedingung zu kombinieren.

In diesem Beispiel werden eine HTTP-GET-Anforderung und ein API-Operationspfad gleich test-gatewayscript-GET angegeben.
$httpVerb()="GET" and $operationPath()="test-gatewayscript-GET"
In diesem Beispiel wird entweder eine POST- oder eine PUT-Anforderung angegeben.
$httpVerb()="POST" or $httpVerb()="PUT"
In diesem Beispiel werden eine API-Operation-ID gleich test-gatewayscript_POST und ein Nachrichtenstatuscode gleich 200 oder eine API-Operation-ID gleich test-gatewayscript-GET sowie ein Nachrichtenstatuscode gleich 500 angegeben.
($operationID()="test-gatewayscript-POST" and $statusCode()=200) or ($operationID()="test-gatewayscript-GET" and $statusCode()=500)
In diesem Beispiel werden eine API-Operation-ID gleich test-gatewayscript-POST und ein Nachrichtenstatuscode gleich 200 mit einem API-Operationspfad gleich /base/path-2 angegeben.
($operationID()="test-gatewayscript-POST" and $statusCode()=200) and $operationPath()="/base/path-2"
In diesem Beispiel werden ein Nachrichtenheader-Inhaltstyp gleich text/plain und eine Nachrichtenheaderlänge gleich 300 oder ein Nachrichtenstatuscode gleich 200 angegeben.
($header("Content-Type")="text/plain" and $header("Content-Length")=300) or $statusCode()= 200
Hinweis: Wenn sich Benutzer über den Toolkit-Anmeldepfad anmelden (ein URL, der enthält ?from=TOOLKIT), hat der generierte API-Schlüssel eine feste Gültigkeitsdauer (TTL) von 5 Minuten.