AssignMessage-Richtlinie

Diese Seite gilt für Apigee und Apigee Hybrid.

Apigee Edge-Dokumentation aufrufen

Richtliniensymbol

Was

Die AssignMessage-Richtlinie kann eine vorhandene Anfrage- oder Antwortnachricht ändern oder während des API-Proxy-Ablaufs eine neue Anfrage oder Antwortnachricht erstellen. 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 Nachrichtennutzlasten aus einer Nachricht entfernen.
  • Den Wert von Eigenschaften in einer Nachricht festlegen

Mit AssignMessage können Sie auch beliebige Kontextvariablen setzen, unabhängig von den oben genannten Operationen, die auf eine Nachricht zutreffen könnten.

Mit AssignMessage können Sie Attribute der Anfrage oder Antwort hinzufügen, ändern oder entfernen. Sie können AssignMessage auch verwenden, um eine benutzerdefinierte Anfrage oder Antwort zu erstellen und sie an ein alternatives Ziel weiterzuleiten, wie unter Benutzerdefinierte Anfragenachrichten erstellen beschrieben.

Diese Richtlinie ist eine erweiterbare Richtlinie, deren Verwendung je nach Apigee-Lizenz Auswirkungen auf die Kosten oder die Nutzung haben kann. Informationen zu Richtlinientypen und Auswirkungen auf die Nutzung finden Sie unter Richtlinientypen.

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

Die Reihenfolge, in der Sie <Add>, <Copy>, <Set> und organisieren <Remove>-Elemente sind wichtig. Die Richtlinie führt diese Aktionen in der Reihenfolge aus, in der sie in der Richtlinienkonfiguration angezeigt werden. Wenn Sie alle Header entfernen und dann einen bestimmten Header festlegen müssen, sollten Sie das Element <Remove> vor dem Element <Set> einfügen.

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>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
    <Ref>SOURCE_VARIABLE</Ref>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
    <Template>MESSAGE_TEMPLATE</Template>
    or
    <Template ref='TEMPLATE_VARIABLE'></Template>
    <Value>VARIABLE_VALUE</Value>
  </AssignVariable>

  <Copy source="VARIABLE_NAME">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Copy all headers -->
    <Headers/>
    <!-- or, copy specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</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>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>

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

  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all form parameters -->
    <FormParams/>
    <!-- or, remove specific form parameters by name -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME"/>
      <!-- or -->
      <FormParam name="FORMPARAM_NAME">[false|true]</FormParam>
      ...
    </FormParams>
    <!-- Remove all headers -->
    <Headers/>
    <!-- or, remove specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Remove all query parameters -->
    <QueryParams/>
    <!-- or, remove specific query parameters by name -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME"/>
      <!-- or -->
      <QueryParam name="QUERYPARAM_NAME">[false|true]</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>
    <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 Apigee-UI 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/>
    <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 Apigee-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.

This element has the following attributes that are common to all policies:

Attribute Default Required? Description
name N/A Required

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

continueOnError false Optional Set to false to return an error when a policy fails. This is expected behavior for most policies. Set to true to have flow execution continue even after a policy fails. See also:
enabled true Optional Set to true to enforce the policy. Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.
async   false Deprecated This attribute is deprecated.

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 dem Nachrichtenobjekt, das im Element <AssignTo> angegeben ist, Informationen hinzu.

<Add> fügt der Nachricht Header oder Parameter hinzu, die in der ursprünglichen Nachricht nicht vorhanden sind. Beachten Sie, dass <Set> ebenfalls diese Funktion bietet.

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, oder fügt neue Parameter hinzu, wenn dies nicht der Fall ist.

Weitere untergeordnete Elemente
<AssignTo> Optional Gibt an, auf welche Nachricht die AssignMessage-Richtlinie angewendet wird. Das kann die Standardanfrage oder -antwort 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 name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

2: Nutzlast entfernen

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

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

3: Antwort ändern

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

<AssignMessage name="AM-modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo>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 response als Variablenname im Element <AssignTo> angegeben ist, ändert diese Richtlinie das Antwortobjekt, das ursprünglich mit den vom Zielserver zurückgegebenen Daten festgelegt wurde.

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 einen HTTP-Header, der 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.

Zum Einbetten von Edge-Ablaufvariablen in eine XML-Nutzlast setzen Sie die angegebene Variable in geschweifte Klammern. Beispiel: {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="AM-set-dynamic-content">
  <AssignTo>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.

Sie können Variablen auch mit geschweiften Klammern einfügen.

5: Abfrageparameter entfernen

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

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Es empfiehlt sich, den Abfrageparameter apikey aus der Anfragenachricht zu entfernen, wenn Sie die VerifyAPIKey-Richtlinie zur Nutzerauthentifizierung verwenden. Dadurch verhindern Sie, dass vertrauliche Schlüsselinformationen an das Backend-Ziel übergeben 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 name="AM-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>
</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 geben den Namen der neuen Variablen an. 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.

    Achten Sie darauf, das Attribut contentType des Elements <Payload> auf application/xml zu setzen.

  4. Senden Sie eine Anfrage an Ihren API-Proxy, zum 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 name="AM-Payload-from-SC-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

{calloutResponse.header.Set-Cookie.values}

8: Formularparameter, Header und Abfrageparameter speichern und entfernen

Wenn Sie Header, Abfrage- oder Formularparameter mit <Remove> löschen, aber später im Richtlinienablauf auf ihre Werte zugreifen möchten, können Sie die Werte mit <AssignVariable> speichern.

<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-StoreAndRemove">
  <DisplayName>AM-StoreAndRemove</DisplayName>
  <AssignVariable>
    <Name>var_grant_type</Name>
    <Ref>request.formparam.grant_type</Ref>
  </AssignVariable>
  <Remove>
    <Headers/>
    <FormParams/>
    <Payload/>
  </Remove>
  <Set>
    <Headers>
      <Header name="Content-Type">application/x-www-form-urlencoded</Header>
      <Header name="Accept">application/json</Header>
      <Header name="Grant-Type">{var_grant_type}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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. Beachten Sie, dass <Set> ebenfalls diese Funktion bietet. 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 name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel wird mit dem Element <Headers> der Anfrage ein partner-id-Header hinzugefügt, der an den Zielendpunkt gesendet wird:

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 3

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

In diesem Beispiel wird <Add> im Anfragefluss verwendet. Wenn Sie die Ergebnisse in einem Tool wie der Debug-Übersicht betrachten, wird die Anfrage an https://example-target.com/get zu https://example-target.com/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) der Anfrage hinzugefügt:

<AssignMessage name="AM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel wird der Wert des Abfrageparameters name abgerufen und als Formularparameter in die Anfrage eingefügt. Anschließend wird der Abfrageparameter entfernt:

<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</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 name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

In diesem Beispiel werden die Abfragestringparameter aus der ursprünglichen Anfrage abgerufen und als Formularparameter mit unterschiedlichen Namen hinzugefügt. Anschließend werden die ursprünglichen Abfrageparameter entfernt. Apigee sendet die geänderte Anfrage an den Zielendpunkt.

Verwenden Sie die Debug-Übersicht, 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:

username=nick&zip_code=90210&default_language=en

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

  • HTTP-Verb: POST
  • Nachrichtentyp: Anfrage
  • Eine (oder beide) der folgenden:
    • 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, setzt Apigee den Content-Type-Header der Anfrage auf application/x-www-form-urlencoded, 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 Anfragenachricht ein partner-id-Header hinzugefügt und diesem Header der Wert der Ablaufvariablen verifyapikey.VAK-1.developer.app.partner-id zugewiesen.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</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 der Wert 42 zugewiesen:

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

  • HTTP-Verben: GET, POST, PATCH, DELETE
  • 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 oder wenn Sie das Element <AssignTo> angeben, aber keinen Textwert für das Element angeben, wird die Richtlinie auf die Standardanfrage oder -antwort angewendet, basierend auf dem Ort, an dem 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 keine Nachricht im Text von <AssignTo> angegeben. Dies bedeutet, dass die Richtlinie entweder auf die Nachricht request oder auf die Nachricht response reagiert, je nachdem, wo die Richtlinie ausgeführt wird.

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

Wenn Sie createNew="false" angeben und keinen Nachrichtennamen angeben, sind die anderen Attribute von <AssignTo> nicht relevant. In diesem Fall bietet es sich an, das Element <AssignTo> komplett wegzulassen.

Beispiel 2

Im folgenden Beispiel wird ein neues Anfrageobjekt erstellt, das das vorhandene Objekt überschreibt:

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

Wenn Sie eine neue Anfrage oder ein neues Antwortobjekt erstellen, werden die anderen Elemente der Richtlinie AssignMessage (wie <Add>, <Set> und <Copy>) für dieses neue Anfrageobjekt ausgeführt.

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">MyRequestObject</AssignTo>
  ...
</AssignMessage>

Wenn Sie eine neue Anfrage oder ein neues Antwortobjekt erstellen, werden die anderen Elemente der Richtlinie AssignMessage (wie <Add>, <Set> und <Copy>) für dieses neue Anfrageobjekt ausgeführt.

Sie können später in anderen Richtlinien des Ablaufs auf das neue Anfrageobjekt nach Name 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 (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.

Bei false reagiert die Richtlinie auf eine von 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, gibt die Richtlinie auf eine der folgenden beiden 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 Boolesch
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 true ist. Gültige Werte sind request und response.

Der Standardwert ist request. Wenn Sie dieses Attribut weglassen, erstellt Apigee entweder eine Anfrage oder eine Antwort, je nachdem, an welcher Stelle im Ablauf diese Richtlinie ausgeführt wird.

Optional String

<AssignVariable>

Weist einen Wert einer Zielablaufvariablen zu (z. B. einer Variablen, deren Wert durch die AssignMessage-Richtlinie festgelegt wird). Wenn die Ablaufvariable nicht vorhanden ist, wird sie von <AssignVariable> erstellt. Sie können mehrere AssignVariable-Elemente in der AssignMessage-Richtlinie verwenden. Sie werden in der Reihenfolge ausgeführt, in der sie in der Richtlinie aufgeführt sind.

Standardwert
Erforderlich? Optional
Typ Komplexer Typ
Übergeordnetes Element <AssignMessage>
Untergeordnete Elemente <Name> (erforderlich)
<PropertySetRef>
<Ref>
<ResourceURL>
<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.
  • Attributsatz: Verwenden Sie das untergeordnete Element <PropertySetRef>, um den Wert aus einem Attributsatz-Schlüssel/Wert-Paar abzurufen und in einer Flussvariable zu speichern. Ermöglicht den dynamischen Zugriff auf Attributgruppen.
  • Ressourcen-URL: Verwenden Sie das untergeordnete Element <ResourceURL>, um eine URL für eine Textressource vom Typ XSL, XSD, WSDL, JavaScript oder OpenAPI-Spezifikation anzugeben. Dadurch wird der Inhalt der Ressource der benannten Ablaufvariablen zugewiesen.
  • Nachrichtenvorlage: Verwenden Sie das untergeordnete Element <Template>, um eine Nachrichtenvorlage für die Variable des Zielablaufs anzugeben.

Die Reihenfolge für diese untergeordneten Elemente ist: ResourceURL, Vorlage, Ref, Wert, PropertySetRef.

Das <AssignVariable>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
    <Ref>SOURCE_VARIABLE</Ref>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
    <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 Variable, auf die in <Ref> verwiesen wird, nicht zugänglich ist, verwendet Apigee den Wert, der im <Value>-Element angegeben ist. Wenn Sie <Template> definieren, hat diese Vorrang vor den gleichgeordneten Elementen <Ref> und <Value>.

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 Aufgaben fehlschlägt, weist Apigee stattdessen der Zielablaufvariablen 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='AV-via-template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Beispiel 4

Im folgenden Beispiel wird <AssignVariable> verwendet, um das Standardverhalten zur Weitergabe des Pfadsuffixes von der Proxyanfrage an die Zielanfrage zu deaktivieren:

<AssignMessage name='AM-PathSuffixFalse'>
  <AssignVariable>
    <Name>target.copy.pathsuffix</Name>
    <Value>false</Value>
  </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 Zielablaufvariablen an (der Variablen, deren Wert durch die Richtlinie AssignMessage festgelegt wird). Wenn die Variable in <Name> nicht existiert, erstellt die Richtlinie eine Variable mit diesem Namen.

Standardwert
Erforderlich? 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 festgelegt:

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

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

<PropertySetRef> (untergeordnet unter <AssignVariable>)

Mit diesem Element können Sie den Wert eines Namen/Schlüsselpaars für einen Attributsatz dynamisch abrufen. Weitere Informationen zu Attributgruppen finden Sie unter Attributgruppen nutzen.

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

Ein Property-Satz besteht aus einem Namen/Schlüssel-Paar. Beispiel: propset1.id=12345 ist propset1 der Name des Attributsatzes. id ist ein Schlüssel und 12345 der Wert des Schlüssels.

Mit dem untergeordneten Element PropertySetRef können Sie die Namen und/oder Schlüssel der Attributsätze dynamisch auswählen. Angenommen, Sie haben 200 Routingregeln in einer Attributsatzdatei. Sie können folgendermaßen auf die Attributsatzregeln zugreifen, wobei routingrules der Name des Attributsatzes ist und rule1, rule2, rulen Schlüssel sind:

propertyset.routingrules.rule1
propertyset.routingrules.rule2
propertyset.routingrules.rulen

Um auf diese Eigenschaften in einem API-Proxy-Ablauf zuzugreifen, müssen Sie wissen, welche Regel beim Design gewählt werden soll. Es wird jedoch davon ausgegangen, dass der Regelname im Anfrage-Header oder in der Nutzlast enthalten ist. Eine Möglichkeit, die Regel auszuwählen, ist die Verwendung einer JavaScript-Richtlinie mit Code wie diesem:

context.getVariables("propertyset.routingrules." + ruleName); //assuming ruleName was populated earlier.

Andererseits können Sie mit der AssignMessage-PropertySetRef-Funktion einen Attributschlüssel dynamisch auswählen, ohne JavaScript zu implementieren.

Sie können im Element <PropertySetRef> eine Mischung aus Flussvariablen und Literalstringwerten verwenden. Weitere Informationen finden Sie in den Beispielen.

Das <PropertySetRef>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
  </AssignVariable>
</AssignMessage>

Beispiel 1

In diesem Beispiel wird einer Flussvariable der Wert aus einem Attributsatzschlüssel zugewiesen. In diesem Fall wird der Name des Attributsatzes aus dem Header propset_name abgerufen, der Schlüssel wird im Header propset_key bereitgestellt und der dem Schlüssel zugewiesene Wert in der Variablen flow_variable gespeichert.

<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <AssignVariable>
    <Name>flow_variable</Name>
    <PropertySetRef>{request.header.propset_name}.{request.header.propset_key}</PropertySetRef>
  </AssignVariable>
</AssignMessage>

Sie können im Element <PropertySetRef> eine beliebige Kombination von Ablaufvariablen und Literalstrings verwenden.

Beispiel 2

In diesem Beispiel wird einer Flussvariable der Wert aus einem Attributsatzschlüssel mithilfe eines festen Schlüsselnamens (Literalstrings) zugewiesen. In diesem Fall wird der Name des Attributsatzes aus dem Header propset_name abgerufen, der Schlüssel ist der Literalstring key1 und der dem Schlüssel zugewiesene Wert wird in der Variablen flow_variable gespeichert.

<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <AssignVariable>
    <Name>flow_variable</Name>
    <PropertySetRef>{request.header.propset_name}.key1</PropertySetRef>
  </AssignVariable>
</AssignMessage>

Sie können im Element <PropertySetRef> eine beliebige Kombination von Ablaufvariablen und Literalstrings verwenden.

<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 specify the variable name without brackets:
  <Ref>client.host</Ref>

  DO NOT use 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 Ablaufvariable nicht vorhanden ist, nicht gelesen oder null sein kann, weist Apigee den Wert von <Value> stattdessen der Zielablaufvariable zu.

Das Element <Ref> 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 Apigee für jede Zuweisung keinen Standard- oder Fallback-Wert festgelegt.

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 die Werte der request.header.user-agent-Ablaufvariable oder der Abfrageparameter Country null, unleserlich oder fehlerhaft sind, weist Apigee 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. Beispiel: Sie erstellen 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

Um einen Standardwert für w zu definieren, erstellen Sie eine AssignMessage-Richtlinie wie:

<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. Ist die Flussvariable null, wenn also der Abfrageparameter w in der Anfrage weggelassen wurde, wird in diesem Beispiel der Standardwert aus dem Element <Value> verwendet. Entsprechend 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.

Der Wert von <Ref> muss eine Ablaufvariable sein, z. B. ein Attribut eines request-, response- oder target-Objekts oder der Name einer benutzerdefinierten Ablaufvariablen.

Wenn Sie eine Ablaufvariable angeben, die für den Wert von <Ref> nicht existiert und der Wert von <IgnoreUnresolvedVariables> false ist, gibt Apigee einen Fehler aus.

<ResourceURL> (untergeordnet unter <AssignVariable>)

Gibt die URL einer Textressource als Quelle der Variablenzuweisung an. Apigee lädt die in <Name> angegebene Ablaufvariable mit dem Inhalt der referenzierten Ressource. Die Ressource kann vom Typ XSD, XSL, WSDL, JavaScript, Property Set oder OpenAPI Spec sein.

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

Wenn die durch <ResourceURL> angegebene Ressource nicht vorhanden ist, gilt: wenn der Wert von <IgnoreUnresolvedVariables> true ist, weist Apigee der Zielablaufvariablen den Wert null zu. Wenn der Wert von <IgnoreUnresolvedVariables> jedoch false ist, löst Apigee einen Fehler aus.

Das <ResourceURL>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
  </AssignVariable>
</AssignMessage>
      

Der Textwert nimmt einen Stringwert an und wird als Nachrichtenvorlage interpretiert. Alle davon sind gültig:

<ResourceURL>jsc://my-js-file.js</ResourceURL>
<ResourceURL>wsdl://{variable-goes-here}</ResourceURL>
<ResourceURL>{variable-goes-here}</ResourceURL>

Beispiel 1

Im folgenden Beispiel wird der Wert einer JSON-Ressource der Ablaufvariablen assigned-variable zugewiesen, die in den Proxy im Ordner jsc geladen wird:

<AssignMessage name='AM-From-ResourceURL-Proxy-JSC'>
  <AssignVariable>
    <Name>assigned-variable</Name>
    <ResourceURL>jsc://settings.json</ResourceURL>
  </AssignVariable>
</AssignMessage>

Beispiel 2

Das folgende Beispiel weist den Wert einer OpenAPI Spec-Ressource, die in den Proxy im Ordner oas geladen wurde, der Ablaufvariablen assigned-variable zu und setzt diesen Wert dann als Payload im Antworttext:

<AssignMessage name='AM-Response'>
  <AssignVariable>
    <Name>assigned-variable</Name>
    <ResourceURL>oas://Fulfillment.yaml</ResourceURL>
  </AssignVariable>
  <Set>
    <Payload contentType='application/yaml'>{assigned-variable}</Payload>
  </Set>
</AssignMessage>

<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. Beispielsweise können Sie eine Nachrichtenvorlage als Benutzerdefiniertes Attribut für eine Entwickleranwendung speichern, um die Option zu aktivieren. Wenn Apigee die Entwickleranwendung identifiziert, nachdem der API-Schlüssel oder das Sicherheitstoken (durch eine zusätzliche Richtlinie) bestätigt wurde, kann das <AssignVariable>-Element die Nachrichtenvorlage aus dem benutzerdefinierten Attribut der Anwendung verwenden, das als Ablaufvariable aus der Sicherheitsrichtlinie verfügbar ist. Im folgenden Beispiel wird davon ausgegangen, dass die Nachrichtenvorlage in einem benutzerdefinierten Attribut 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:

<Template 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='AV-via-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='AV-via-template-indirectly'>
  <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 override-Wert anzugeben, wobei in einigen Fällen die Standardvorlage (der Textteil) mit dynamisch festgelegten Werten überschrieben werden soll. Beispielsweise kann eine bedingte Anweisung einen Wert aus einer Schlüssel/Wert-Zuordnung abrufen und die referenzierte Variable auf diesen Wert setzen:

<AssignMessage name='AV-template-with-fallback'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <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 Zielablaufvariable 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 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 Umgebungs-Ablaufvariablen 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>
<StatusCode>
<Verb>
<Version>

Wenn Sie unter dem Element <Copy> keine untergeordneten Elemente angeben, werden alle Teile der angegebenen Quellnachricht kopiert.

Das <Copy>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
    <Copy source="VARIABLE_NAME">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Copy all headers -->
    <Headers/>
    <!-- or, copy specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</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>
    <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 aus der request-Nachricht in eine neue benutzerdefinierte Anfrage namens newRequest kopiert:

<AssignMessage name="AM-copy-1">
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1"/>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1"/>
      <FormParam name="Form_Param_Name_2"/>
      <FormParam name="Form_Param_Name_3"/>
    </FormParams>
    <Path>true</Path>
    <QueryParams/>
  </Copy>
</AssignMessage>

Da Elemente wie <Payload> und <Verb> nicht vorhanden sind, kopiert die Richtlinie diese Teile der Nachricht nicht.

Beispiel 2

Im folgenden Beispiel werden zuerst alle Daten aus der vorhandenen response-Nachricht entfernt und dann alle Werte aus einer anderen Nachricht namens secondResponse in die response-Nachricht kopiert:

<AssignMessage name='AM-Copy-Response'>
  <AssignTo createNew="false" transport="http" type="response">response</AssignTo>
  <!-- first remove any existing values -->
  <Remove/>
  <!-- then copy everything from the designated message -->
  <Copy source="secondResponse"/>
</AssignMessage>

Das <Copy>-Element hat ein einzelnes Attribut:

Attribut Beschreibung Erforderlich? Typ
Quelle

Gibt das Quellobjekt der Kopie an.

  • Wenn source nicht angegeben ist, wird standardmäßig message verwendet, was je nach dem Ablauf, in dem die Richtlinie ausgeführt wird, einen anderen Wert verwendet. Wenn die Richtlinie im Anfrageablauf ausgeführt wird, bezieht sich die message-Variable auf das request-Objekt. Wenn die Richtlinie im Antwortablauf ausgeführt wird, bezieht sich die message-Variable auf das response-Objekt.
  • Wenn die im Attribut source angegebene Variable nicht aufgelöst werden kann oder in einen Nicht-Nachrichtentyp aufgelöst werden kann, hat <Copy> keine Auswirkungen.
  • Achten Sie darauf, dass sich der für source angegebene Wert von der Zielnachricht unterscheidet, unabhängig davon, ob es sich um die Standardzielnachricht oder ein Ziel mit der expliziten Angabe <AssignTo> handelt. Wenn source mit der Zielnachricht identisch ist, hat <Copy> keine Auswirkungen.
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="VARIABLE_NAME">
    <!-- 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 Wert von 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
  • Eine (oder beide) der folgenden:
    • 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="VARIABLE_NAME">
    <!-- Copy all headers -->
    <Headers/>
    <!-- or, copy specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</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="AM-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 h3 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.

Im Fall von true kopiert diese Richtlinie den Pfad aus der Anfragenachricht, die vom source-Attribut des <Copy>-Elements bestimmt wird, in die Anfragenachricht, die durch das <AssignTo>-Element bestimmt 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="VARIABLE_NAME">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

Beispiel 1

Das folgende Beispiel zeigt, dass AssignMessage den Pfad aus 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.

Im Fall von true kopiert diese Richtlinie die Nutzlast aus der durch die source-Attribute des <Copy>-Elements bestimmten Nachricht in die durch das <AssignTo>-Element bestimmte Nachricht.

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="VARIABLE_NAME">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

Beispiel 1

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

<AssignMessage name="AM-copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo>response</AssignTo>
</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="VARIABLE_NAME">
    <!-- 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-Verben: GET, POST, PATCH, DELETE
  • Nachrichtentyp: Anfrage

<StatusCode> (untergeordnet unter <Copy>)

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

Im Fall von true kopiert diese Richtlinie den Statuscode aus der vom source-Attribut des Elements <Copy> bestimmten Antwortnachricht in die vom <AssignTo>-Element bestimmte Antwortnachricht.

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="VARIABLE_NAME">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird für <StatusCode> der Wert true 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 Quell- und Zielnachrichten vom Typ "Antwort" sind.

Eine häufige Verwendung von <StatusCode> besteht darin, den Statuscode der Proxy-Antwort auf einen anderen Wert als den vom Ziel empfangenen Wert festzulegen.

<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.

Im Fall von true wird das Verb aus dem source-Attribut des <Copy>-Elements in die im <AssignTo>-Element 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="VARIABLE_NAME">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird für <Verb> der Wert true festgelegt. Dadurch wird das Verb von 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.

Im Fall von true wird die HTTP-Version, die im Attribut source des Elements <Copy> gefunden wurde, in das Objekt kopiert, das vom 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="VARIABLE_NAME">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird für die Anfrage <Version> auf true festgelegt. Dadurch wird die Version aus dem Standardanfrageobjekt in ein neues, benutzerdefiniertes Anfrageobjekt kopiert:

<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>

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, more natural-sounding name.

The <DisplayName> element is common to all policies.

Default Value N/A
Required? Optional. If you omit <DisplayName>, the value of the policy's name attribute is used.
Type String
Parent Element <PolicyElement>
Child Elements None

The <DisplayName> element uses the following syntax:

Syntax

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Example

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

The <DisplayName> element has no attributes or child elements.

<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.

<IgnoreUnresolvedVariables> auf true festzulegen unterscheidet sich von der Festlegung des continueOnError von <AssignMessage> auf true, da es für das Festlegen und Abrufen der Werte von Variablen spezifisch ist. Wenn Sie continueOnError auf true setzen, ignoriert Apigee 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 für <IgnoreUnresolvedVariables> der Wert true festgelegt:

<AssignMessage name="AM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

Da <IgnoreUnresolvedVariables> auf true gesetzt ist, gibt diese Richtlinie keinen Fehler aus, wenn die Variable possibly-defined-variable nicht definiert ist.

<Remove>

Entfernt Header, Abfrageparameter, Formularparameter und/oder die Nachrichtennutzlast aus einer Nachricht. Mit einem leeren <Remove>-Tag wird alles aus der Nachricht entfernt.

Die betroffene 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> ist das Löschen eines Abfrageparameters oder Headers, der vertrauliche Informationen aus dem eingehenden Anfrageobjekt enthält, damit er nicht an den Backend-Server weitergeleitet wird.

Das <Remove>-Element verwendet die folgende Syntax:

Syntax

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all form parameters -->
    <FormParams/>
    <!-- or, remove specific form parameters by name -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME"/>
      <!-- or -->
      <FormParam name="FORMPARAM_NAME">[false|true]</FormParam>
      ...
    </FormParams>
    <!-- Remove all headers -->
    <Headers/>
    <!-- or, remove specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Remove all query parameters -->
    <QueryParams/>
    <!-- or, remove specific query parameters by name -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME"/>
      <!-- or -->
      <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird der Nachrichtentext aus der Antwort entfernt:

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</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 dem request-Objekt entfernt:

<AssignMessage name="AM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 3

Im folgenden Beispiel wird alles aus einem Nachrichtenobjekt entfernt:

<AssignMessage name="AM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</AssignMessage>

Normalerweise würden Sie dies nur tun, wenn Sie das Element <Set> oder <Copy> verwenden, um einige Ersatzwerte in der Nachricht festzulegen.

<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" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all form parameters -->
    <FormParams/>
    <!-- or, remove specific form parameters by name -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME"/>
      <!-- or -->
      <FormParam name="FORMPARAM_NAME">[false|true]</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel werden drei Formularparameter aus der Anfrage entfernt:

<AssignMessage name="AM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel werden alle Formularparameter aus der Anfrage entfernt:

<AssignMessage name="AM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 3

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

<AssignMessage name="AM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

In diesem Beispiel werden f1, f2 und der zweite Wert von 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" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all headers -->
    <Headers/>
    <!-- or, remove specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

Beispiel 1

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

<AssignMessage name="AM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel werden alle Header aus der Anfrage entfernt:

<AssignMessage name="AM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 3

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

<AssignMessage name="AM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

In diesem Beispiel werden h1, h2 und der zweite Wert von h3 aus der Anfrage entfernt. Wenn h3 nur einen Wert hat, wird dieser 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 ist 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" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

Beispiel 1

Im folgenden Beispiel wird für <Payload> der Wert true festgelegt, sodass die Anfragenutzlast gelöscht wird:

<AssignMessage name="AM-remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>request</AssignTo>
</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" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all query parameters -->
    <QueryParams/>
    <!-- or, remove specific query parameters by name -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME"/>
      <!-- or -->
      <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Beispiel 1

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

<AssignMessage name="AM-remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel werden alle Suchparameter aus der Anfrage entfernt:

<AssignMessage name="AM-remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 3

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

<AssignMessage name="AM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

Beispiel 4

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

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

  • HTTP-Verben: GET, POST, PATCH, DELETE
  • Nachrichtentyp: Anfrage

<Set>

Legt Informationen in der Anfrage oder Antwortnachricht fest, die durch das Element <AssignTo> angegeben werden. <Set> überschreibt Header oder Abfrage- bzw. Formularparameter, die bereits in der ursprünglichen Nachricht vorhanden sind, oder fügt neue hinzu, wenn dies nicht der Fall ist.

Header sowie Abfrage- und Formularparameter in einer HTTP-Nachricht können mehrere Werte enthalten. Verwenden Sie stattdessen das Element <Add>, um zusätzliche Werte für einen Header oder Parameter hinzuzufügen.

Standardwert
Erforderlich? Optional
Typ Komplexer Typ
Übergeordnetes Element <AssignMessage>
Untergeordnete Elemente <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<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>
    <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

Im folgenden Beispiel wird ein bestimmter Header festgelegt. Wenn diese Richtlinie im Anfrageablauf angehängt wird, kann das vorgelagerte System einen zusätzlichen Header empfangen, der in der ursprünglichen eingehenden Anfrage nicht enthalten war.

<AssignMessage name="AM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

Beispiel 2

Im folgenden Beispiel werden die Nutzlast für eine Antwort sowie der Content-Type-Header überschrieben.

<AssignMessage name="AM-Overwrite-Payload">
  <Set>
    <Payload contentType="application/json">{ "status" : 42 }</Payload>
  </Set>
  <AssignTo>response</AssignTo>
</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="AM-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 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 x-ratelimit-remaining auf den Wert der Variable ratelimit.Quota-1.available.count festgelegt:

<AssignMessage name="AM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

Wenn Sie leere Header in Ihrer Richtlinie (<Set><Headers/></Set>) definieren, legt die Richtlinie keine Header fest. Dies hat den gleichen Effekt wie das 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 Apigee-Versionen, z. B. vor der Cloud-Version 16.08.17, konnten Sie keine geschweiften Klammern verwenden, um Variablenverweise in JSON-Nutzlasten zu kennzeichnen. 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 Presence 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 für den Abfrageparameter address der Wert der Variablen request.header.address festgelegt:

<AssignMessage name="AM-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-Verben: GET, POST, PATCH, DELETE
  • 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>.

<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="AM-set-statuscode-404">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</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>response</AssignTo>
</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="AM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</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="AM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</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 gesetzt:

<AssignMessage name="AM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
 </AssignMessage>

Beispiel 2

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

<AssignMessage name="AM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</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

Sie können AssignMessage verwenden, um eine benutzerdefinierte Anfragenachricht zu 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 in der AssignMessage-Richtlinie das Element <AssignTo>, 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">MyRequestObject</AssignTo>
  ...
</AssignMessage>

Standardmäßig führt Apigee mit der benutzerdefinierten Anfragenachricht nichts aus. Nach dem Erstellen durchläuft Apigee den Ablauf mit der ursprünglichen Anfrage. Zur Verwendung der benutzerdefinierten Anfrage fügen Sie Ihrem Proxy eine Richtlinie wie die ServiceCallout-Richtlinie hinzu und verweisen in der Konfiguration für diese Richtlinie explizit auf die neu erstellte Anfragenachricht. Auf diese Weise könnten Sie die benutzerdefinierte Anfrage an einen externen Dienstendpunkt weiterleiten.

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 mit dem Namen MyCustomRequest.
  • Bei MyCustomRequest gilt diese Richtlinie:
    • Kopiert den Wert des HTTP-Headers user-agent aus der eingehenden Anfrage in die neue Nachricht. Da <Copy> das Attribut source nicht angibt, verwendet Apigee die Nachricht request als Quelle, aus der von kopiert werden soll auf Ihrem Mobilgerät.
    • 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 false fest. Wenn <IgnoreUnresolvedVariables> den Wert false hat und eine der in der Richtlinienkonfiguration referenzierten Variablen nicht vorhanden ist, tritt Apigee in den API-Ablauf Fehlerstatus ein.

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 auf die verschiedenen Attribute einer benutzerdefinierten Nachricht in einer anderen AssignMessage-Richtlinie zugreifen, die später im Ablauf auftritt. Im folgenden Beispiel wird der Wert eines Headers aus einer benannten benutzerdefinierten Antwort abgerufen und in einem neuen Header in der Anfragenachricht abgelegt:

<AssignMessage name="AM-Copy-Custom-Header">
  <AssignTo>request</AssignTo>
  <Set>
    <Headers>
      <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header>
    </Headers>
  </Set>
</AssignMessage>

Fehlercodes

This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.assignmessage.SetVariableFailed 500 The policy was not able to set a variable. See the fault string for the name of the unresolved variable.
steps.assignmessage.VariableOfNonMsgType 500

This error occurs if the source attribute in the <Copy> element is set to a variable which is not of type message.

Message type variables represent entire HTTP requests and responses. The built-in Apigee flow variables request, response, and message are of type message. To learn more about message variables, see the Variables reference.

steps.assignmessage.UnresolvedVariable 500

This error occurs if a variable specified in the AssignMessage policy is either:

  • Out of scope (not available in the specific flow where the policy is being executed)
  • or
  • Can't be resolved (is not defined)

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidIndex If the index specified in the <Copy> and/or <Remove> elements of the AssignMessage policy is 0 or a negative number, then deployment of the API Proxy fails.
InvalidVariableName If the child element <Name> is empty or not specified in the <AssignVariable> element, then the deployment of the API proxy fails because there is no valid variable name to which to assign a value. A valid variable name is required.
InvalidPayload A payload specified in the policy is invalid.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="FAULT_NAME" FAULT_NAME is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "UnresolvedVariable"
assignmessage.POLICY_NAME.failed POLICY_NAME is the user-specified name of the policy that threw the fault. assignmessage.AM-SetResponse.failed = true

Example error response

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

Example fault rule

<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 mit AssignMessage ein Anfragepfad festgelegt. Anschließend wird eine ServiceCallout-Richtlinie verwendet, um die Anfrage an einen externen Dienst zu senden.