Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Co
Zasada AssignMessage zmienia lub tworzy nowe żądania i odpowiedzi podczas procesu serwera proxy interfejsu API. Zasady te umożliwiają wykonywanie na takich wiadomościach tych czynności:
- dodawanie do wiadomości nowych parametrów formularzy, nagłówków i parametrów zapytania;
- Kopiowanie istniejących właściwości z jednej wiadomości do drugiej
- Usuwanie nagłówków, parametrów zapytania, parametrów formularza lub ładunków wiadomości z wiadomości
- Ustawianie wartości dotychczasowych właściwości w wiadomości
Przy użyciu zasady AssignMessage zwykle dodajesz, zmieniasz i usuwasz właściwości żądania lub odpowiedzi. Możesz jednak również użyć zasady AssignMessage, aby utworzyć niestandardowe żądanie lub wiadomość z odpowiedzią i przekazać je do alternatywnego miejsca docelowego, zgodnie z opisem w sekcji Tworzenie niestandardowych wiadomości z żądaniami.
Zasada AssignMessage może tworzyć lub zmieniać zmienne przepływu z tymi elementami podrzędnymi:
Element <AssignMessage>
Definiuje zasadę AssignMessage.
Wartość domyślna | Zobacz kartę Zasady domyślne poniżej |
Wymagany? | Wymagane |
Typ | Złożony obiekt |
Element nadrzędny | Nie dotyczy |
Elementy podrzędne |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
W elemencie <AssignMessage>
używana jest taka składnia:
Składnia
W elemencie <AssignMessage>
używana jest taka składnia:
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All AssignMessage child elements are optional --> <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>[false|true]</ReasonPhrase> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>policy_display_name</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Domyślna zasada
Poniższy przykład pokazuje ustawienia domyślne, gdy dodajesz zasadę AssignMessage do przepływu w interfejsie użytkownika Edge:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <ReasonPhrase/> <Path/> </Copy> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> <Payload/> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <AssignVariable> <Name>name</Name> <Value/> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Gdy wstawisz nową zasadę AssignMessage w interfejsie użytkownika Edge, szablon będzie zawierał namiastki wszystkich możliwych operacji. Zwykle to Ty wybierasz operacje, które chcesz wykonać z tą zasadą, i usuwasz pozostałe elementy podrzędne. Jeśli na przykład chcesz wykonać operację kopiowania, użyj elementu <Copy>
i usuń z zasady <Add>
, <Remove>
oraz inne elementy podrzędne, aby zwiększyć czytelność.
Ten element ma te atrybuty, które są wspólne dla wszystkich zasad:
Atrybut | Domyślnie | Wymagany? | Description |
---|---|---|---|
name |
Nie dotyczy | Wymagane |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie użyj elementu |
continueOnError |
fałsz | Opcjonalnie | Ustaw wartość „false”, aby wyświetlać błąd, gdy zasada nie działa. To prawidłowy proces w przypadku większości zasad. Ustaw wartość „true”, aby kontynuować wykonywanie przepływu nawet po wystąpieniu błędu. |
enabled |
prawda | Opcjonalnie | Ustaw wartość „true”, aby egzekwować zasadę. Ustaw wartość „false”, aby wyłączyć zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie powiązana z przepływem. |
async |
fałsz | Wycofano | Ten atrybut został wycofany. |
W tej tabeli znajdziesz ogólny opis elementów podrzędnych obiektu <AssignMessage>
:
Element podrzędny | Wymagana? | Opis |
---|---|---|
Typowe operacje | ||
<Add> |
Opcjonalnie | Dodaje informacje do obiektu wiadomości określonego przez element <AssignTo> .
|
<Copy> |
Opcjonalnie | Kopiuje informacje z wiadomości określonej przez atrybut source do obiektu wiadomości określonego przez element <AssignTo> . |
<Remove> |
Opcjonalnie | Usuwa określone elementy ze zmiennej wiadomości określonej w elemencie <AssignTo> . |
<Set> |
Opcjonalnie | Zastępuje wartości istniejących właściwości w żądaniu lub odpowiedzi, które są określone przez element <AssignTo> .
|
Inne elementy podrzędne | ||
<AssignTo> |
Opcjonalnie | Określa komunikat, na którym działa zasada AssignMessage. Może to być standardowe żądanie lub odpowiedź albo nowy komunikat niestandardowy. |
<AssignVariable> |
Opcjonalnie | Przypisuje wartość do zmiennej przepływu. Jeśli zmienna nie istnieje, tworzy ją <AssignVariable> . |
<IgnoreUnresolvedVariables> |
Opcjonalnie | Określa, czy przetwarzanie zatrzymuje się w przypadku wystąpienia nierozstrzygniętej zmiennej. |
Każdy z tych elementów podrzędnych jest opisany w kolejnych sekcjach.
Przykłady
Poniższe przykłady pokazują, jak można wykorzystać zasadę AssignMessage:
1. Dodaj nagłówek
Ten przykład dodaje nagłówek do żądania z elementem <Add>
:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
2. Usuń ładunek
Ten przykład usuwa ładunek z odpowiedzi z elementem <Remove>
:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
3. Zmień odpowiedź
Ten przykład modyfikuje istniejący obiekt odpowiedzi, dodając do niego nagłówek:
<AssignMessage name="modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" type="response"></AssignTo> </AssignMessage>
W tym przykładzie nie można utworzyć nowej wiadomości. Zamiast tego modyfikuje istniejącą odpowiedź przez dodanie nagłówka HTTP.
W tym przykładzie pominięto nazwę zmiennej w elemencie <AssignTo>
, a jako „odpowiedź” określono type
, więc ta zasada modyfikuje obiekt odpowiedzi zwrócony przez serwer docelowy.
Nagłówek HTTP dodany do wiadomości z odpowiedzią przez tę zasadę pochodzi ze zmiennej wypełnianej przez zasadę LookupCache. Dlatego komunikat z odpowiedzią zmodyfikowany przez tę zasadę przypisywania wiadomości zawiera nagłówek HTTP wskazujący, czy wyniki zostały pobrane z pamięci podręcznej. Ustawienie nagłówków w odpowiedzi może być przydatne podczas debugowania i rozwiązywania problemów.
4. Ustaw zawartość dynamiczną
Za pomocą funkcji Przypisz wiadomość możesz osadzić zawartość dynamiczną w ładunku wiadomości z odpowiedzią lub żądaniami.
Aby umieścić zmienne przepływu Edge w ładunku XML, umieść wyznaczoną zmienną w nawiasach klamrowych w ten sposób: {prefix.name}
.
W tym przykładzie umieszczono wartość zmiennej przepływu nagłówka HTTP user-agent
w elemencie XML o nazwie User-agent
:
<AssignMessage name="set-dynamic-content"> <AssignTo createNew="false" type="response"></AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
W przypadku ładunków JSON możesz wstawiać zmienne za pomocą atrybutów variablePrefix
i variableSuffix
ze znakami separatora, jak w tym przykładzie:
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
Pełną listę zmiennych przepływu znajdziesz w dokumentacji zmiennych przepływu.
Od wersji 16.08.17 chmury do wstawiania zmiennych możesz też używać nawiasów klamrowych.
5. Usuń parametr zapytania
Ten przykład usuwa z żądania parametr zapytania apikey
:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Sprawdzoną metodą jest usunięcie parametru zapytania apikey
z wiadomości żądania, gdy do uwierzytelniania użytkownika używasz zasadyVerifyAPIKey. Dzięki temu zapobiegasz przekazywaniu poufnych informacji o kluczu do miejsca docelowego backendu.
6. Ustawianie/pobieranie zmiennych
W poniższym przykładzie użyto 3 zasad przypisywania wiadomości:
- Tworzy w żądaniu trzy zmienne przepływu z wartościami statycznymi
- Dynamicznie pobiera zmienne przepływu w drugiej zasadzie w przepływie żądania
- Ustawia je w ładunku odpowiedzi
<!-- Policy #1: Set variables in the request --> <AssignMessage continueOnError="false" enabled="true" name="set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
W pierwszej zasadzie element <AssignVariable>
tworzy i ustawia w żądaniu 3 zmienne. Każdy element <Name>
określa nazwę zmiennej, a <Value>
– wartość.
Druga zasada odczytuje wartości za pomocą elementu <AssignVariable>
i tworzy 3 nowe zmienne:
<!-- 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>
W drugiej zasadzie element <Ref>
odwołuje się do zmiennej źródłowej, a elementy <Name>
określają nazwy nowych zmiennych. Jeśli zmienna, do której odwołuje się element <Ref>
, jest niedostępna, możesz użyć wartości określonej przez element <Value>
.
Aby wypróbować ten zestaw zasad:
- Dodaj zasady 1 i 2 do przepływu żądań. Pamiętaj, aby ustawić zasadę nr 1 przed zasadą nr 2.
- Dodaj trzecią zasadę do procesu odpowiedzi.
- Trzecia zasada dodaje zmienne do odpowiedzi za pomocą elementu
<Set>
. Ten przykład tworzy ładunek XML w odpowiedzi zwracanej przez Edge do klienta:<!-- 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>
Pamiętaj, że składnią dostępu do zmiennych przepływu w
<Set>
jest pakowanie ich w nawiasy klamrowe.Pamiętaj, aby ustawić atrybut
contentType
elementu<Payload>
na „application/xml”. - Wyślij żądanie do serwera proxy interfejsu API, na przykład:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
Opcjonalnie możesz użyć potoku potoku (np.
xmllint
), aby kod XML wyświetlał się w ładnie sformatowanej strukturze:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
Treść odpowiedzi powinna wyglądać tak:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7. Pobieranie nagłówków odpowiedzi z objaśnieniem dotyczącym usługi
W podanym niżej przykładzie załóżmy, że zasada ServiceCallout znajduje się w żądaniu serwera proxy interfejsu API, a odpowiedź z wywołaniem zawiera wiele nagłówków o tej samej nazwie (Set-Cookie
). Zakładając, że zmienna odpowiedzi wywołania usługi jest domyślną wartością calloutResponse
, druga zasada otrzymuje drugą wartość nagłówka Set-Cookie
.
<AssignMessage continueOnError="false" enabled="true" name="get-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Aby wyświetlić listę wszystkich wartości nagłówka, użyj tej zmiennej:
{calloutResponse.header.Set-Cookie.values}
Każdy element podrzędny w tym pliku referencyjnym ma dodatkowe przykłady. Więcej przykładów znajdziesz w przykładzie AssignMessage na GitHubie.
Odniesienie do elementu podrzędnego
W tej sekcji opisano elementy podrzędne funkcji <AssignMessage>
.
<Add>
Dodaje do żądania lub odpowiedzi informacje określone przez element <AssignTo>
.
Element <Add>
dodaje do wiadomości nowe właściwości, których nie ma w oryginalnej
wiadomości. Aby zmienić wartości istniejących właściwości, użyj elementu <Set>
.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Typ złożony |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne |
<FormParams> <Headers> <QueryParams> |
W elemencie <Add>
używana jest taka składnia:
Składnia
<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>
Przykład 1
W tym przykładzie użyto elementu <FormParams>
, aby pobrać z początkowego żądania wartości 3 parametrów ciągu zapytania i ustawić je jako parametry formularza w żądaniu w docelowym punkcie końcowym:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Przykład 2
W tym przykładzie użyto elementu <Headers>
do dodania nagłówka User-Agent
do żądania docelowego punktu końcowego:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Przykład 3
W tym przykładzie użyto elementu <QueryParams>
, aby dodać do żądania pojedynczy parametr zapytania o wartości statycznej:
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
W tym przykładzie we wstępnym przepływie żądania używany jest element <Add>
. Gdy spojrzysz na wyniki w narzędziu takim jak narzędzie do śledzenia, żądanie „http://http://httpbin.org/get” zmieni się na „http://http://httpbin.org/get?myParam=42”.
Elementy podrzędne elementu <Add>
obsługują zastępowanie ciągów dynamicznych nazywane szablonami wiadomości.
<FormParams>
(podrzędny wobec <Add>
)
Dodaje nowe parametry formularza do wiadomości z prośbą. Ten element nie ma wpływu na wiadomość z odpowiedzią.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <FormParam> |
Element nadrzędny |
<Add>
|
Elementy podrzędne |
<FormParam> |
W elemencie <FormParams>
używana jest taka składnia:
Składnia
<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>
Przykład 1
Ten przykład dodaje do żądania pojedynczy parametr formularza („answer”) i wartość statyczną („42”):
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"></AssignTo> </AssignMessage>
Przykład 2
Poniższy przykład pobiera wartość parametru ciągu zapytania name
i dodaje ją do żądania jako parametr formularza:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> </AssignMessage>
Pamiętaj, że ten przykład nie określa celu z parametrem <AssignTo>
. Ta zasada dodaje parametr tylko do żądania.
Przykład 3
Z przykładu poniżej dodano wiele parametrów formularza do żądania:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Ten przykład pobiera parametry ciągu zapytania ze źródłowego żądania i dodaje je jako parametry formularza do żądania wysłanego do docelowego punktu końcowego.
Aby przyjrzeć się przepływowi, możesz użyć narzędzia śledzenia. Zobaczysz, że treść żądania zawiera dane formularza zakodowane na potrzeby adresu URL, które pierwotnie zostały przekazane jako parametry ciągu zapytania:
%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en
Z <FormParams>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Czasownik HTTP: POST
- Typ wiadomości: prośba
- Jeden z tych warunków (lub oba):
- Dane formularza: ustaw jakąś wartość lub „” (pusty ciąg znaków). Na przykład polecenie
curl
dodaj do żądania element-d ""
. - Nagłówek
Content-Length
: ustaw na 0 (jeśli w pierwotnym żądaniu nie ma danych; w przeciwnym razie obecna długość w bajtach). Na przykład poleceniecurl
dodaj do żądania element-H "Content-Length: 0"
.
- Dane formularza: ustaw jakąś wartość lub „” (pusty ciąg znaków). Na przykład polecenie
Na przykład:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
Gdy dodasz <FormParams>
, Edge ustawia nagłówek Content-Type
żądania na „application/x-www-form-urlencoded” przed wysłaniem wiadomości do usługi docelowej.
<Headers>
(podrzędny wobec <Add>
)
Dodaje nowe nagłówki do określonego żądania lub odpowiedzi określonej przez element <AssignTo>
.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <Header> |
Element nadrzędny |
<Add>
|
Elementy podrzędne |
<Header> |
W elemencie <Headers>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Add> </AssignMessage>
Przykład 1
Poniższy przykład dodaje nagłówek user-agent
do wiadomości żądania i przypisuje do niego wartość zmiennej przepływu request.user.agent
.
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(podrzędny wobec <Add>
)
Dodaje do żądania nowe parametry zapytania. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <QueryParam> |
Element nadrzędny |
<Add>
|
Elementy podrzędne |
<QueryParam> |
W elemencie <QueryParams>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Przykład 1
Poniższy przykład dodaje do żądania parametr zapytania „myParam” i przypisuje mu wartość „42”:
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Z <QueryParams>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Czasownik HTTP: GET
- Typ wiadomości: prośba
Poza tym parametry zapytania możesz ustawić tylko wtedy, gdy atrybut type
elementu <AssignTo>
jest wiadomością żądania. Ustawienie ich w odpowiedzi nie ma żadnego efektu.
Jeśli zdefiniujesz w swojej zasadzie pustą tablicę parametrów zapytania (<Add><QueryParams/></Add>
), zasada nie będzie dodawać żadnych parametrów zapytania. Działa to tak samo jak pomijanie elementu <QueryParams>
.
<AssignTo>
Określa, na którym obiekcie działa zasada AssignMessage. Dostępne opcje to:
- Komunikat żądania:
request
odebrany przez serwer proxy interfejsu API - Odpowiedź:
response
zwrócony z serwera docelowego. - Komunikat niestandardowy: niestandardowy obiekt żądania lub odpowiedzi.
Pamiętaj, że w niektórych przypadkach nie możesz zmienić obiektu, na który działa zasada AssignMessage.
Nie możesz np. używać właściwości <Add>
czy <Set>
, aby dodawać lub zmieniać parametry zapytania (<QueryParams>
) czy parametrów formularza (<FormParams>
) w odpowiedzi. W żądaniu możesz modyfikować tylko parametry zapytań i formularzy.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne | Brak |
Jeśli nie określisz <AssignTo>
, zasada będzie używać domyślnego żądania lub odpowiedzi zależnie od miejsca wykonywania zasady. Jeśli zasada jest wykonywana w przepływie żądania, wpływa to na komunikat żądania. Jeśli zasada jest wykonywana w przepływie odpowiedzi, domyślnie wpływa na odpowiedź.
W elemencie <AssignTo>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
Przykład 1
Ten przykład określa, że celem jest pierwotne żądanie, które zostanie wysłane do docelowego punktu końcowego:
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ustawienie wartości „false” (fałsz) dla createNew
(domyślnie) nie powoduje utworzenia nowego żądania. Wszystkie operacje w tej zasadzie mają wpływ na pierwotne żądanie.
Przykład 2
Ten przykład pozwala utworzyć nowy obiekt żądania:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Gdy utworzysz nowy obiekt żądania lub odpowiedzi, inne elementy zasady AssignMessage (np. <Add>
, <Set>
i <Set>
) będą działać na tym nowym obiekcie żądania.
Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach na późniejszym etapie procesu lub wysłać nowy obiekt żądania do usługi zewnętrznej przy użyciu zasady ServiceCallout.
Przykład 3
Ten przykład powoduje utworzenie nowego obiektu żądania o nazwie „MyRequestObject”:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
Gdy utworzysz nowy obiekt żądania lub odpowiedzi, inne elementy zasady AssignMessage (np. <Add>
, <Set>
i <Set>
) będą działać na tym nowym obiekcie żądania.
Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach na późniejszym etapie procesu lub wysłać nowy obiekt żądania do usługi zewnętrznej przy użyciu zasady ServiceCallout.
Poniższa tabela opisuje atrybuty <AssignTo>
:
Atrybut | Opis | Wymagana? | Typ |
---|---|---|---|
createNew |
Określa, czy ta zasada ma tworzyć nową wiadomość podczas przypisywania wartości. Jeśli zasada ma wartość „true” (prawda), zasada tworzy nową zmienną typu określonego w zasadzie W przypadku wartości „false” (fałsz) zasada odpowiada na 2 sposoby:
Jeśli zasada
|
Opcjonalnie | Wartość logiczna |
transport |
Określa typ przesyłania żądania lub wiadomości w odpowiedzi. Wartością domyślną jest „http” (jedyna obsługiwana wartość). |
Opcjonalnie | Ciąg znaków |
type |
Określa typ nowej wiadomości, gdy createNew ma wartość „true”. Prawidłowe wartości to „request” lub „response”.
Wartością domyślną jest „request”. Jeśli pominiesz ten atrybut, Edge utworzy żądanie lub odpowiedź w zależności od tego, w którym miejscu w procesie jest wykonywana ta zasada. |
Opcjonalnie | Ciąg znaków |
<AssignVariable>
Przypisuje wartość do docelowej zmiennej przepływu danych (np. zmiennej, której wartość jest ustawiana przez zasadę AssignMessage). Jeśli zmienna przepływu nie istnieje, tworzy ją <AssignVariable>
.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Typ złożony |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne |
<Name> (wymagany)<Ref> <Template> <Value> |
Możesz przypisać jedną z tych wartości do zmiennej przepływu docelowego:
- Ciąg literału: użyj elementu podrzędnego
<Value>
, aby określić literałową wartość ciągu dla docelowej zmiennej przepływu. - Zmienna przepływu: użyj elementu podrzędnego
<Ref>
, aby określić wartość istniejącej zmiennej przepływu dla zmiennej przepływu docelowego. Pełną listę zmiennych przepływu, których można używać jako źródła, znajdziesz w dokumentacji zmiennych przepływu. - Szablon wiadomości: użyj elementu podrzędnego
<Template>
, aby określić szablon wiadomości dla docelowej zmiennej przepływu.
W elemencie <AssignVariable>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Aby określić zmienną źródłową, użyj elementu <Ref>
. Jeśli zmienna, do której odwołuje się obiekt <Ref>
, jest niedostępna, Edge używa wartości określonej przez element <Value>
. Jeśli określisz element <Template>
, będzie on miał pierwszeństwo przed innymi elementami podrzędnymi.
Przykład 1
Ten przykład ustawia wartość nowej zmiennej myvar
na literał „42”:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Przykład 2
W tym przykładzie przypisujemy wartość zmiennej przepływu request.header.user-agent
do zmiennej przepływu docelowego myvar
, a wartość parametru zapytania country
do zmiennej przepływu docelowego 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>
Jeśli któreś z przypisań się nie powiedzie, Edge przypisze do docelowej zmiennej przepływu wartość „ErrorOnCopy”.
Jeśli zmienne przepływu myvar
lub Country
nie istnieją, <AssignVariable>
je tworzy.
Przykład 3
W tym przykładzie użyto elementu podrzędnego <Template>
do połączenia 2 zmiennych kontekstowych między ciągami literałowymi (łącznikiem):
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Częstym zastosowaniem właściwości <AssignVariable>
jest ustawienie wartości domyślnej parametru zapytania, nagłówka lub innej wartości, którą można przekazać w żądaniu. Można to zrobić za pomocą kombinacji elementów podrzędnych <Ref>
i <Value>
. Aby dowiedzieć się więcej, zapoznaj się z przykładami dotyczącymi właściwości <Ref>
.
<Name>
(podrzędny wobec <AssignVariable>
)
Określa nazwę docelowej zmiennej przepływu (np. zmiennej, której wartość jest ustawiana przez zasadę AssignMessage). Jeśli zmienna o nazwie <AssignVariable>
nie istnieje, zasada tworzy zmienną o tej nazwie.
Wartość domyślna | Nie dotyczy |
Wymagany? | Wymagane |
Typ | Ciąg znaków |
Element nadrzędny |
<AssignVariable>
|
Elementy podrzędne | Brak |
W elemencie <Name>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
Przykład 1
Ten przykład określa zmienną docelową jako myvar
i ustawia ją na wartość literałową „42”:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Jeśli myvar
nie istnieje, <AssignVariable>
go tworzy.
<Ref>
(podrzędny wobec <AssignVariable>
)
Określa źródło przypisania jako zmienną przepływu. Zmienna przepływu może być jedną ze wstępnie zdefiniowanych zmiennych przepływu (zgodnie z listą w dokumentacji zmiennych przepływu) lub utworzoną przez siebie niestandardową zmienną przepływu.
Wartość <Ref>
jest zawsze interpretowana jako zmienna przepływu. Jako wartości nie możesz podać literału ciągu. Aby przypisać literałową wartość ciągu znaków, użyj elementu <Value>
.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<AssignVariable>
|
Elementy podrzędne | Brak |
Gdy podajesz zmienną przepływu za pomocą <Ref>
, pomiń nawiasy zamykające „{}”, których zwykle używasz do odwoływania się do zmiennej przepływu. Aby np. ustawić wartość nowej zmiennej na wartość zmiennej przepływu client.host
:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
Aby zdefiniować wartość domyślną zmiennej przepływu docelowego, użyj funkcji <Value>
w połączeniu z parametrem <Ref>
. Jeśli zmienna przepływu określona przez <Ref>
nie istnieje, nie może zostać odczytana lub ma wartość null, Edge przypisuje do docelowej zmiennej przepływu wartość <Value>
.
W elemencie <Ref>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> </AssignVariable> </AssignMessage>
Przykład 1
W tym przykładzie przypisujemy wartość zmiennej przepływu request.header.user-agent
do zmiennej przepływu docelowego myvar
, a wartość parametru zapytania country
do zmiennej Country
:
<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>
W tym przykładzie Edge nie ma wartości domyślnej (ani wartości zastępczej) dla żadnego przypisania.
Przykład 2
W tym przykładzie wartość zmiennej przepływu request.header.user-agent
została przypisana zmiennej przepływu docelowego myvar
, a wartość parametru zapytania country
do zmiennej 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>
Jeśli w tym przykładzie wartości zmiennej przepływu request.header.user-agent
lub parametru zapytania Country
są puste, nieczytelne lub błędnie sformatowane, Edge przypisuje do nowych zmiennych wartość „ErrorOnCopy”.
Przykład 3
Typowym przypadkiem użycia właściwości <AssignVariable>
jest ustawienie wartości domyślnej parametru zapytania, nagłówka lub innej wartości, która może być przekazana w żądaniu. Możesz na przykład utworzyć serwer proxy interfejsuWeather API, w którym żądanie pobiera pojedynczy parametr zapytania o nazwie „w”. Ten parametr zawiera identyfikator miasta, dla którego ma być wyświetlana pogoda. Adres URL żądania ma postać:
http://myCO.com/v1/weather/forecastrss?w=city_ID
Aby określić domyślną wartość parametru „w”, utwórz zasadę AssignMessage taką jak ta:
<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>
W tym przykładzie <AssignVariable>
pobiera wartość request.queryparam.w
i przypisuje ją do siebie. Jeśli zmienna przepływu ma wartość null, co oznacza, że w żądaniu pominięto parametr zapytania „w”, w tym przykładzie używana jest wartość domyślna elementu <Value>
. Dlatego możesz wysłać żądanie do tego serwera proxy interfejsu API z pominięciem parametru zapytania „w”:
http://myCO.com/v1/weather/forecastrss
...ale serwer proxy interfejsu API nadal powinien zwracać prawidłowy wynik.
W przeciwieństwie do <Value>
wartość <Ref>
musi być zmienną przepływu, taką jak właściwość obiektu request
, response
lub target
. Wartość może być także utworzoną przez Ciebie niestandardową zmienną przepływu.
Jeśli podasz zmienną przepływu, która nie istnieje dla wartości <Ref>
, a wartość <IgnoreUnresolvedVariables>
to „true”, Edge zgłosi błąd.
<Template>
(podrzędny wobec <AssignVariable>
)
Określa szablon wiadomości. Szablon wiadomości umożliwia zastępowanie ciągów znaków zmiennych podczas działania zasady. Może też łączyć ciągi liter z nazwami zmiennych ujęte w nawiasy klamrowe. Szablony wiadomości obsługują też funkcje takie jak zmiana znaczenia i konwersja wielkości liter.
Użyj atrybutu ref
, aby określić zmienną przepływu, w której wartością zmiennej jest szablon wiadomości. Możesz na przykład zapisać szablon wiadomości jako atrybut niestandardowy w aplikacji dewelopera. Gdy Edge rozpozna aplikację dewelopera po zweryfikowaniu klucza interfejsu API lub tokena zabezpieczeń (za pomocą dodatkowej zasady), element <AssignVariable>
może użyć szablonu wiadomości z atrybutu niestandardowego aplikacji, który jest dostępny jako zmienna przepływu w zasadzie zabezpieczeń. W przykładzie zakładamy, że szablon wiadomości jest dostępny w atrybucie klienta o nazwie message_template
w aplikacji dewelopera korzystającej z wywołania interfejsu API, gdzie do weryfikacji klucza interfejsu API aplikacji użyto zasadyVerifyAPIKey:
<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<AssignVariable>
|
Elementy podrzędne | Brak |
W elemencie <Template>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Template>message_template</Template> or <Template ref='template_variable'></Template> </AssignVariable> </AssignMessage>
Przykład 1
W tym przykładzie użyto składni tworzenia szablonów wiadomości do połączenia 2 zmiennych kontekstowych między ciągiem literału (łącznika):
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Przykład 2
Poniższy przykład określa zmienną przepływu, w której wartością zmiennej jest wstępnie zdefiniowany szablon wiadomości. Użyj tej opcji, jeśli chcesz wstrzyknąć wstępnie zdefiniowany szablon w środowisku wykonawczym bez konieczności modyfikowania zasady:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
Przykład 3
W przykładzie poniżej określono zmienną przepływu i wartość tekstową. W tym przypadku, jeśli wskazana zmienna nie ma wartości null, ta wartość jest używana jako szablon. Jeśli wskazywana wartość jest null, jako szablon jest używana wartość tekstowa (w tym przypadku {system.uuid}-{messageid}
). Ten wzorzec przydaje się do podawania wartości „zastąpienie”, gdy w niektórych przypadkach chcesz zastąpić domyślny szablon (część tekstową) wartościami ustawianymi dynamicznie. Instrukcja warunkowa może na przykład pobrać wartość z mapy klucz-wartość i ustawić w odniesieniu do niej tę wartość:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value>
(podrzędny wobec <AssignVariable>
)
Definiuje wartość docelowej zmiennej przepływu skonfigurowanej za pomocą <AssignVariable>
. Wartość jest zawsze interpretowana jako ciąg literału. Nie możesz używać zmiennej przepływu jako wartości, nawet jeśli umieszczasz ją w nawiasach kwadratowych („{}”). Aby użyć zmiennej przepływu, użyj zamiast niej <Ref>
.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<AssignVariable>
|
Elementy podrzędne | Brak |
W połączeniu z elementem <Ref>
<Value>
działa jako wartość domyślna (lub zastępcza). Jeśli <Ref>
nie jest określony, nie można go pobrać lub ma wartość null, używana jest wartość <Value>
.
W elemencie <Value>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Przykład 1
W tym przykładzie wartość docelowej zmiennej przepływu (myvar
) ustawia się na wartość literału „42”:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Przykład 2
W tym przykładzie przypisujemy wartość zmiennej przepływu request.header.user-agent
do zmiennej przepływu myvar
, a wartość parametru zapytania country
do zmiennej 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>
Jeśli któreś z przypisanych elementów się nie powiedzie, <AssignVariable>
przypisze do docelowej zmiennej przepływu wartość „ErrorOnCopy”.
<Copy>
Kopiuje wartości z komunikatu określonego w atrybucie source
do wiadomości określonej przez element <AssignTo>
. Jeśli nie określisz celu za pomocą funkcji <AssignTo>
, ta zasada skopiuje wartości do żądania lub odpowiedzi, zależnie od tego, w którym miejscu w procesie jest wykonywana ta zasada.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
W elemencie <Copy>
używana jest taka składnia:
Składnia
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="formparam_name">formparam_value</FormParam>
...
</FormParams>
<!-- Can also be an empty array (<Headers/>) -->
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
<Path>[false|true]</Path>
<Payload>[false|true]</Payload>
<!-- Can also be an empty array (<QueryParams/>) -->
<QueryParams>
<QueryParam name="queryparam_name">queryparam_value</QueryParam>
...
</QueryParams>
<ReasonPhrase>[false|true]</ReasonPhrase>
<StatusCode>[false|true]</StatusCode>
<Verb>[false|true]</Verb>
<Version>[false|true]</Version>
</Copy>
<!-- Used as the destination for the <Copy>
values -->
<AssignTo createNew="[true|false]" transport="http"
type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
Przykład 1
Poniższy przykład kopiuje nagłówek, 3 parametry formularza, ścieżkę i wszystkie parametry zapytania z żądania do nowego żądania niestandardowego:
<AssignMessage continueOnError="false" enabled="true" name="copy-1"> <Copy source="request"> <Headers> <Header name="Header_Name_1">Header value 1</Header> </Headers> <FormParams> <FormParam name="Form_Param_Name_1">Form param value 1</FormParam> <FormParam name="Form_Param_Name_2">Form param value 1</FormParam> <FormParam name="Form_Param_Name_3">Form param value 1</FormParam> </FormParams> <Payload>false</Payload> <Path>true</Path> <QueryParams/> <ReasonPhrase>false</ReasonPhrase> <StatusCode>false</StatusCode> <Verb>false</Verb> <Version>false</Version> </Copy> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Element <Copy>
ma te atrybuty:
Atrybut | Opis | Wymagana? | Typ |
---|---|---|---|
source |
Określa obiekt źródłowy kopii.
|
Opcjonalnie | Ciąg znaków |
<FormParams>
(podrzędny wobec <Copy>
)
Kopiuje parametry formularza z żądania określonego przez atrybut source
elementu <Copy>
do żądania określonego przez element <AssignTo>
. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <FormParam> lub pusta tablica |
Element nadrzędny |
<Copy>
|
Elementy podrzędne |
<FormParam> |
W elemencie <FormParams>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Copy> </AssignMessage>
Przykład 1
W tym przykładzie kopiuje się pojedynczy parametr formularza z żądania do żądania niestandardowego „MyCustomRequest”:
<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>
Przykład 2
Ten przykład kopiuje wszystkie parametry formularza do żądania niestandardowego „MyCustomRequest”:
<AssignMessage name="copy-formparams-2"> <Copy source="request"> <FormParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Przykład 3
W tym przykładzie kopiujemy 3 parametry formularza do żądania niestandardowego „MyCustomRequest”:
<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>
Przykład 4
Jeśli jest wiele parametrów formularza o tej samej nazwie, użyj tej składni:
<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>
W tym przykładzie skopiujemy „f1”, „f2” i drugą wartość „f3”. Jeśli „f3” ma tylko jedną wartość, nie jest kopiowana.
Z <FormParams>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Czasownik HTTP: POST
- Typ wiadomości: odpowiedź
- Jeden z tych warunków (lub oba):
- Dane formularza: ustaw jakąś wartość lub „” (pusty ciąg znaków). Na przykład polecenie
curl
dodaj do żądania element-d ""
. - Nagłówek
Content-Length
: ustaw na 0 (jeśli w pierwotnym żądaniu nie ma danych; w przeciwnym razie ustaw obecną długość). Na przykład poleceniecurl
dodaj do żądania element-H "Content-Length: 0"
.
- Dane formularza: ustaw jakąś wartość lub „” (pusty ciąg znaków). Na przykład polecenie
Podczas kopiowania <FormParams>
<Copy>
ustawia atrybut Content-Type
wiadomości na „application/x-www-form-urlencoded” przed wysłaniem wiadomości do usługi docelowej.
<Headers>
(podrzędny wobec <Copy>
)
Kopiuje nagłówki HTTP z wiadomości żądania lub odpowiedzi określonej przez atrybut source
elementu <Copy>
do żądania lub wiadomości odpowiedzi określonej przez element <AssignTo>
.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <Header> lub pusta tablica |
Element nadrzędny |
<Copy>
|
Elementy podrzędne |
<Header> |
W elemencie <Headers>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Copy> </AssignMessage>
Przykład 1
Poniższy przykład kopiuje nagłówek user-agent
z żądania do nowego niestandardowego obiektu żądania:
<AssignMessage name="copy-headers-1"> <Copy source="request"> <Headers> <Header name="user-agent"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Przykład 2
Aby skopiować wszystkie nagłówki, użyj pustego elementu <Headers>
, jak pokazano w tym przykładzie:
<AssignMessage name="copy-headers-2"> <Copy source="request"> <Headers/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Przykład 3
Jeśli kilka nagłówków ma taką samą nazwę, użyj tej składni:
<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>
W tym przykładzie skopiujemy „h1”, „h2” oraz drugą wartość „h3”. Jeśli parametr „h3” ma tylko 1 wartość, nie jest kopiowana.
<Path>
(podrzędny wobec <Copy>
)
Określa, czy ścieżka powinna zostać skopiowana z żądania źródłowego do żądania docelowego. Ten element nie ma wpływu na odpowiedź.
Jeśli zasada ma wartość „true” (prawda), ta zasada kopiuje ścieżkę z wiadomości żądania określonej przez atrybut source
elementu <Copy>
do komunikatu żądania określonego przez element <AssignTo>
.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Copy>
|
Elementy podrzędne | Brak |
W elemencie <Path>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Path>[false|true]</Path> </Copy> </AssignMessage>
Przykład 1
Poniższy przykład wskazuje, że zasada AssignMessage powinna skopiować ścieżkę z żądania źródłowego do nowego niestandardowego obiektu żądania:
<AssignMessage name="copy-path-1"> <Copy source="request"> <Path>true</Path> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Z <Path>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: prośba
<Payload>
(podrzędny wobec <Copy>
)
Określa, czy ładunek powinien zostać skopiowany ze źródła do miejsca docelowego. Źródło i miejsce docelowe mogą być żądaniami lub odpowiedziami.
Jeśli zasada ma wartość „true” (prawda), ta zasada kopiuje ładunek z wiadomości określonej przez atrybut source
elementu <Copy>
do wiadomości określonej przez element <AssignTo>
.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Copy>
|
Elementy podrzędne | Brak |
W elemencie <Payload>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
Przykład 1
Ten przykład ustawia dla <Payload>
wartość „true”, tak aby ładunek żądania został skopiowany z żądania do odpowiedzi:
<AssignMessage name="copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
<QueryParams>
(podrzędny wobec <Copy>
)
Kopiuje parametry ciągu zapytania z żądania określonego przez atrybut source
elementu <Copy>
do żądania określonego przez element <AssignTo>
. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <QueryParam> lub pusta tablica |
Element nadrzędny |
<QueryParam>
|
Elementy podrzędne | Brak |
W elemencie <QueryParams>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Copy> </AssignMessage>
Przykład 1
Poniższy przykład kopiuje parametr zapytania „my_param” z żądania do nowego, niestandardowego obiektu żądania:
<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>
Przykład 2
Poniższy przykład kopiuje wszystkie parametry zapytania z żądania do nowego niestandardowego obiektu żądania:
<AssignMessage name="copy-queryparams-2"> <Copy source="request"> <QueryParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Przykład 3
Jeśli jest wiele parametrów zapytania o tej samej nazwie, użyj tej składni:
<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>
W tym przykładzie skopiujemy wartości „qp1”, „qp2” i drugą wartość „qp3”. Jeśli parametr „qp3” ma tylko 1 wartość, nie jest kopiowana.
Z <QueryParams>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Czasownik HTTP: GET
- Typ wiadomości: prośba
<ReasonPhrase>
(podrzędny wobec <Copy>
)
Określa, czy wyrażenie dotyczące powodu powinno zostać skopiowane z odpowiedzi źródłowej do docelowej. Ten element nie ma wpływu na żądanie.
Jeśli zasada ma wartość „true” (prawda), ta zasada kopiuje ReasonPhrase
z odpowiedzi określonej przez atrybut source
elementu <Copy>
do odpowiedzi określonej przez element <AssignTo>
.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Copy>
|
Elementy podrzędne | Brak |
W elemencie <ReasonPhrase>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <ReasonPhrase>[false|true]</ReasonPhrase> </Copy> </AssignMessage>
Przykład 1
Ten przykład ustawia <ReasonPhrase>
na „true”, co powoduje, że <Copy>
kopiuje wyrażenie przyczyny z odpowiedzi domyślnej do niestandardowego obiektu odpowiedzi:
<AssignMessage name="copy-reasonphrase-1"> <Copy source="response"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Z <ReasonPhrase>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: odpowiedź
<StatusCode>
(podrzędny wobec <Copy>
)
Określa, czy kod stanu jest kopiowany z odpowiedzi źródłowej do docelowej. Ten element nie ma wpływu na żądanie.
Jeśli zasada ma wartość „true” (prawda), ta zasada kopiuje kod stanu z komunikatu odpowiedzi określonego przez atrybut source
elementu <Copy>
do komunikatu z odpowiedzią w elemencie <AssignTo>
.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Copy>
|
Elementy podrzędne | Brak |
W elemencie <StatusCode>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
Przykład 1
Poniższy przykład ustawia dla <StatusCode>
wartość „true”, co powoduje skopiowanie kodu stanu z domyślnego obiektu odpowiedzi do nowego, niestandardowego obiektu odpowiedzi:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Z <StatusCode>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: odpowiedź
Typowym zastosowaniem <StatusCode>
jest zapewnienie, że odpowiedź serwera proxy ma taki sam stan jak odpowiedź otrzymana z celu, gdy atrybut createNew
w <AssignTo>
ma wartość „true” (prawda).
<Verb>
(podrzędny wobec <Copy>
)
Określa, czy czasownik HTTP jest kopiowany z żądania źródłowego do docelowego. Ten element nie ma wpływu na odpowiedź.
Jeśli ma wartość „true” (prawda), kopiuje czasownik znaleziony w atrybucie source
elementu <Copy>
do żądania określonego w elemencie <AssignTo>
.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Copy>
|
Elementy podrzędne | Brak |
W elemencie <Verb>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
Przykład 1
Ten przykład ustawia <Verb>
na „true”, co kopiuje czasownik z żądania domyślnego do nowego żądania niestandardowego:
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Z <Verb>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: prośba
<Version>
(podrzędny wobec <Copy>
)
Określa, czy wersja HTTP jest kopiowana z żądania źródłowego do docelowego. Ten element nie ma wpływu na odpowiedź.
Jeśli ma wartość „true” (prawda), kopiuje wersję HTTP z atrybutu source
elementu <Copy>
do obiektu określonego przez element <AssignTo>
.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Copy>
|
Elementy podrzędne | Brak |
W elemencie <Version>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Version>[false|true]</Version> </Copy> </AssignMessage>
Przykład 1
Ten przykład ustawia w żądaniu <Version>
wartość „true”, co kopiuje wersję z domyślnego obiektu żądania do nowego, niestandardowego obiektu żądania:
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Z <Version>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: prośba
<DisplayName>
Użyj oprócz atrybutu name
, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną, bardziej naturalnie brzmiącą nazwą.
Element <DisplayName>
jest wspólny dla wszystkich zasad.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie. Jeśli pominiesz właściwość <DisplayName> , używana jest wartość atrybutu name zasady |
Typ | Ciąg znaków |
Element nadrzędny | <PolicyElement> |
Elementy podrzędne | Brak |
W elemencie <DisplayName>
używana jest taka składnia:
Składnia
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Przykład
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Element <DisplayName>
nie ma atrybutów ani elementów podrzędnych.
<IgnoreUnresolvedVariables>
Określa, czy przetwarzanie zatrzymuje się w przypadku wystąpienia nierozstrzygniętej zmiennej.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne | Brak |
Ustaw jako true
, aby ignorować nierozstrzygnięte zmienne i kontynuować przetwarzanie. W przeciwnym razie false
. Wartością domyślną jest false
.
Ustawienie <IgnoreUnresolvedVariables>
na true
różni się od ustawienia właściwości continueOnError
elementu <AssignMessage>
na true
tym, że dotyczy ono ustawień i pobierania wartości zmiennych. Jeśli ustawisz continueOnError
na true
, Edge ignoruje wszystkie błędy, a nie tylko błędy napotkane podczas korzystania ze zmiennych.
W elemencie <IgnoreUnresolvedVariables>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
Przykład 1
Ten przykład ustawia dla parametru <IgnoreUnresolvedVariables>
wartość „true”:
<AssignMessage name="ignoreunresolvedvariables"> <Copy source="response"> ... <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </Copy> </AssignMessage>
<Remove>
Usuwa z wiadomości nagłówki, parametry zapytania, parametry formularza lub ładunek wiadomości. Wiadomość może zawierać prośbę lub odpowiedź. Za pomocą elementu <AssignTo>
możesz określić, na który komunikat <Remove>
ma reagować.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Typ złożony |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne |
<FormParams> <Headers> <Payload> <QueryParams> |
Częstym przypadkiem użycia właściwości <Remove>
jest usuwanie parametru zapytania zawierającego informacje poufne z obiektu przychodzącego żądania, aby uniknąć przekazania go do serwera backendu.
W elemencie <Remove>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Przykład 1
Ten przykład usuwa treść wiadomości z odpowiedzi:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
W trakcie procesu odpowiedzi ta zasada usuwa treść odpowiedzi, zwracając klientowi tylko nagłówki HTTP.
Przykład 2
Ten przykład usuwa wszystkie parametry formularza i parametr zapytania z przychodzącego żądania:
<AssignMessage continueOnError="false" enabled="true" name="remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<FormParams>
(podrzędny wobec <Remove>
)
Usuwa określone parametry formularza z żądania. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <FormParam> lub pusta tablica |
Element nadrzędny |
<Remove>
|
Elementy podrzędne |
<FormParam> |
W elemencie <FormParams>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Remove> </AssignMessage>
Przykład 1
Poniższy przykład usuwa z żądania 3 parametry formularza:
<AssignMessage name="remove-formparams-1"> <Remove> <FormParams> <FormParam name="form_param_1"/> <FormParam name="form_param_2"/> <FormParam name="form_param_3"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Przykład 2
Poniższy przykład usuwa z żądania wszystkie parametry formularza:
<AssignMessage name="remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Przykład 3
Jeśli jest wiele parametrów formularza o tej samej nazwie, użyj tej składni:
<AssignMessage name="remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Ten przykład usuwa „f1”, „f2” i drugą wartość „f3”. Jeśli „f3” ma tylko 1 wartość, nie jest usuwana.
Z <FormParams>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: prośba
Content-Type
: "application/x-www-form-urlencoded"
<Headers>
(podrzędny wobec <Remove>
)
Usuwa z żądania lub odpowiedzi określone nagłówki HTTP określone przez element <AssignTo>
.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <Header> lub pusta tablica |
Element nadrzędny |
<Remove>
|
Elementy podrzędne |
<Header> |
W elemencie <Headers>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Remove> </AssignMessage>
Przykład 1
Ten przykład usuwa z żądania nagłówek user-agent
:
<AssignMessage name="remove-headers-1"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Przykład 2
Ten przykład usuwa wszystkie nagłówki z żądania:
<AssignMessage name="remove-headers-2"> <Remove> <Headers/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Przykład 3
Jeśli kilka nagłówków ma taką samą nazwę, użyj tej składni:
<AssignMessage name="remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
W tym przykładzie usunięto z żądania „h1”, „h2” oraz drugą wartość „h3”. Jeśli „h3” ma tylko 1 wartość, nie jest usuwana.
<Payload>
(podrzędny wobec <Remove>
)
Określa, czy <Remove>
usuwa ładunek w żądaniu lub w odpowiedzi, co jest określone przez element <AssignTo>
. Ustaw na „true”, aby wyczyścić ładunek. W przeciwnym razie ustaw „false” (fałsz). Wartość domyślna to „false” (fałsz).
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Remove>
|
Elementy podrzędne | Brak |
W elemencie <Payload>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
Przykład 1
Ten przykład ustawia dla <Payload>
wartość „true”, tak aby ładunek żądania został wyczyszczony:
<AssignMessage name="remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(podrzędny wobec <Remove>
)
Usuwa z żądania określone parametry zapytania. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <QueryParam> lub pusta tablica |
Element nadrzędny |
<Remove>
|
Elementy podrzędne |
<QueryParam> |
W elemencie <QueryParams>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Przykład 1
Ten przykład usuwa z żądania pojedynczy parametr zapytania:
<AssignMessage name="remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Przykład 2
Poniższy przykład usuwa z żądania wszystkie parametry zapytania:
<AssignMessage name="remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Przykład 3
Jeśli jest wiele parametrów zapytania o tej samej nazwie, użyj tej składni:
<AssignMessage name="remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ten przykład usuwa z żądania „qp1”, „qp2” i drugą wartość „qp3”. Jeśli parametr „qp3” ma tylko 1 wartość, nie jest usuwana.
Przykład 4
Ten przykład usuwa z żądania parametr zapytania apikey
:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Z <QueryParams>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Czasownik HTTP: GET
- Typ wiadomości: prośba
<Set>
Ustawia informacje w żądaniu lub odpowiedzi. Określone przez element <AssignTo>
. <Set>
zastępuje nagłówki lub parametry, które już istnieją w oryginalnej wiadomości. Aby utworzyć nowy nagłówek lub parametr, użyj elementu <Add>
.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Typ złożony |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
W elemencie <Set>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Przykład 1
Oto przykład elementu <Set>
:
<AssignMessage continueOnError="false" enabled="true" name="set-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> <QueryParams> <QueryParam name="name">{request.header.name}</QueryParam> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> <!-- <Verb>GET</Verb> --> <Payload contentType="text/plain">42</Payload> <Path/> <ReasonPhrase>Bad request</ReasonPhrase> <StatusCode>400</StatusCode> <Verb>POST</Verb> <Verb>{my_variable}</Verb> <Version>1.1</Version> </Set> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
<FormParams>
(podrzędny wobec <Set>
)
Zastępuje istniejące parametry formularza w żądaniu i zastępuje je nowymi wartościami określonymi przez Ciebie w tym elemencie. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <FormParam> |
Element nadrzędny |
<Set>
|
Elementy podrzędne |
<FormParam> |
W elemencie <FormParams>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Set> </AssignMessage>
Przykład 1
Ten przykład ustawia parametr formularza o nazwie „myparam” na wartość zmiennej request.header.myparam
w nowym, niestandardowym żądaniu:
<AssignMessage name="set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Z <FormParams>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Czasownik HTTP: POST
- Typ wiadomości: prośba
Jeśli zdefiniujesz w swojej zasadzie puste parametry formularza (<Add><FormParams/></Add>
), nie będzie ona dodawać żadnych parametrów formularza. Działa to tak samo jak pomijanie elementu <FormParams>
.
<Set>
zmienia wartość Content-Type
w wiadomości na „application/x-www-form-urlencoded” przed wysłaniem jej do docelowego punktu końcowego.
<Headers>
(podrzędny wobec <Set>
)
Zastępuje istniejące nagłówki HTTP w żądaniu lub odpowiedzi, które są określone przez element <AssignTo>
.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <Header> |
Element nadrzędny |
<Set>
|
Elementy podrzędne |
<Header> |
W elemencie <Headers>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Set> </AssignMessage>
Przykład 1
Ten przykład ustawia nagłówek user-agent
na wartość zmiennej request.header.user-agent
:
<AssignMessage name="set-headers-1"> <Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Jeśli zdefiniujesz puste nagłówki w zasadzie (<Add><Headers/></Add>
), nie będzie ona dodawać żadnych nagłówków. Przypomina to pominięcie elementu <Headers>
.
<Path>
(podrzędny wobec <Set>
)
<Payload>
(podrzędny wobec <Set>
)
Definiuje treść wiadomości żądania lub odpowiedzi określaną przez element <AssignTo>
. Ładunek może być dowolnym prawidłowym typem treści, np. zwykłym tekstem, JSON lub XML.
Wartość domyślna | pusty ciąg |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<Set>
|
Elementy podrzędne | Brak |
W elemencie <Payload>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> </Set> </AssignMessage>
Przykład 1
Ten przykład ustawia ładunek w postaci zwykłego tekstu:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
Przykład 2
Ten przykład ustawia ładunek JSON:
<AssignMessage name="set-payload-2"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set> </AssignMessage>
Przykład 3
W tym przykładzie wstawiasz do ładunku wartości zmiennych, umieszczając ich nazwy w nawiasach klamrowych:
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
W starszych wersjach Apigee Edge, na przykład przed wersją 16.08.17 Cloud, nie można używać nawiasów klamrowych do oznaczania odwołań do zmiennych w ładunkach JSON. W tych wersjach trzeba było używać atrybutów variablePrefix
i variableSuffix
, aby określać znaki separatora i opakować je do nazw zmiennych w ten sposób:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
Ta starsza składnia nadal działa.
Przykład 4
Treść strony <Payload>
jest traktowana jako szablon wiadomości. Oznacza to, że zasada AssignMessage zastępuje zmienne w nawiasach klamrowych wartością zmiennych, do których odwołuje się użytkownik w czasie działania.
W tym przykładzie użyto składni nawiasów klamrowych, aby ustawić jako część ładunku wartość zmienną:
<AssignMessage name="set-payload-4"> <Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </root> </Payload> </Set> </AssignMessage>
Poniższa tabela opisuje atrybuty <Payload>
:
Atrybut | Opis | Obecność | Typ |
---|---|---|---|
contentType |
Jeśli określono wartość |
Opcjonalnie | Ciąg znaków |
variablePrefix |
Opcjonalnie określa początkowy separator w zmiennej przepływu. Domyślna wartość to „{”. Więcej informacji znajdziesz w dokumentacji zmiennych przepływu. | Opcjonalnie | Charakterystyczna |
variableSuffix |
Opcjonalnie określa separator końcowy w zmiennej przepływu. Wartość domyślna to „"}”. Więcej informacji znajdziesz w dokumentacji zmiennych przepływu. | Opcjonalnie | Charakterystyczna |
<QueryParams>
(podrzędny wobec <Set>
)
Zastępuje istniejące parametry zapytania w żądaniu nowymi wartościami. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica elementów <QueryParam> |
Element nadrzędny |
<Set>
|
Elementy podrzędne |
<QueryParam> |
W elemencie <QueryParams>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Set> </AssignMessage>
Przykład 1
W tym przykładzie parametr zapytania „address” ustawia się na wartość zmiennej request.header.address
:
<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
Z <QueryParams>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Czasownik HTTP: GET
- Typ wiadomości: prośba
Jeśli zdefiniujesz w swojej zasadzie puste parametry zapytania (<Set><QueryParams/></Set>
), zasada nie ustawi żadnych parametrów zapytania. Działa to tak samo jak pomijanie elementu <QueryParams>
.
<ReasonPhrase>
(podrzędny wobec <Set>
)
Określa powód w odpowiedzi. Zwykle jest to potrzebne do debugowania w połączeniu z komponentem <StatusCode>
. Ten element nie ma wpływu na żądanie.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<Set>
|
Elementy podrzędne | Brak |
W elemencie <ReasonPhrase>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
Przykład 1
Poniższy przykład zawiera proste wyrażenie przyczyny:
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Przykład 2
Treść strony <ReasonPhrase>
jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe jest zastępowana w czasie działania wartością zmiennej, jak pokazano w poniższym przykładzie:
<AssignMessage name="set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Z <ReasonPhrase>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: odpowiedź
<StatusCode>
(podrzędny wobec <Set>
)
Ustawia kod stanu w odpowiedzi. Ten element nie ma wpływu na żądanie.
Wartość domyślna | „200” (gdy atrybut createNew obiektu <AssignTo> ma wartość „true”) |
Wymagany? | Opcjonalnie |
Typ | Ciąg tekstowy lub variable |
Element nadrzędny |
<Set>
|
Elementy podrzędne | Brak |
W elemencie <StatusCode>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
Przykład 1
Poniższy przykład ustawia prosty kod stanu:
<AssignMessage name="set-statuscode-1"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Przykład 2
Treść strony <StatusCode>
jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe jest zastępowana w czasie działania wartością zmiennej, jak pokazano w tym przykładzie:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Z <StatusCode>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: odpowiedź
<Verb>
(podrzędny wobec <Set>
)
Ustawia czasownik HTTP w żądaniu. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg tekstowy lub variable |
Element nadrzędny |
<Set>
|
Elementy podrzędne | Brak |
W elemencie <Verb>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
Przykład 1
Ten przykład ustawia prosty czasownik w żądaniu:
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Przykład 2
Treść strony <Verb>
jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe jest zastępowana w czasie działania wartością zmiennej.
W tym przykładzie do wypełniania czasownika użyto zmiennej:
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Z <Verb>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: prośba
<Version>
(podrzędny wobec <Set>
)
Ustawia wersję HTTP w żądaniu. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | Nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg tekstowy lub variable |
Element nadrzędny |
<Set>
|
Elementy podrzędne | Brak |
W elemencie <Version>
używana jest taka składnia:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Przykład 1
Ten przykład powoduje ustawienie numeru wersji na „1.1”:
<AssignMessage name="set-version-1"> <Set> <Version>1.1</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Przykład 2
W tym przykładzie użyto zmiennej w nawiasach klamrowych do ustawienia numeru wersji:
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Treść strony <Version>
jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe jest zastępowana w czasie działania wartością zmiennej.
Z <Version>
możesz korzystać tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: prośba
Tworzenie niestandardowych wiadomości z prośbami
Za pomocą zasady AssignMessage możesz utworzyć niestandardową wiadomość żądania. Po utworzeniu żądania niestandardowego możesz go używać na te sposoby:
- Dostęp do zmiennych w innych zasadach
- Przekazywanie go do usługi zewnętrznej
Aby utworzyć niestandardową wiadomość żądania, użyj elementu <AssignTo>
w zasadzie AssignMessage. Ustaw createNew
na „true” (prawda) i określ nazwę nowej wiadomości w treści elementu, jak pokazano w poniższym przykładzie:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Domyślnie Edge nie używa niestandardowego komunikatu żądania. Po utworzeniu Edge kontynuuje proces zgodnie z oryginalnym żądaniem. Aby użyć żądania niestandardowego, dodaj do serwera proxy zasadę taką jak zasada ServiceCallout, która może przekazywać to żądanie do usługi zewnętrznej.
Te przykłady tworzenia niestandardowych komunikatów z żądaniami:
Przykład 1
Poniższy przykład pokazuje utworzenie niestandardowego obiektu żądania z przypisaniem wiadomości:
<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>
W tym przykładzie:
- Tworzy nowy obiekt wiadomości żądania o nazwie „MyCustomRequest”.
- W przypadku MyCustomRequest ta zasada:
- Kopiuje wartość nagłówka HTTP
user-agent
z przychodzącego żądania do nowej wiadomości. Funkcja<Copy>
używa bezwzględnego odwołania do zmiennej przepływuuser-agent
, więc nie musisz określać atrybutusource
na potrzeby elementu<Copy>
. - Ustawia parametr zapytania
address
w wiadomości niestandardowej na wartość parametru zapytaniaaddy
przychodzącego żądania. - Ustawia czasownik HTTP na
GET
.
- Kopiuje wartość nagłówka HTTP
- Ustawia wartość
<IgnoreUnresolvedVariables>
na „false” (fałsz). Gdy<IgnoreUnresolvedVariables>
ma wartość „false” (fałsz), a jedna ze zmiennych, którą próbuje dodać, nie istnieje, Edge zatrzyma przetwarzanie w przepływie interfejsu API.
Przykład 2
Oto kolejny przykład pokazujący, jak utworzyć niestandardowy obiekt żądania za pomocą funkcji Przypisanie wiadomości:
<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>
W tym przykładzie tworzymy nowe żądanie niestandardowe o nazwie „partner.request”. Następnie ustawia <Verb>
i <Payload>
w nowym żądaniu.
Niestandardowy komunikat żądania możesz uzyskać w innej zasadzie AssignMessage, która pojawia się na późniejszym etapie procesu. Ten przykład pobiera wartość nagłówka user-agent
wiadomości niestandardowego żądania:
<AssignMessage name="custom-request-1-access"> <DisplayName>custom-request-1-access</DisplayName> <AssignTo createNew="false" type="request"></AssignTo> <Set> <Headers> <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header> </Headers> </Set> </AssignMessage>
Filmy
Obejrzyj te filmy, aby dowiedzieć się więcej o zasadzie AssignMessage.
Wideo | Opis |
---|---|
Dlaczego warto przypisać zasady dotyczące wiadomości? | Poznaj korzyści ze stosowania zasady AssignMessage do modyfikowania żądań lub odpowiedzi interfejsu API bez modyfikowania kodu backendu. |
Kopiowanie elementów interfejsu API za pomocą zasady AssignMessage | Skopiuj elementy z żądania lub odpowiedzi interfejsu API i utwórz nowy obiekt żądania lub odpowiedzi za pomocą zasady AssignMessage. |
Usuwanie elementów interfejsu API za pomocą zasady AssignMessage | Usuń elementy interfejsu API i zmodyfikuj interfejs API, zanim dotrze do docelowego backendu, za pomocą zasady AssignMessage. |
Dodaj i ustaw elementy interfejsu API za pomocą zasady AssignMessage | Zmień żądanie lub odpowiedź interfejsu API, dodając parametry zapytania, nagłówki, parametry formularza lub ładunki za pomocą zasady AssignMessage. |
Utwórz zmienne niestandardowe za pomocą zasady AssignMessage | Ustaw niestandardowe zmienne przepływu za pomocą zasady AssignMessage i wykorzystaj zmienne w innych zasadach przez serwer proxy interfejsu API. |
Utwórz nowe obiekty żądań lub odpowiedzi za pomocą zasady AssignMessage | Utwórz nowe obiekty żądań lub odpowiedzi interfejsu API z użyciem zasady AssignMessage w środowisku wykonawczym interfejsu API. |
Utworzenie zastępczego interfejsu API za pomocą zasady AssignMessage | Utwórz prosty interfejs API typu REST, dodając zasadę AssignMessage do przepływu odpowiedzi. |
Ustawianie lub modyfikowanie ładunku za pomocą zasady AssignMessage | Przekonwertuj żądanie REST na żądanie SOAP przez ustawienie ładunku SOAP za pomocą zasady AssignMessage w środowisku wykonawczym interfejsu API. |
Kody błędów
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
Kod błędu | Stan HTTP | Przyczyna | Napraw |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | Zasadom nie udało się ustawić zmiennej. W ciągu znaków błędu znajdziesz nazwę nierozstrzygniętej zmiennej. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
Ten błąd występuje, jeśli atrybut Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Edge |
build |
steps.assignmessage.UnresolvedVariable |
500 |
Ten błąd występuje, jeśli zmienna określona w zasadzie przypisywania wiadomości ma postać:
|
build |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.
Nazwa błędu | Przyczyna | Napraw |
---|---|---|
InvalidIndex |
Jeśli indeks określony w elementach <Copy> lub <Remove> w zasadzie przypisywania wiadomości wynosi 0 lub jest liczbą ujemną, wdrożenie serwera proxy interfejsu API się nie uda.
|
build |
InvalidVariableName |
Jeśli element podrzędny <Name> jest pusty lub nie został określony w elemencie <AssignVariable> , wdrożenie serwera proxy interfejsu API nie powiedzie się, ponieważ nie ma prawidłowej nazwy zmiennej, do której można przypisać wartość. Wymagana jest prawidłowa nazwa zmiennej.
|
build |
InvalidPayload |
Ładunek określony w zasadzie jest nieprawidłowy. |
Zmienne błędów
Te zmienne są ustawiane, gdy zasada wywołuje błąd w czasie działania. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | assignmessage.AM-SetResponse.failed = true |
Przykładowa odpowiedź na błąd
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
Przykładowa reguła błędu
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
Schematy
Każdy typ zasady jest definiowany przez schemat XML (.xsd
). Schematy zasad są dostępne na GitHubie.
Powiązane artykuły
Przykładowe działanie zasady AssignMessage jest dostępne w przykładach na platformie API.
Bardziej zaawansowany przykład zastępowania target.url
w ProxyEndpoint znajdziesz w tym artykule społeczności Apigee.
Aby zobaczyć, jak działa „ustawiona ścieżka” w zasadzie ServiceCallout, zapoznaj się z tym przykładem dotyczącym wykonywania czynności w przykładach dotyczących Apigee na GitHubie. Wystarczy skopiować repozytorium i wykonać instrukcje podane w tym temacie. W tym przykładzie użyto zasady AssignMessage do ustawienia ścieżki żądania, a potem używamy zasady Objaśnienie usługi, by wysłać żądanie do usługi zewnętrznej.