Diese Seite gilt für Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen
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 Optionally, use the |
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.
Verwenden Sie zum Überschreiben vorhandener Header oder Parameter das |
<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.
|
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:
- Erstellt drei Ablaufvariablen in der Anfrage mit statischen Werten
- Ruft die Ablaufariablen dynamisch in einer zweiten Richtlinie im Anfrageablauf ab.
- 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:
- Fügen Sie dem Anfrageablauf Richtlinien 1 und 2 hinzu. Die Richtlinie 1 muss vor Richtlinie 2 abgelegt werden.
- Fügen Sie die dritte Richtlinie in den Antwort-Ablauf ein.
- 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>
aufapplication/xml
zu setzen. - 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: Mitcurl
fügen Sie-H "Content-Length: 0"
in Ihre Anfrage ein.
- Formulardaten: Legen Sie einen Wert oder "" (den leeren String) fest. Beispiel: Mit
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 Bei
Wenn
|
Optional | Boolesch |
transport |
Gibt den Transporttyp für den Anfrage- oder Antwortnachrichtentyp an. Der Standardwert ist |
Optional | String |
type |
Gibt den Typ der neuen Nachricht an, wenn createNew true ist. Gültige Werte sind request und response .
Der Standardwert ist |
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.
|
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: Mitcurl
fügen Sie-H "Content-Length: 0"
in Ihre Anfrage ein.
- Formulardaten: Legen Sie einen Wert oder "" (den leeren String) fest. Beispiel: Mit
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 |
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 Attributsource
nicht angibt, verwendet Apigee die Nachrichtrequest
als Quelle, aus der von kopiert werden soll auf Ihrem Mobilgerät. - Legt den Abfrageparameter
address
in der benutzerdefinierten Nachricht auf den Wert des Abfrageparametersaddy
der eingehenden Anfrage fest. - Legt das HTTP-Verb auf
GET
fest.
- Kopiert den Wert des HTTP-Headers
- Legt
<IgnoreUnresolvedVariables>
auffalse
fest. Wenn<IgnoreUnresolvedVariables>
den Wertfalse
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 Message type variables represent entire HTTP requests and responses. The built-in Apigee
flow variables |
build |
steps.assignmessage.UnresolvedVariable |
500 |
This error occurs if a variable specified in the AssignMessage policy is either:
|
build |
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.
|
build |
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.
|
build |
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.