AssignMessage-Richtlinie

Sie sehen die Dokumentation zu Apigee Edge.
Rufen Sie die Apigee X-Dokumentation auf.
weitere Informationen

Was

Die AssignMessage-Richtlinie ändert oder erstellt neue Anfrage- und Antwortnachrichten während des API-Proxy-Ablaufs. Mit der Richtlinie können Sie die folgenden Aktionen für diese Nachrichten ausführen:

  • Einer Nachricht neue Formularparameter, Header oder Abfrageparameter hinzufügen
  • Vorhandene Properties von einer Nachricht in eine andere kopieren
  • Header, Abfrageparameter, Formularparameter und/oder Nachrichtennutzlasten aus einer Nachricht entfernen
  • Den Wert vorhandener Eigenschaften in einer Nachricht festlegen

Mit der Richtlinie „AssignMessage“ werden in der Regel Attribute der Anfrage oder Antwort hinzugefügt, geändert oder entfernt. Sie können jedoch auch die „AssignMessage“-Richtlinie verwenden, um eine benutzerdefinierte Anfrage- oder Antwortnachricht zu erstellen und an ein alternatives Ziel zu übergeben, wie unter Benutzerdefinierte Anfragenachrichten erstellen beschrieben.

Die Richtlinie AssignMessage kann Ablaufvariablen mit den folgenden untergeordneten Elementen erstellen oder ändern:

Element <AssignMessage>

Definiert eine AssignMessage-Richtlinie.

Standardwert Siehe Standardrichtlinie Tab unten
Erforderlich? Erforderlich
Typ Komplexes Objekt
Übergeordnetes Element
Untergeordnete Elemente <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

Das <AssignMessage>-Element verwendet die folgende Syntax:

Syntax

Das <AssignMessage>-Element verwendet die folgende Syntax:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

Standardrichtlinie

Das folgende Beispiel zeigt die Standardeinstellungen, wenn Sie Ihrem Ablauf in der Edge-Benutzeroberfläche eine „AssignMessage“-Richtlinie hinzufügen:

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Wenn Sie eine neue „AssignMessage“-Richtlinie in die Edge-UI einfügen, enthält die Vorlage Stubs für alle möglichen Vorgänge. Normalerweise wählen Sie aus, welche Vorgänge Sie mit dieser Richtlinie ausführen möchten, und entfernen die restlichen untergeordneten Elemente. Wenn Sie beispielsweise einen Kopiervorgang ausführen möchten, verwenden Sie das Element <Copy> und entfernen Sie <Add>, <Remove> und andere untergeordnete Elemente aus der Richtlinie, damit sie besser lesbar sind.

Dieses Element hat folgende Attribute, die allen Richtlinien gemeinsam sind:

Attribut Standard Erforderlich? Beschreibung
name Erforderlich

Der interne Name der Richtlinie. Der Wert des Attributs name kann Buchstaben, Ziffern, Leerzeichen, Bindestriche, Unterstriche und Punkte enthalten. Dieser Wert darf 255 Zeichen nicht überschreiten.

Optional können Sie das Element <DisplayName> verwenden, um die Richtlinie im Proxy-Editor der Verwaltungs-UI mit einem anderen Namen in einer natürlichen Sprache zu versehen.

continueOnError falsch Optional Ist das Element auf "false" gesetzt, wird ein Fehler zurückgegeben, wenn eine Richtlinie fehlschlägt. Dies ist für die meisten Richtlinien das erwartete Verhalten. Ist das Element auf "true" gesetzt, wird die Ausführung des Ablaufs auch nach dem Fehlschlagen einer Richtlinie fortgesetzt.
enabled wahr Optional Auf "true" setzen, um die Richtlinie durchzusetzen. Auf "false" setzen, um die Richtlinie zu "deaktivieren". Die Richtlinie wird nicht durchgesetzt, selbst wenn sie mit einem Ablauf verknüpft ist.
async   falsch Eingestellte Funktionen Dieses Attribut wurde verworfen.

Die folgende Tabelle enthält eine allgemeine Beschreibung der untergeordneten Elemente von <AssignMessage>:

Untergeordnetes Element Erforderlich? Beschreibung
Häufige Vorgänge
<Add> Optional Fügt Informationen dem Nachrichtenobjekt hinzu, das durch das Element <AssignTo> angegeben wird.

<Add> fügt der Nachricht Header oder Parameter hinzu, die in der ursprünglichen Nachricht nicht vorhanden sind. Verwenden Sie zum Überschreiben vorhandener Header oder Parameter das <Set>-Element.

<Copy> Optional Kopiert Informationen aus der Nachricht, die mit dem Attribut source in das Nachrichtenobjekt angegeben wurde, das im Element <AssignTo> angegeben ist.
<Remove> Optional Löscht die angegebenen Elemente aus der im Element <AssignTo> angegebenen Nachrichtenvariable.
<Set> Optional Ersetzt Werte vorhandener Attribute in der Anfrage oder Antwort, die durch das Element <AssignTo> angegeben werden.

<Set> überschreibt Header oder Parameter, die in der ursprünglichen Nachricht bereits vorhanden sind. Zum Hinzufügen neuer Header oder Parameter verwenden Sie das Element <Add>.

Weitere untergeordnete Elemente
<AssignTo> Optional Gibt an, auf welche Nachricht die AssignMessage-Richtlinie angewendet wird. Das kann die Standardanfrage oder -antwort sein oder eine neue, benutzerdefinierte Nachricht sein.
<AssignVariable> Optional Weist einer Flussvariablen einen Wert zu. Wenn die Variable nicht vorhanden ist, wird sie von <AssignVariable> erstellt.
<IgnoreUnresolvedVariables> Optional Bestimmt, ob die Verarbeitung beendet wird, wenn eine nicht aufgelöste Variable erkannt wird.

Jedes dieser untergeordneten Elemente wird in den folgenden Abschnitten beschrieben.

Beispiele

Die folgenden Beispiele zeigen einige Möglichkeiten, wie Sie die Richtlinie „AssignMessage“ verwenden können:

1: Header hinzufügen

Im folgenden Beispiel wird ein Header mit dem Element <Add> in die Anfrage eingefügt:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2: Nutzlast entfernen

Im folgenden Beispiel wird die Nutzlast aus der Antwort mit dem Element <Remove> gelöscht:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3: Antwort ändern

Im folgenden Beispiel wird ein vorhandenes Antwortobjekt durch Hinzufügen eines Headers geändert:

<AssignMessage name="modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" type="response"></AssignTo>
</AssignMessage>

In diesem Beispiel wird keine neue Nachricht erstellt. Stattdessen wird eine vorhandene Antwortnachricht durch Hinzufügen eines HTTP-Headers geändert.

Da in diesem Beispiel ein Variablenname im Element <AssignTo> weggelassen und type als "Antwort" angegeben wird, ändert diese Richtlinie das vom Zielserver zurückgegebene Antwortobjekt.

Der HTTP-Header, der der Antwortnachricht durch diese Richtlinie hinzugefügt wird, wird von einer Variable abgeleitet, die von der LookupCache-Richtlinie ausgefüllt wird. Daher enthält die geänderte Antwortnachricht eine HTTP-Header, die angibt, ob die Ergebnisse aus dem Cache abgerufen wurden. Das Festlegen von Headern in der Antwort kann für die Fehlerbehebung und die Fehlerbehebung nützlich sein.

4: Dynamischen Content festlegen

Sie können mit AssignMessage dynamische Inhalte in die Nutzlast von Antwort- und Anfragenachrichten einbetten.

Um Edge-Flow-Variablen in eine XML-Nutzlast einzubetten, setzen Sie die angegebene Variable wie folgt in geschweifte Klammern: {prefix.name}.

Im folgenden Beispiel wird der Wert der user-agent-HTTP-Header-Ablaufvariable in ein XML-Element mit dem Namen User-agent eingebettet:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Für JSON-Nutzlasten können Sie mithilfe der Attribute variablePrefix und variableSuffix Variablen mit Trennzeichen einfügen, wie im folgenden Beispiel gezeigt:

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

Eine vollständige Liste der Ablaufvariablen finden Sie unter Ablaufvariablen.

Ab dem Cloud-Release 16.08.17 können Sie Variablen auch mit geschweiften Klammern einfügen.

5: Abfrageparameter entfernen

Im folgenden Beispiel wird der Abfrageparameter apikey aus der Anfrage entfernt:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Es empfiehlt sich, den Abfrageparameter apikey aus der Anfragenachricht zu entfernen, wenn Sie die VerifyAPIKey-Richtlinie zur Nutzerauthentifizierung verwenden. Damit wird verhindert, dass vertrauliche Schlüsselinformationen an das Back-End-Ziel weitergegeben werden.

6: Variablen festlegen/abrufen

Im folgenden Beispiel werden drei Richtlinien zum Zuweisen von Nachrichten verwendet:

  1. Erstellt drei Ablaufvariablen in der Anfrage mit statischen Werten
  2. Ruft die Ablaufariablen dynamisch in einer zweiten Richtlinie im Anfrageablauf ab.
  3. Legt sie in der Nutzlast der Antwort fest.
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

In der ersten Richtlinie werden mit dem Element <AssignVariable> drei Variablen in der Anfrage erstellt und festgelegt. Jedes <Name>-Element gibt einen Variablennamen an und <Value> gibt den Wert an.

Die zweite Richtlinie verwendet das Element <AssignVariable>, um die Werte zu lesen und drei neue Variablen zu erstellen:

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

In der zweiten Richtlinie verweist das <Ref>-Element auf die Quellvariable und <Name>-Elemente die Namen der neuen Variablen. Wenn auf die Variable, auf die von dem <Ref>-Element verwiesen wird, nicht zugegriffen werden kann, können Sie den vom Element <Value> angegebenen Wert verwenden.

Diese Richtlinien ausprobieren:

  1. Fügen Sie dem Anfrageablauf Richtlinien 1 und 2 hinzu. Die Richtlinie 1 muss vor Richtlinie 2 abgelegt werden.
  2. Fügen Sie die dritte Richtlinie in den Antwort-Ablauf ein.
  3. Die dritte Richtlinie verwendet das Element <Set>, um der Antwort die Variablen hinzuzufügen. Im folgenden Beispiel wird eine XML-Nutzlast in der Antwort erstellt, die Edge an den Client zurückgibt:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>
    

    Die Syntax für den Zugriff auf Ablaufvariablen in <Set> ist die Verwendung von geschweiften Klammern.

    Setzen Sie das Attribut contentType des Elements <Payload> auf „application/xml“.

  4. Senden Sie eine Anfrage an Ihren API-Proxy. Beispiel:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Optional können Sie die Ergebnisse über ein Dienstprogramm wie xmllint instanziieren, sodass die XML in einer übersichtlichen Struktur angezeigt wird:

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    Der Antworttext sollte so aussehen:

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

7: Antwortheader für Service-Callout abrufen

Im folgenden Beispiel befindet sich eine ServiceCallout-Richtlinie in der API-Proxy-Anfrage und die Callout-Antwort enthält mehrere Header mit demselben Namen (Set-Cookie). Wenn die Antwortvariable des Service Callout den Standardwert calloutResponse hat, ruft die folgende Richtlinie den zweiten Headerwert Set-Cookie ab.

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Verwenden Sie stattdessen die folgende Variable, um alle Headerwerte aufzulisten:

{calloutResponse.header.Set-Cookie.values}

Für jedes untergeordnete Element in dieser Referenz gibt es zusätzliche Beispiele. Weitere Beispiele finden Sie in AssignMessage-Beispiel auf GitHub.

Verweis auf untergeordnetes Element

In diesem Abschnitt werden die untergeordneten Elemente von <AssignMessage> beschrieben.

<Add>

Fügt der Anfrage oder Antwort, die durch das Element <AssignTo> angegeben wird, Informationen hinzu.

Das <Add>-Element fügt der Nachricht neue Attribute hinzu, die in der ursprünglichen Nachricht nicht vorhanden sind. Zum Ändern der Werte von vorhandenen Attributen verwenden Sie das Element <Set>.

Standardwert
Erforderlich? Optional
Typ Komplexer Typ
Übergeordnetes Element <AssignMessage>
Untergeordnete Elemente <FormParams>
<Headers>
<QueryParams>

Das <Add>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel werden mit dem Element <FormParams> die Werte von drei Abfragestringparametern aus der ursprünglichen Anfrage abgerufen und als Formularparameter in der Zielendpunktanfrage festgelegt:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel wird der Header User-Agent mit dem Element <Headers> der Zielendpunktanfrage hinzugefügt:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Beispiel 3

Im folgenden Beispiel wird mit dem Element <QueryParams> ein einzelner Abfrageparameter mit einem statischen Wert zur Anfrage hinzugefügt:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

In diesem Beispiel wird <Add> im Anfragefluss verwendet. Wenn Sie sich die Ergebnisse in einem Tool wie dem Trace-Tool ansehen, wird die Anfrage an "http://httpbin.org/get" zu "http://httpbin.org/get?myParam=42".

Die untergeordneten Elemente von <Add> unterstützen die dynamische Stringersetzung, die als Nachrichtenvorlagen bezeichnet wird.

<FormParams> (untergeordnet unter <Add>)

Fügt der Anfragenachricht neue Formularparameter hinzu. Dieses Element hat keine Auswirkungen auf eine Antwortnachricht.

Standardwert
Erforderlich? Optional
Typ Array von <FormParam>-Elementen
Übergeordnetes Element <Add>
Untergeordnete Elemente <FormParam>

Das <FormParams>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel werden ein einzelner Formularparameter („answer“) und ein statischer Wert („42“) zur Anfrage hinzugefügt:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel wird der Wert des Abfragestringparameters name abgerufen und zur Anfrage als Formularparameter hinzugefügt:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

In diesem Beispiel wird kein Ziel mit <AssignTo> angegeben. Durch diese Richtlinie wird der Parameter nur der Anfrage hinzugefügt.

Beispiel 3

Im folgenden Beispiel werden mehrere Formularparameter zur Anfrage hinzugefügt:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

In diesem Beispiel werden die Abfragestringparameter aus der ursprünglichen Anfrage abgerufen und als Formparameter an die Anfrage hinzugefügt, die an den Zielendpunkt gesendet werden.

Sie können das Trace-Tool verwenden, um sich den Ablauf anzusehen. Sie sehen, dass der Text der Anfrage die URL-codierten Formulardaten enthält, die ursprünglich als Abfragestringparameter übergeben wurden:

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

Sie können <FormParams> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • HTTP-Verb: POST
  • Nachrichtentyp: Anfrage
  • Mindestens eine der folgenden Optionen:
    • Formulardaten: Legen Sie einen Wert oder "" (den leeren String) fest. Beispiel: Mit curl fügen Sie -d "" in Ihre Anfrage ein.
    • Content-Length-Header: Wird auf 0 gesetzt (wenn sich keine Daten in der ursprünglichen Anfrage befinden, andernfalls die aktuelle Länge in Byte). Beispiel: Mit curl fügen Sie -H "Content-Length: 0" in Ihre Anfrage ein.

Beispiel:

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

Wenn Sie <FormParams> hinzufügen, legt Edge den Content-Type-Header der Anfrage auf "application/x-www-form-urlencoded" fest, bevor die Nachricht an den Zieldienst gesendet wird.

<Headers> (untergeordnet unter <Add>)

Fügt der angegebenen Anfrage oder Antwort neue Header hinzu, die durch das Element <AssignTo> angegeben werden.

Standardwert
Erforderlich? Optional
Typ Array von <Header>-Elementen
Übergeordnetes Element <Add>
Untergeordnete Elemente <Header>

Das <Headers>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Header der Anfrage user-agent hinzugefügt und diesem Header wird der Wert der Ablaufvariablen request.user.agent zugewiesen.

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (untergeordnet unter <Add>)

Fügt der Anfrage neue Abfrageparameter hinzu. Dieses Element hat keine Auswirkungen auf eine Antwort.

Standardwert
Erforderlich? Optional
Typ Array von <QueryParam>-Elementen
Übergeordnetes Element <Add>
Untergeordnete Elemente <QueryParam>

Das <QueryParams>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Abfrageparameter „myParam“ zur Anfrage hinzugefügt und dieser wird der Wert „42“ zugewiesen:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Sie können <QueryParams> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • HTTP-Verb: GET
  • Nachrichtentyp: Anfrage

Außerdem können Sie Abfrageparameter nur festlegen, wenn das type-Attribut des <AssignTo>-Elements eine Anfragenachricht ist. Wenn Sie sie für eine Antwort festlegen, hat dies keine Auswirkungen.

Wenn Sie in der Richtlinie (<Add><QueryParams/></Add>) ein leeres Array von Abfrageparametern definieren, fügt die Richtlinie keine Abfrageparameter hinzu. Dies entspricht dem Weglassen von <QueryParams>.

<AssignTo>

Bestimmt das Objekt, mit dem die Richtlinie AssignMessage arbeitet. Folgende Optionen sind verfügbar:

  • Anfragenachricht:Der request, der vom API-Proxy empfangen wurde
  • Antwortnachricht: Der response, der vom Zielserver zurückgegeben wurde
  • Benutzerdefinierte Nachricht: Eine benutzerdefinierte Anfrage oder ein Antwortobjekt

In einigen Fällen können Sie das Objekt nicht ändern, für das die AssignMessage-Richtlinie verwendet wird. Sie können beispielsweise nicht<Add> oder<Set> nutzen, um Suchparameter (<QueryParams>) oder Formparameter (<FormParams> ) in der Antwort hinzuzufügen oder zu ändern. Sie können nur Suchparameter und Formularparameter bei der Anfrage bearbeiten.

Standardwert
Erforderlich? Optional
Typ String
Übergeordnetes Element <AssignMessage>
Untergeordnete Elemente Keine

Wenn Sie <AssignTo> nicht angeben, wird die Richtlinie auf die Standardanfrage oder -antwort angewendet, die davon abhängt, wo die Richtlinie ausgeführt wird. Wenn die Richtlinie im Anfragefluss ausgeführt wird, wirkt sie sich auf die Anfragenachricht aus. Wenn es im Antwortablauf ausgeführt wird, wirkt sich die Richtlinie standardmäßig auf die Antwort aus.

Das <AssignTo>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird angegeben, dass das Ziel die ursprüngliche Anfrage ist, die an den Zielendpunkt gesendet wird:

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Wenn Sie createNew auf „false“ (Standardeinstellung) setzen, wird in diesem Beispiel keine neue Anfrage erstellt. Alle Vorgänge in dieser Richtlinie wirken sich auf die ursprüngliche Anfrage aus.

Beispiel 2

Im folgenden Beispiel wird ein neues Anfrageobjekt erstellt:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Wenn Sie ein neues Anfrage- oder Antwortobjekt erstellen, werden die anderen Elemente der Richtlinienrichtlinie „AssignMessage“ (z. B. <Add>, <Set> und <Set>) auf dieses neue Anfrageobjekt angewendet.

Sie können später in anderen Richtlinien des Ablaufs auf das neue Anfrageobjekt zugreifen oder das neue Anfrageobjekt mit einer ServiceCallout-Richtlinie an einen externen Dienst senden.

Beispiel 3

Im folgenden Beispiel wird ein neues Anfrageobjekt mit dem Namen „MyRequestObject“ erstellt:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

Wenn Sie ein neues Anfrage- oder Antwortobjekt erstellen, werden die anderen Elemente der Richtlinienrichtlinie „AssignMessage“ (z. B. <Add>, <Set> und <Set>) auf dieses neue Anfrageobjekt angewendet.

Sie können später in anderen Richtlinien des Ablaufs auf das neue Anfrageobjekt zugreifen oder das neue Anfrageobjekt mit einer ServiceCallout-Richtlinie an einen externen Dienst senden.

In der folgenden Tabelle werden die Attribute von <AssignTo> beschrieben:

Attribut Beschreibung erforderlich? Typ
createNew

Bestimmt, ob diese Richtlinie eine neue Nachricht erstellt, wenn Werte zugewiesen werden.

Bei „true“ erstellt die Richtlinie eine neue Variable des durch type angegebenen Typs (entweder „request“ oder „response“). Wenn Sie den Namen der neuen Variable nicht angeben, erstellt die Richtlinie ein neues Anfrage- oder Antwortobjekt basierend auf dem Wert von type.

Wenn "falsch", antwortet die Richtlinie auf zwei Arten:

  • Wenn <AssignTo> den Variablennamen in eine Anfrage oder Antwort auflösen kann, wird die Verarbeitung fortgesetzt. Befindet sich die Richtlinie beispielsweise in einem Anfragefluss, ist die Variable das Anfrageobjekt. Wenn sich die Richtlinie in einer Antwort befindet, ist die Variable das Antwortobjekt.
  • Wenn <AssignTo> nicht aufgelöst oder in einen Nicht-Nachrichtentyp aufgelöst werden kann, gibt die Richtlinie einen Fehler aus.

Wenn createNew nicht angegeben ist, antwortet die Richtlinie auf eine von zwei Arten:

  • Wird <AssignTo> in eine Nachricht aufgelöst, dann wird die Verarbeitung mit dem nächsten Schritt fortgesetzt.
  • Wenn <AssignTo> nicht aufgelöst oder in einen Nicht-Nachrichtentyp aufgelöst werden kann, wird eine neue Variable des Typs type erstellt.
Optional Boolean
transport

Gibt den Transporttyp für den Anfrage- oder Antwortnachrichtentyp an.

Der Standardwert ist „http“ (der einzige unterstützte Wert).

Optional String
type Gibt den Typ der neuen Nachricht an, wenn createNew "wahr" ist. Gültige Werte sind "Anfrage" oder "Antwort".

Der Standardwert ist „request“. Wenn Sie dieses Attribut weglassen, erstellt Edge entweder eine Anfrage oder eine Antwort, je nachdem, wo im Ablauf diese Richtlinie ausgeführt wird.

Optional String

<AssignVariable>

Weist einer Zielflussvariablen einen Wert zu (z.B. einer Variablen, deren Wert durch die Richtlinie "AssignMessage" festgelegt wird). Wenn die Ablaufvariable nicht vorhanden ist, wird sie von <AssignVariable> erstellt.

Standardwert
Erforderlich? Optional
Typ Komplexer Typ
Übergeordnetes Element <AssignMessage>
Untergeordnete Elemente <Name> (erforderlich)
<Ref>
<Template>
<Value>

Der Wert, den Sie der Variablen des Zielflusses zuweisen, kann einen der folgenden Werte haben:

  • Literalstring: Mit dem untergeordneten Element <Value> können Sie einen Literalstring-Wert für die Zielablaufvariable angeben.
  • Ablaufvariable: Verwenden Sie das untergeordnete Element <Ref>, um den Wert einer vorhandenen Ablaufvariablen für die Zielablaufvariable anzugeben. Eine vollständige Liste der Ablaufvariablen, die als Quelle verwendet werden können, finden Sie unter Referenz für Ablaufvariablen.
  • Nachrichtenvorlage: Verwenden Sie das untergeordnete Element <Template>, um eine Nachrichtenvorlage für die Variable des Zielablaufs anzugeben.

Das <AssignVariable>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Verwenden Sie das Element <Ref>, um die Quellvariable anzugeben. Wenn die von <Ref> referenzierte Variable nicht zugänglich ist, verwendet Edge den vom Element <Value> angegebenen Wert. Wenn Sie <Template> definieren, hat es Vorrang vor den anderen untergeordneten Elementen.

Beispiel 1

Im folgenden Beispiel wird der Wert einer neuen Variable myvar auf den Literalwert „42“ festgelegt:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel wird der Wert der Ablaufvariablen zugewiesen. request.header.user-agent in die Zielvariable myvar und der Wert des Abfrageparameters country in die Zielvariable ein. Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Wenn eine der Zuweisung fehlschlägt, weist Edge der Zielflussvariablen stattdessen den Wert „ErrorOnCopy“ zu.

Wenn die Ablaufvariablen myvar oder Country nicht vorhanden sind, erstellt <AssignVariable> sie.

Beispiel 3

Im folgenden Beispiel wird das untergeordnete Element <Template> verwendet, um zwei Kontextvariablen mit einem Literalstring (einen Bindestrich) zu verketten:

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Eine häufige Verwendung von <AssignVariable> besteht darin, einen Standardwert für einen Abfrageparameter, einen Header oder einen anderen Wert festzulegen, der mit der Anfrage übergeben werden kann. Dazu verwenden Sie eine Kombination aus den untergeordneten Elementen <Ref> und <Value>. Weitere Informationen finden Sie in den Beispielen für <Ref>.

<Name> (untergeordnet unter <AssignVariable>)

Gibt den Namen der Zielflussvariablen an (z.B. die Variable, deren Wert durch die Richtlinie „AssignMessage“ festgelegt wird). Wenn die Variable in <AssignVariable> nicht existiert, erstellt die Richtlinie eine Variable mit diesem Namen.

Standardwert
Erforderlich/Optional? Erforderlich
Typ String
Übergeordnetes Element <AssignVariable>
Untergeordnete Elemente Keine

Das <Name>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird die Zielvariable als myvar angegeben und auf den Literalwert „42“ gesetzt:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Wenn myvar nicht vorhanden ist, wird er von <AssignVariable> erstellt.

<Ref> (untergeordnet unter <AssignVariable>)

Gibt die Quelle der Zuweisung als Ablaufvariable an. Die Ablaufvariable kann eine der vordefinierten Ablaufvariablen sein, die in der Referenz zu Ablaufvariablen aufgeführt sind, oder eine von Ihnen erstellte benutzerdefinierte Ablaufvariable.

Der Wert von <Ref> wird immer als Flussvariable interpretiert. Sie können keinen Literalstring als Wert angeben. Wenn Sie einen Literalstring-Wert zuweisen möchten, verwenden Sie stattdessen das Element <Value>.

Standardwert
Erforderlich? Optional
Typ String
Übergeordnetes Element <AssignVariable>
Untergeordnete Elemente Keine

Wenn Sie eine Ablaufvariable mit <Ref> angeben, lassen Sie die einschließenden Klammern "{}" weg, die Sie normalerweise auf eine Ablaufvariable verwenden würden. So legen Sie beispielsweise den Wert Ihrer neuen Variablen auf den Wert der client.host-Ablaufvariablen fest:

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

Um einen Standardwert für die Zielablaufvariable zu definieren, verwenden Sie <Value> in Kombination mit <Ref>. Wenn die von <Ref> angegebene Flussvariable nicht vorhanden ist, nicht gelesen werden kann oder null ist, weist Edge stattdessen der Zielflussvariablen den Wert <Value> zu.

Das <Ref>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Wert der Ablaufvariablen request.header.user-agent der Zielablaufvariable myvar und der Wert des Abfrageparameters country der Variable Country zugewiesen:

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

In diesem Beispiel hat Edge für keine der Zuweisung einen Standardwert (oder Fallback-Wert) angegeben.

Beispiel 2

Im folgenden Beispiel wird der Wert der Ablaufvariablen request.header.user-agent der Zielablaufvariable myvar und dem Wert des Abfrageparameters country der Variable Country zugewiesen:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Wenn in diesem Beispiel die Werte der Flussvariablen request.header.user-agent oder des Abfrageparameters Country Null, nicht lesbar oder fehlerhaft sind, weist Edge den neuen Variablen den Wert „ErrorOnCopy“ zu.

Beispiel 3

Ein häufiger Anwendungsfall für <AssignVariable> ist die Festlegung des Standardwerts eines Abfrageparameters, eines Headers oder eines anderen Werts, der mit der Anfrage übergeben werden kann. Sie erstellen beispielsweise einen Wetter-API-Proxy, bei dem die Anfrage einen einzelnen Abfrageparameter namens „w“ annimmt. Dieser Parameter enthält die ID der Stadt, für die das Wetter gelten soll. Die Anfrage-URL hat das folgende Format:

http://myCO.com/v1/weather/forecastrss?w=city_ID

Wenn Sie einen Standardwert für „w“ definieren möchten, erstellen Sie eine „AssignMessage“-Richtlinie wie die folgende:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

In diesem Beispiel erhält <AssignVariable> den Wert von request.queryparam.w und weist ihn sich selbst zu. Wenn die Flussvariable null ist, d. h., der Abfrageparameter „w“ wurde in der Anfrage weggelassen, wird in diesem Beispiel der Standardwert aus dem Element <Value> verwendet. Daher können Sie eine Anfrage an diesen API-Proxy senden, bei dem der Abfrageparameter „w“ weggelassen wird:

http://myCO.com/v1/weather/forecastrss

...und der API-Proxy gibt weiterhin ein gültiges Ergebnis zurück.

Anders als bei Verwendung <Value> muss der Wert von<Ref> eine Flussvariable sein, z. B. ein Attribut eines request-, response- odertarget-Objekts. Der Wert kann auch eine von Ihnen erstellte benutzerdefinierte Ablaufvariable sein.

Wenn Sie eine Flussvariable angeben, die für den Wert von <Ref> nicht vorhanden ist, und der Wert von <IgnoreUnresolvedVariables> „true“ ist, gibt Edge einen Fehler aus.

<Template> (untergeordnet unter <AssignVariable>)

Gibt eine Nachrichtenvorlage an. Mit einer Nachrichtenvorlage können Sie eine Stringsubstitution durchführen, wenn die Richtlinie ausgeführt wird, und Literalstrings mit Variablennamen in geschweiften Klammern kombinieren. Darüber hinaus unterstützen SMS-Vorlagen Funktionen wie Maskierung und Groß- und Kleinschreibung.

Verwenden Sie das Attribut ref, um eine Ablaufvariable anzugeben, deren Wert eine Nachrichtenvorlage ist. Sie können beispielsweise eine Nachrichtenvorlage als benutzerdefiniertes Attribut in einer Entwickler-App speichern. Wenn Edge die Entwickler-App identifiziert, nachdem sie den API-Schlüssel oder das Sicherheitstoken überprüft hat (über eine zusätzliche Richtlinie), könnte das Element <AssignVariable> die Nachrichtenvorlage aus dem benutzerdefinierten Attribut der App verwenden, das als Ablaufvariable aus der Sicherheitsrichtlinie verfügbar ist. Im folgenden Beispiel wird davon ausgegangen, dass die Nachrichtenvorlage in einem Kundenattribut namens message_template in der Entwickleranwendung verfügbar ist, die den API-Aufruf durchführt, bei dem die VerifyAPIKey-Richtlinie zur Überprüfung des API-Schlüssel der App verwendet wurde:

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

Standardwert
Erforderlich? Optional
Typ String
Übergeordnetes Element <AssignVariable>
Untergeordnete Elemente Keine

Das <Template>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird die Syntax der Nachrichtenvorlagen verwendet, um zwei Kontextvariablen mit einem Literalstring (einen Bindestrich) zu verketten:

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel wird eine Flussvariable angegeben, wobei der Wert der Variablen eine vordefinierte Nachrichtenvorlage ist. Verwenden Sie diese Option, wenn Sie eine vordefinierte Vorlage zur Laufzeit einfügen möchten, ohne die Richtlinie zu ändern:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

Beispiel 3

Im folgenden Beispiel werden eine Flussvariable und ein Textwert angegeben. Wenn die referenzierte Variable nicht null ist, wird dieser Wert als Vorlage verwendet. Wenn der referenzierte Wert null ist, wird der Textwert (in diesem Fall {system.uuid}-{messageid}) als Vorlage verwendet. Dieses Muster ist nützlich, um einen Überschreibungswert anzugeben, mit dem Sie in einigen Fällen die Standardvorlage (Textteil) durch dynamisch festgelegte Werte überschreiben möchten. Beispielsweise kann eine bedingte Anweisung einen Wert aus einer Schlüssel/Wert-Zuordnung abrufen und die referenzierte Variable auf diesen Wert setzen:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (untergeordnet unter <AssignVariable>)

Definiert den Wert der mit dem Parameter <AssignVariable> festgelegten Zielablaufvariable. Der Wert wird immer als Literalstring interpretiert. Sie können keine Ablaufvariable als Wert verwenden, selbst wenn Sie den Wert in Klammern ("{}") einschließen. Wenn Sie eine Ablaufvariable verwenden möchten, verwenden Sie stattdessen <Ref>.

Standardwert
Erforderlich? Optional
Typ String
Übergeordnetes Element <AssignVariable>
Untergeordnete Elemente Keine

Wenn sie in Verbindung mit dem <Ref>-Element verwendet werden, fungiert <Value> als Standardwert (oder Fallback). Wenn <Ref> nicht angegeben, nicht auflösbar oder null ist, wird der Wert von <Value> verwendet.

Das Element <Value> verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Wert der Zielflussvariable myvar auf den Literalwert „42“ gesetzt:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel wird der Wert der Ablaufvariablen request.header.user-agent zur Ablaufvariablen myvar und dem Wert des Abfrageparameters country der Variable Country zugewiesen:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Wenn eine der Zuweisungen fehlschlägt, weist <AssignVariable> stattdessen der Zielablaufvariablen den Wert „ErrorOnCopy“ zu.

<Copy>

Kopiert Werte aus der von dem Attribut source angegebenen Nachricht an die Nachricht, die mit dem <AssignTo>-Element angegeben wurde. Wenn Sie kein Ziel mit <AssignTo> angeben, kopiert diese Richtlinie die Werte in die Anfrage oder Antwort, je nachdem, an welcher Stelle im Ablauf diese Richtlinie ausgeführt wird.

Standardwert
Erforderlich? Optional
Typ String
Übergeordnetes Element <AssignMessage>
Untergeordnete Elemente <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

Das <Copy>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

Beispiel 1

Im folgenden Beispiel werden ein Header, drei Formularparameter, der Pfad und alle Abfrageparameter von der Anfrage an eine neue benutzerdefinierte Anfrage kopiert:

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Das <Copy>-Element hat die folgenden Attribute:

Attribut Beschreibung erforderlich? Typ
Quelle

Gibt das Quellobjekt der Kopie an.

  • Wenn source nicht angegeben wird, wird sie als einfache Nachricht behandelt. Befindet sich die Richtlinie beispielsweise im Anfrageablauf, verwendet die Quelle standardmäßig das Objekt request. Wenn sich die Richtlinie im Antwortablauf befindet, wird standardmäßig das Objekt response verwendet. Wenn Sie source weglassen, können Sie eine absolute Referenz auf eine Flussvariable als Quelle der Kopie verwenden. Geben Sie beispielsweise den Wert als {request.header.user-agent} an.
  • Wenn die Quellvariable nicht aufgelöst werden kann oder in einen Nicht-Nachrichtentyp aufgelöst werden kann, antwortet <Copy> nicht.
Optional String

<FormParams> (untergeordnet unter <Copy>)

Kopiert Formparameter aus der Anfrage, die durch das <Copy>-Element angegebene source-Attribut in die Anfrage angegeben durch das <AssignTo>-Element. Dieses Element hat keine Auswirkungen auf eine Antwort.

Standardwert
Erforderlich? Optional
Typ Array von <FormParam>-Elementen oder ein leeres Array
Übergeordnetes Element <Copy>
Untergeordnete Elemente <FormParam>

Das <FormParams>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird ein einzelner Formularparameter aus der Anfrage in die benutzerdefinierte Anfrage „MyCustomRequest“ kopiert:

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel werden alle Formularparameter in die benutzerdefinierte Anfrage „MyCustomRequest“ kopiert:

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Beispiel 3

Im folgenden Beispiel werden drei Formularparameter in die benutzerdefinierte Anfrage „MyCustomRequest“ kopiert:

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Beispiel 4

Wenn mehrere Formularparameter mit demselben Namen vorhanden sind, verwenden Sie die folgende Syntax:

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

In diesem Beispiel werden „f1“, „f2“ und der zweite für „f3“ kopiert. Wenn „f3“ nur einen Wert hat, wird dieser nicht kopiert.

Sie können <FormParams> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • HTTP-Verb: POST
  • Nachrichtentyp: Antwort
  • Mindestens eine der folgenden Optionen:
    • Formulardaten: Legen Sie einen Wert oder "" (den leeren String) fest. Beispiel: Mit curl fügen Sie -d "" in Ihre Anfrage ein.
    • Content-Length-Header: Der Wert 0 (wenn sich die Daten nicht in der ursprünglichen Anfrage befinden, andernfalls ist die aktuelle Länge). Beispiel: Mit curl fügen Sie -H "Content-Length: 0" in Ihre Anfrage ein.

Wenn Sie <FormParams> kopieren, setzt <Copy> den Content-Type der Nachricht auf "application/x-www-form-urlencoded", bevor die Nachricht an den Zieldienst gesendet wird.

<Headers> (untergeordnet unter <Copy>)

Kopiert HTTP-Header aus der Anfrage- oder Antwortnachricht, die durch das source-Attribut des Elements <Copy> angegeben wurde, in die angegebene Anfrage- oder Antwortnachricht durch das Element <AssignTo>.

Standardwert
Erforderlich? Optional
Typ Array von <Header>-Elementen oder ein leeres Array
Übergeordnetes Element <Copy>
Untergeordnete Elemente <Header>

Das <Headers>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Header user-agent aus der Anfrage in das neue benutzerdefinierte Anfrageobjekt kopiert:

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Beispiel 2

Verwenden Sie zum Kopieren aller Header ein leeres <Headers>-Element, wie im folgenden Beispiel gezeigt:

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Beispiel 3

Wenn es mehrere Header mit demselben Namen gibt, verwenden Sie die folgende Syntax:

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

In diesem Beispiel werden "h1", "h2" und der zweite Wert von "h3" kopiert. Wenn „f3“ nur einen Wert hat, wird dieser nicht kopiert.

<Path> (untergeordnet unter <Copy>)

Bestimmt, ob der Pfad aus der Quellanfrage in die Zielanfrage kopiert werden soll. Dieses Element hat keine Auswirkungen auf eine Antwort.

Bei "wahr" kopiert diese Richtlinie den Pfad aus der Anfragenachricht, die im source-Attribut des <Copy>-Elements angegeben ist zur Anfragenachricht, die durch das Element <AssignTo> angegeben wird.

Standardwert Falsch
Erforderlich? Optional
Typ Boolesch
Übergeordnetes Element <Copy>
Untergeordnete Elemente Keine

Das <Path>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird angegeben, dass die der Richtlinien „AssignMessage“ den Pfad von der Quellanfrage in das neue benutzerdefinierte Anfrageobjekt kopieren soll:

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Sie können <Path> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Anfrage

<Payload> (untergeordnet unter <Copy>)

Legt fest, ob die Nutzlast von der Quelle zum Ziel kopiert werden soll. Die Quelle und das Ziel können Anfragen oder Antworten sein.

Bei "wahr" kopiert diese Richtlinie die Nutzlast aus der Nachricht, die durch das source-Attribut des <Copy>-Elements angegeben ist zur Nachricht, die durch das Element <AssignTo> angegebene wird.

Standardwert Falsch
Erforderlich? Optional
Typ Boolesch
Übergeordnetes Element <Copy>
Untergeordnete Elemente Keine

Das <Payload>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird <Payload> auf "wahr" gesetzt, sodass die Anfragenutzlast von der Anfrage in die Antwort kopiert wird:

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

<QueryParams> (untergeordnet unter <Copy>)

Kopiert Abfragestringparameter aus der Anfrage, die durch das <Copy> -Element angegebenen source -Attribut in die durch die <AssignTo> -Element kopiert wird. Dieses Element hat keine Auswirkungen auf eine Antwort.

Standardwert
Erforderlich? Optional
Typ Array von <QueryParam>-Elementen oder ein leeres Array
Übergeordnetes Element <QueryParam>
Untergeordnete Elemente Keine

Das <QueryParams>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Abfrageparameter „my_param“ aus der Anfrage in ein neues benutzerdefiniertes Anfrageobjekt kopiert:

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel werden alle Abfrageparameter aus der Anfrage in ein neues benutzerdefiniertes Anfrageobjekt kopiert:

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Beispiel 3

Wenn mehrere Abfrageparameter mit demselben Namen vorhanden sind, verwenden Sie die folgende Syntax:

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

In diesem Beispiel werden „qp1“, „qp2“ und der zweite Wert von „qp3“ kopiert. Wenn „qp3“ nur einen Wert hat, wird dieser nicht kopiert.

Sie können <QueryParams> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • HTTP-Verb: GET
  • Nachrichtentyp: Anfrage

<ReasonPhrase> (untergeordnet unter <Copy>)

Bestimmt, ob die Begründung aus der Quellantwort auf die Zielantwort kopiert werden sollte. Dieses Element hat keine Auswirkungen auf eine Anfrage.

Bei "wahr" kopiert diese Richtlinie den ReasonPhrase aus der Antwort, die im Attribut source des <Copy>-Elements angegeben wird, zur Antwort, die im Element <AssignTo> angegebenen wird.

Standardwert Falsch
Erforderlich? Optional
Typ Boolesch
Übergeordnetes Element <Copy>
Untergeordnete Elemente Keine

Das <ReasonPhrase>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird <ReasonPhrase> auf "wahr" gesetzt, wodurch <Copy> die Grundformulierung aus der Standardantwort in ein benutzerdefiniertes Antwortobjekt kopiert:

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

Sie können <ReasonPhrase> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Antwort

<StatusCode> (untergeordnet unter <Copy>)

Bestimmt, ob der Statuscode aus der Quellantwort auf die Zielantwort kopiert wird. Dieses Element hat keine Auswirkungen auf eine Anfrage.

Bei "wahr" kopiert diese Richtlinie den Statuscode aus der Antwortnachricht, die vom <Copy> -Element des source -Attributs an die Antwortnachricht des vom <AssignTo>-Elements angegeben wird.

Standardwert Falsch
Erforderlich? Optional
Typ Boolesch
Übergeordnetes Element <Copy>
Untergeordnete Elemente Keine

Das <StatusCode>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird für <StatusCode> der Wert "wahr" festgelegt. Dadurch wird der Statuscode aus dem Standardantwortobjekt in ein neues, benutzerdefiniertes Antwortobjekt kopiert:

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

Sie können <StatusCode> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Antwort

Die häufige Verwendung von <StatusCode> besteht darin, dass die Proxy-Antwort denselben Status wie die Antwort hat, die vom Ziel empfangen wird, wenn createNew für <AssignTo> verwendet wird. Attribut auf "wahr" gesetzt ist.

<Verb> (untergeordnet unter <Copy>)

Bestimmt, ob das HTTP-Verb aus der Quellanfrage in die Zielanfrage kopiert wird. Dieses Element hat keine Auswirkungen auf eine Antwort.

Bei "wahr" wird das Verb aus dem Attribut source des Elements <Copy> in die im Element <AssignTo> angegebene Anfrage kopiert.

Standardwert Falsch
Erforderlich? Optional
Typ Boolesch
Übergeordnetes Element <Copy>
Untergeordnete Elemente Keine

Das <Verb>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird <Verb> auf "wahr" gesetzt. Damit wird das Verb aus der Standardanfrage in eine neue, benutzerdefinierte Anfrage kopiert:

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Sie können <Verb> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Anfrage

<Version> (untergeordnet unter <Copy>)

Bestimmt, ob die HTTP-Version aus der Quellanfrage in die Zielanfrage kopiert wird. Dieses Element hat keine Auswirkungen auf eine Antwort.

Bei "wahr" wird die HTTP-Version aus dem Attribut source des Elements <Copy> in das Objekt kopiert, das durch das Element <AssignTo> angegeben wird.

Standardwert Falsch
Erforderlich? Optional
Typ Boolesch
Übergeordnetes Element <Copy>
Untergeordnete Elemente Keine

Das <Version>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird für die Anfrage <Version> auf "wahr" festgelegt, wodurch die Version vom Standardanfrageobjekt in ein neues, benutzerdefiniertes Anfrageobjekt kopiert wird:

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Sie können <Version> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Anfrage

<DisplayName>

Wird zusätzlich zum Attribut name verwendet, um die Richtlinie im Proxy-Editor der Verwaltungs-UI mit einem anderen, natürlicher klingenden Namen zu versehen.

Das Element <DisplayName> ist für alle Richtlinien gleich.

Standardwert
Erforderlich/Optional? Optional. Wenn Sie <DisplayName> weglassen, wird der Wert des Attributs name der Richtlinie verwendet.
Typ String
Übergeordnetes Element <PolicyElement>
Untergeordnete Elemente Keine

Das <DisplayName>-Element verwendet die folgende Syntax:

Syntax

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

Beispiel

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

Das <DisplayName>-Element hat keine Attribute oder untergeordneten Elemente.

<IgnoreUnresolvedVariables>

Bestimmt, ob die Verarbeitung beendet wird, wenn eine nicht aufgelöste Variable erkannt wird.

Standardwert Falsch
Erforderlich? Optional
Typ Boolesch
Übergeordnetes Element <AssignMessage>
Untergeordnete Elemente Keine

Auf true festlegen, um nicht aufgelöste Variablen zu ignorieren und die Verarbeitung fortzusetzen. Andernfalls false. Der Standardwert ist false.

Das Festlegen von <IgnoreUnresolvedVariables> auf true unterscheidet sich vom Festlegen des continueOnError der <AssignMessage> auf true insofern, als es spezifisch für das Festlegen und Abrufen von Werten von Variablen ist. Wenn Sie continueOnError auf true festlegen, ignoriert Edge alle Fehler, nicht nur Fehler, die bei der Verwendung von Variablen auftreten.

Das <IgnoreUnresolvedVariables>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird <IgnoreUnresolvedVariables> auf "wahr" gesetzt:

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

Entfernt Header, Abfrageparameter, Formularparameter und/oder die Nachrichtennutzlast aus einer Nachricht. Die Nachricht kann eine Anfrage oder eine Antwort sein. Mit dem Element <AssignTo> geben Sie an, auf welche Nachricht sich <Remove> auswirkt.

Standardwert
Erforderlich? Optional
Typ Komplexer Typ
Übergeordnetes Element <AssignMessage>
Untergeordnete Elemente <FormParams>
<Headers>
<Payload>
<QueryParams>

Ein häufiger Anwendungsfall für <Remove> besteht darin, einen Abfrageparameter, der vertrauliche Informationen enthält, aus dem eingehenden Anfrageobjekt zu löschen, damit diese nicht an den Back-End-Server weitergegeben werden.

Das Element <Remove> verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Nachrichtentext aus der Antwort entfernt:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

Im Antwortablauf entfernt diese Richtlinie den Textkörper, sodass nur HTTP-Header an den Client zurückgegeben werden.

Beispiel 2

Im folgenden Beispiel werden alle Formularparameter und ein Abfrageparameter aus der eingehenden Anfrage entfernt:

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<FormParams> (untergeordnet unter <Remove>)

Entfernt die angegebenen Formularparameter aus der Anfrage. Dieses Element hat keine Auswirkungen auf eine Antwort.

Standardwert
Erforderlich? Optional
Typ Array von <FormParam>-Elementen oder ein leeres Array
Übergeordnetes Element <Remove>
Untergeordnete Elemente <FormParam>

Das <FormParams>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel werden drei Formularparameter aus der Anfrage entfernt:

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel werden alle Formularparameter aus der Anfrage entfernt:

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Beispiel 3

Wenn mehrere Formularparameter mit demselben Namen vorhanden sind, verwenden Sie die folgende Syntax:

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

In diesem Beispiel werden „f1“, „f2“ und der zweite Wert für „f3“ entfernt. Wenn „f3“ nur einen Wert hat, wird dieser nicht entfernt.

Sie können <FormParams> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Anfrage
  • Content-Type: "application/x-www-form-urlencoded"

<Headers> (untergeordnet unter <Remove>)

Entfernt die angegebenen HTTP-Header aus der Anfrage oder Antwort, die durch das Element <AssignTo> angegeben wird.

Standardwert
Erforderlich? Optional
Typ Array von <Header>-Elementen oder ein leeres Array
Übergeordnetes Element <Remove>
Untergeordnete Elemente <Header>

Das <Headers>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Header user-agent aus der Anfrage entfernt:

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel werden alle Header aus der Anfrage entfernt:

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Beispiel 3

Wenn es mehrere Header mit demselben Namen gibt, verwenden Sie die folgende Syntax:

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

In diesem Beispiel werden „h1“, „h2“ und der zweite Wert von „h3“ aus der Anfrage entfernt. Wenn „h3“ nur einen Wert hat, wird er nicht entfernt.

<Payload> (untergeordnet unter <Remove>)

Bestimmt, ob <Remove> die Nutzlast in der Anfrage oder Antwort löscht, die durch das Element <AssignTo> angegeben wird. Auf „true“ gesetzt, um die Nutzlast zu löschen, andernfalls „false“. Der Standardwert lautet „false“.

Standardwert Falsch
Erforderlich? Optional
Typ Boolesch
Übergeordnetes Element <Remove>
Untergeordnete Elemente Keine

Das <Payload>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird <Payload> auf "wahr" gesetzt, damit die Nutzlast der Anfrage gelöscht wird:

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (untergeordnet unter <Remove>)

Entfernt die angegebenen Abfrageparameter aus der Anfrage. Dieses Element hat keine Auswirkungen auf eine Antwort.

Standardwert
Erforderlich? Optional
Typ Array von <QueryParam>-Elementen oder ein leeres Array
Übergeordnetes Element <Remove>
Untergeordnete Elemente <QueryParam>

Das <QueryParams>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird ein einzelner Abfrageparameter aus der Anfrage entfernt:

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel werden alle Suchparameter aus der Anfrage entfernt:

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Beispiel 3

Wenn mehrere Abfrageparameter mit demselben Namen vorhanden sind, verwenden Sie die folgende Syntax:

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

In diesem Beispiel werden „qp1“, „qp2“ und der zweite Wert von „qp3“ aus der Anfrage entfernt. Wenn „qp3“ nur einen Wert hat, wird er nicht entfernt.

Beispiel 4

Im folgenden Beispiel wird der Abfrageparameter apikey aus der Anfrage entfernt:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Sie können <QueryParams> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • HTTP-Verb: GET
  • Nachrichtentyp: Anfrage

<Set>

Legt Informationen in der Anfrage oder Antwortnachricht fest, die durch das Element <AssignTo> angegeben werden. <Set> überschreibt Header oder Parameter, die in der ursprünglichen Nachricht bereits vorhanden sind. Wenn Sie einen neuen Header oder Parameter erstellen möchten, verwenden Sie stattdessen das Element <Add>.

Standardwert
Erforderlich? Optional
Typ Komplexer Typ
Übergeordnetes Element <AssignMessage>
Untergeordnete Elemente <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

Das <Set>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Beispiel 1

Das folgende Beispiel zeigt das Element <Set>:

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<FormParams> (untergeordnet unter <Set>)

Überschreibt vorhandene Formularparameter in einer Anfrage und ersetzt sie durch die neuen Werte, die Sie mit diesem Element angeben. Dieses Element hat keine Auswirkungen auf eine Antwort.

Standardwert
Erforderlich? Optional
Typ Array von <FormParam>-Elementen
Übergeordnetes Element <Set>
Untergeordnete Elemente <FormParam>

Das <FormParams>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Formularparameter „myparam“ auf den Wert der Variable request.header.myparam in einer neuen benutzerdefinierten Anfrage festgelegt:

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Sie können <FormParams> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • HTTP-Verb: POST
  • Nachrichtentyp: Anfrage

Wenn Sie leere Formularparameter in der Richtlinie definieren (<Add><FormParams/></Add>), fügt die Richtlinie keine Formularparameter hinzu. Dies entspricht dem Weglassen von <FormParams>.

<Set> ändert die Content-Type der Nachricht in „application/x-www-form-urlencoded“, bevor sie an den Zielendpunkt gesendet wird.

<Headers> (untergeordnet unter <Set>)

Überschreibt vorhandene HTTP-Header in der Anfrage oder Antwort, die durch das Element <AssignTo> angegeben werden.

Standardwert
Erforderlich? Optional
Typ Array von <Header>-Elementen
Übergeordnetes Element <Set>
Untergeordnete Elemente <Header>

Das <Headers>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Header user-agent auf den Wert der Variable request.header.user-agent festgelegt:

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Wenn Sie leere Header in Ihrer Richtlinie (<Add><Headers/></Add>) definieren, fügt die Richtlinie keine Header hinzu. Dies entspricht dem Weglassen von <Headers>.

<Path> (untergeordnet unter <Set>)

<Payload> (untergeordnet unter <Set>)

Definiert den Nachrichtentext für eine Anfrage oder Antwort, der durch das Element <AssignTo> angegeben wird. Die Nutzlast kann ein beliebiger gültiger Inhaltstyp sein, z. B. nur Text, JSON oder XML.

Standardwert leerer String
Erforderlich? Optional
Typ String
Übergeordnetes Element <Set>
Untergeordnete Elemente Keine

Das <Payload>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird eine Nur-Text-Nutzlast festgelegt:

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel wird eine JSON-Nutzlast festgelegt:

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

Beispiel 3

Im folgenden Beispiel werden Variablenwerte in die Nutzlast eingefügt, indem Variablennamen in geschweifte Klammern eingeschlossen werden:

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

In älteren Versionen von Apigee Edge, z. B. vor dem Cloud-Release 16.08.17, konnten Sie keine geschweiften Klammern zum Angeben von Variablenverweisen in JSON-Nutzlasten verwenden. In diesen Versionen mussten Sie die Attribute variablePrefix und variableSuffix verwenden, um Trennzeichen anzugeben und sie zum Umschließen von Variablennamen zu verwenden. Beispiel:

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

Diese ältere Syntax funktioniert noch.

Beispiel 4

Der Inhalt von <Payload> wird als Nachrichtenvorlage behandelt. Das bedeutet, dass die AssignMessage-Richtlinie Variablen in geschweiften Klammern durch den Wert der referenzierten Variablen während der Laufzeit ersetzt.

Im folgenden Beispiel wird die Syntax mit geschweiften Klammern verwendet, um einen Teil der Nutzlast auf einen variablen Wert zu setzen:

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

In der folgenden Tabelle werden die Attribute von <Payload> beschrieben:

Attribut Beschreibung Präsenz Typ
contentType

Wenn angegeben, wird der Wert von contentType dem HTTP-Header Content-Type zugewiesen.

Optional String
variablePrefix Gibt optional das führende Trennzeichen für eine Ablaufvariable an. Die Standardeinstellung ist „}“. Weitere Informationen finden Sie unter Referenz für Ablaufvariablen. Optional Char
variableSuffix Gibt optional das nachgestellte Trennzeichen für eine Ablaufvariable an. Die Standardeinstellung ist "}". Weitere Informationen finden Sie unter Referenz für Ablaufvariablen. Optional Char

<QueryParams> (untergeordnet unter <Set>)

Überschreibt vorhandene Abfrageparameter in der Anfrage mit neuen Werten. Dieses Element hat keine Auswirkungen auf eine Antwort.

Standardwert
Erforderlich? Optional
Typ Array von <QueryParam>-Elementen
Übergeordnetes Element <Set>
Untergeordnete Elemente <QueryParam>

Das <QueryParams>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Abfrageparameter "Adresse" auf den Wert der Variable request.header.address festgelegt:

<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

Sie können <QueryParams> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • HTTP-Verb: GET
  • Nachrichtentyp: Anfrage

Wenn Sie leere Abfrageparameter in Ihrer Richtlinie (<Set><QueryParams/></Set>) definieren, legt die Richtlinie keine Abfrageparameter fest. Dies entspricht dem Weglassen von <QueryParams>.

<ReasonPhrase> (untergeordnet unter <Set>)

Legt die Grundphrase für die Antwort fest. Dies wird normalerweise zur Fehlerbehebung in Kombination mit <StatusCode> durchgeführt. Dieses Element hat keine Auswirkungen auf eine Anfrage.

Standardwert
Erforderlich? Optional
Typ String
Übergeordnetes Element <Set>
Untergeordnete Elemente Keine

Das <ReasonPhrase>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird ein einfacher Grundsatz definiert:

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Beispiel 2

Der Inhalt von <ReasonPhrase> wird als Nachrichtenvorlage behandelt. Das bedeutet, dass ein Variablenname in geschweiften Klammern zur Laufzeit durch den Wert der referenzierten Variable ersetzt wird, wie das folgende Beispiel zeigt:

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Sie können <ReasonPhrase> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Antwort

<StatusCode> (untergeordnet unter <Set>)

Legt den Statuscode der Antwort fest. Dieses Element hat keine Auswirkungen auf eine Anfrage.

Standardwert "FAILED" (wenn das Attribut createNew von <AssignTo> auf "wahr" gesetzt ist)
Erforderlich? Optional
Typ String oder variable
Übergeordnetes Element <Set>
Untergeordnete Elemente Keine

Das <StatusCode>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird ein einfacher Statuscode festgelegt:

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Beispiel 2

Der Inhalt von <StatusCode> wird als Nachrichtenvorlage behandelt. Das bedeutet, dass ein Variablenname in geschweiften Klammern zur Laufzeit durch den Wert der referenzierten Variable ersetzt wird, wie das folgende Beispiel zeigt:

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Sie können <StatusCode> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Antwort

<Verb> (untergeordnet unter <Set>)

Legt das HTTP-Verb für die Anfrage fest. Dieses Element hat keine Auswirkungen auf eine Antwort.

Standardwert
Erforderlich? Optional
Typ String oder variable
Übergeordnetes Element <Set>
Untergeordnete Elemente Keine

Das <Verb>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird ein einfaches Verb für die Anfrage festgelegt:

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Beispiel 2

Der Inhalt von <Verb> wird als Nachrichtenvorlage behandelt. Das bedeutet, dass ein Variablenname, der in geschweifte Klammern eingeschlossen ist, zur Laufzeit durch den Wert der referenzierten Variable ersetzt wird.

Im folgenden Beispiel wird eine Variable verwendet, um ein Verb zu einzutragen:

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Sie können <Verb> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Anfrage

<Version> (untergeordnet unter <Set>)

Legt die HTTP-Version für eine Anfrage fest. Dieses Element hat keine Auswirkungen auf eine Antwort.

Standardwert
Erforderlich? Optional
Typ String oder variable
Übergeordnetes Element <Set>
Untergeordnete Elemente Keine

Das <Version>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird die Versionsnummer auf „1.1“ festgelegt:

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Beispiel 2

Im Folgenden wird eine Variable in geschweiften Klammern verwendet, um die Versionsnummer festzulegen:

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Der Inhalt von <Version> wird als Nachrichtenvorlage behandelt. Das bedeutet, dass ein Variablenname, der in geschweifte Klammern eingeschlossen ist, zur Laufzeit durch den Wert der referenzierten Variable ersetzt wird.

Sie können <Version> nur verwenden, wenn die folgenden Kriterien erfüllt sind:

  • Nachrichtentyp: Anfrage

Benutzerdefinierte Anfragenachrichten erstellen

Mit der Richtlinie „AssignMessage“ können Sie eine benutzerdefinierte Anfragenachricht erstellen. Nachdem Sie eine benutzerdefinierte Anfrage erstellt haben, können Sie diese so verwenden:

  • Auf Variablen in anderen Richtlinien zugreifen
  • An einen externen Dienst weiterleiten

Verwenden Sie das Element <AssignTo> in der Richtlinienrichtlinie „AssignMessage“, um eine benutzerdefinierte Anfragenachricht zu erstellen. Legen Sie createNew auf „true“ fest und geben Sie den Namen der neuen Nachricht im Text des Elements an, wie im folgenden Beispiel gezeigt:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Standardmäßig führt Edge nichts mit der benutzerdefinierten Anfragenachricht aus. Nach dem Erstellen fährt Edge den Ablauf mit der ursprünglichen Anfrage fort. Um die benutzerdefinierte Anfrage zu verwenden, fügen Sie Ihrem Proxy eine Richtlinie wie die ServiceCallout-Richtlinie hinzu, die die benutzerdefinierte Anfrage an einen externen Dienst weiterleiten kann.

In den folgenden Beispielen werden benutzerdefinierte Anfragenachrichten erstellt:

Beispiel 1

Im folgenden Beispiel wird ein benutzerdefiniertes Anfrageobjekt mit AssignMessage erstellt:

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Dieses Beispiel:

  • Erstellt ein neues Anfragenachrichtenobjekt namens „MyCustomRequest“.
  • Für MyCustomRequest gilt diese Richtlinie:
    • Kopiert den Wert des HTTP-Headers user-agent aus der eingehenden Anfrage in die neue Nachricht. Da <Copy> einen absoluten Verweis auf die Ablaufvariablen user-agent verwendet, müssen Sie das Attribut source nicht auf <Copy> setzen.
    • Legt den Abfrageparameter address in der benutzerdefinierten Nachricht auf den Wert des Abfrageparameters addy der eingehenden Anfrage fest.
    • Legt das HTTP-Verb auf GET fest.
  • Legt <IgnoreUnresolvedVariables> auf "falsch" fest. Wenn <IgnoreUnresolvedVariables> "falsch" ist und eine der Variablen, die der Richtlinie hinzufügen möchte, nicht existiert, beendet Edge die Verarbeitung im API-Ablauf.

Beispiel 2

Das folgende Beispiel zeigt, wie ein benutzerdefiniertes Anfrageobjekt mit AssignMessage erstellt wird:

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

In diesem Beispiel wird eine neue benutzerdefinierte Anfrage namens „partner.request“ erstellt. Anschließend werden <Verb> und <Payload> für die neue Anfrage festgelegt.

Sie können auch in einer anderen AssignMessage-Richtlinie, die später im Ablauf auf die Nachricht zugreift, auf eine benutzerdefinierte Anfragenachricht zugreifen. Im folgenden Beispiel wird der Wert des user-agent-Headers der benutzerdefinierten Anfragenachricht abgerufen:

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo createNew="false" type="request"></AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </Headers>
  </Set>
</AssignMessage>

Videos

In den folgenden Videos erfahren Sie mehr über die AssignMessage-Richtlinie.

Video Beschreibung
Warum AssignMessage-Richtlinie? Erfahren Sie mehr über die Vorteile der Verwendung der AssignMessage-Richtlinie, um die API-Anfrage oder -Antwort zu ändern, ohne den Back-End-Code zu ändern.
API-Elemente mithilfe der Richtlinie AssignMessage kopieren Kopieren Sie Elemente aus einer API-Anfrage oder -Antwort und erstellen Sie ein neues Anfrage- oder Antwortobjekt mithilfe der Richtlinie AssignMessage.
API-Elemente mithilfe der Richtlinie AssignMessage entfernen Entfernen Sie API-Elemente und ändern Sie die API mithilfe der Richtlinie AssignMessage, bevor sie das Ziel-Back-End erreicht.
API-Elemente mit der Richtlinie AssignMessage hinzufügen und festlegen API-Anfrage oder -Antwort ändern, indem Sie Abfrageparameter, Header, Formularparameter oder Nutzlasten mithilfe der Richtlinie AssignMessage hinzufügen.
Benutzerdefinierte Variablen mithilfe der Richtlinie AssignMessage erstellen Legen Sie benutzerdefinierte Ablaufvariablen mit der Richtlinie AssignMessage fest und nutzen Sie die Variablen in anderen Richtlinien im API-Proxy.
Erstellen Sie neue Anfrage- oder Antwortobjekte mit der Richtlinie AssignMessage Erstellen Sie neue API-Anfrage- oder Antwortobjekte mit der Richtlinie AssignMessage zur API-Laufzeit.
Erstellen Sie eine simulierte API mit der Richtlinie AssignMessage Erstellen Sie eine einfache simulierte REST API, indem Sie die Antwortrichtlinie dem Antwortablauf hinzufügen.
Die Nutzlast mithilfe der Richtlinie AssignMessage festlegen oder ändern REST-Anfrage in SOAP-Anfrage umwandeln, indem SOAP-Nutzlast mit der Richtlinienrichtlinie „AssignMessage“ zur API-Laufzeit festgelegt wird.

Fehlercodes

In diesem Abschnitt werden die Fehlercodes und Fehlermeldungen beschrieben, die zurückgegeben werden, sowie die Fehlervariablen, die von Edge festgelegt werden, wenn diese Richtlinie einen Fehler auslöst. Diese Informationen sind wichtig, wenn Sie Fehlerregeln zur Verarbeitung von Fehlern entwickeln. Weitere Informationen finden Sie unter Was Sie über Richtlinienfehler wissen müssen und Fehler beheben.

Laufzeitfehler

Diese Fehler können bei Ausführung der Richtlinie auftreten.

Fehlercode HTTP-Status Ursache Problembehebung
steps.assignmessage.SetVariableFailed 500 Die Richtlinie konnte keine Variable festlegen. Sehen Sie sich den Fehlerstring für den Namen der nicht aufgelösten Variable an.
steps.assignmessage.VariableOfNonMsgType 500

Dieser Fehler tritt auf, wenn für das Attribut source im Element <Copy> eine Variable festgelegt ist, die nicht vom Typ message ist.

Nachrichtentypvariablen stellen ganze HTTP-Anfragen und -Antworten dar. Die integrierten Edge-Flussvariablen request, response und message sind vom Typ „Nachricht“. Weitere Informationen zu Nachrichtenvariablen finden Sie in der Variablenreferenz.

steps.assignmessage.UnresolvedVariable 500

Dieser Fehler tritt bei einer Variablen auf, die in der Richtlinie "Nachricht zuweisen" angegeben ist, wenn die Variable

  • Der Wert liegt außerhalb des Bereichs (ist nicht in dem spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird)
  • oder
  • nicht aufgelöst werden kann (nicht definiert ist)

Bereitstellungsfehler

Diese Fehler können auftreten, wenn Sie einen Proxy bereitstellen, der diese Richtlinie enthält.

Fehlername Ursache Problembehebung
InvalidIndex Wenn der in den Elementen <Copy> und/oder <Remove> der Richtlinie zum Zuweisen von Nachrichten angegebene Index 0 oder eine negative Zahl ist, schlägt die Bereitstellung des API-Proxys fehl.
InvalidVariableName Wenn das untergeordnete Element <Name> leer ist oder nicht im Element <AssignVariable> angegeben ist, schlägt die Bereitstellung des API-Proxys fehl, da kein gültiger Variablenname vorhanden ist, dem ein Wert zugewiesen werden soll. Ein gültiger Variablenname ist erforderlich.
InvalidPayload Eine in der Richtlinie angegebene Nutzlast ist ungültig.

Fehlervariablen

Diese Variablen werden festgelegt, wenn diese Richtlinie zur Laufzeit einen Fehler auslöst. Weitere Informationen finden Sie unter Was Sie über Richtlinienfehler wissen müssen.

Variablen Wo Beispiel
fault.name="fault_name" fault_name ist der Name des Fehlers, der in der obigen Tabelle Laufzeitfehler aufgeführt ist. Der Fehlername ist der letzte Teil des Fehlercodes. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name ist der benutzerdefinierte Name der Richtlinie, die den Fehler ausgelöst hat. assignmessage.AM-SetResponse.failed = true

Beispiel für eine Fehlerantwort

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

Beispiel für eine Fehlerregel

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults">
    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

Schemas

Jeder Richtlinientyp wird durch ein XML-Schema (.xsd) definiert. Zu Referenzzwecken sind Richtlinienschemas auf GitHub verfügbar.

Weitere Informationen

Arbeitsproben der Richtlinie „AssignMessage“ finden Sie in den API-Plattform-Beispielen.

Ein fortgeschrittenes Beispiel für das Überschreiben von target.url aus dem ProxyEndpoint finden Sie in diesem Apigee Community-Artikel.

Um den „Pfad festlegen“ in Aktion in einer ServiceCallout-Richtlinie anzuwenden, sehen Sie sich dieses Beispiel in den Apigee GitHub-Beispielen an. Klonen Sie einfach das Repository und folgen Sie der Anleitung in diesem Thema. In diesem Beispiel wird die „AssignMessage“-Richtlinie verwendet, um einen Anfragepfad festzulegen, und anschließend eine Service-Callout-Richtlinie, um die Anfrage an einen externen Dienst zu senden.