Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Co
Zasady przypisywania wiadomości zmieniają lub tworzą nowe wiadomości z żądaniem i odpowiedzią podczas przepływu proxy API. Zasady te umożliwiają wykonywanie tych czynności związanych z wiadomościami:
- Dodaj nowe parametry formularza, nagłówki lub parametry zapytania do wiadomości.
- Kopiowanie istniejących właściwości z jednej wiadomości do drugiej
- Usuń nagłówki, parametry zapytania, parametry formularza lub ładunki wiadomości.
- Ustaw wartość istniejących właściwości w wiadomości.
Za pomocą zasady przypisywania wiadomości zwykle dodajesz, zmieniasz lub usuwasz właściwości żądania lub odpowiedzi. Możesz też użyć zasady przypisywania wiadomości, aby utworzyć niestandardową wiadomość z prośbą lub odpowiedzią i przekazać ją do alternatywnego celu, zgodnie z opisem w artykule Tworzenie niestandardowych wiadomości z prośbą.
Zasada przypisywania wiadomości może tworzyć lub zmieniać zmienne przepływu za pomocą tych elementów podrzędnych:
Element <AssignMessage>
Określa zasadę przypisywania wiadomości.
Wartość domyślna | Zobacz kartę Domyślne zasady poniżej. |
Wymagany? | Wymagane |
Typ | Obiekt złożony |
Element nadrzędny | nie dotyczy |
Elementy podrzędne |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
Element <AssignMessage>
używa tej składni:
Składnia
Element <AssignMessage>
używa tej składni:
<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ślne zasady
Ten przykład pokazuje ustawienia domyślne, gdy dodasz do przepływu w interfejsie Edge zasadę przypisywania wiadomości:
<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 w interfejsie Edge wstawiasz nową zasadę przypisywania wiadomości, szablon zawiera zaczepy dla wszystkich możliwych operacji. Zazwyczaj wybierasz operacje, które chcesz wykonać za pomocą tej zasady, i usuwasz pozostałe elementy podrzędne. Jeśli na przykład chcesz wykonać operację kopiowania, użyj elementu <Copy>
i usuń z polityki elementy <Add>
, <Remove>
i inne elementy podrzędne, aby ułatwić jej czytanie.
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 tabeli poniżej znajdziesz ogólny opis elementów podrzędnych <AssignMessage>
:
Element podrzędny | Wymagany? | 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 dotychczasowych właściwości w żądaniu lub odpowiedzi, które są określone przez element <AssignTo> .
|
Inne elementy podrzędne | ||
<AssignTo> |
Opcjonalnie | Określa, w przypadku której wiadomości ma działać zasada przypisywania wiadomości. Może to być standardowa prośba lub odpowiedź, ale też nowa wiadomość niestandardowa. |
<AssignVariable> |
Opcjonalnie | Przypisuje wartość zmiennej przepływu. Jeśli zmienna nie istnieje, <AssignVariable> ją tworzy. |
<IgnoreUnresolvedVariables> |
Opcjonalnie | Określa, czy przetwarzanie ma się zatrzymać, gdy zostanie napotkana niezdefiniowana zmienna. |
Każdy z tych elementów podrzędnych jest opisany w następnych sekcjach.
Przykłady
Przykłady poniżej pokazują, jak można stosować zasadę przypisywania wiadomości:
1. Dodaj nagłówek
W tym przykładzie nagłówek jest dodawany do żądania za pomocą elementu <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
W tym przykładzie element <Remove>
służy do usunięcia ładunku 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>
3. Zmień odpowiedź
W tym przykładzie modyfikujemy 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 tworzy się nowa wiadomość. Zamiast tego modyfikuje istniejący komunikat odpowiedzi przez dodanie nagłówka HTTP.
Ponieważ w tym przykładzie pominięto nazwę zmiennej w elemencie <AssignTo>
i podano wartość type
jako „response”, ta zasada modyfikuje obiekt odpowiedzi zwracany przez serwer docelowy.
Nagłówek HTTP dodany do wiadomości odpowiedzi przez tę zasadę pochodzi z zmiennej wypełnianej przez zasadę LookupCache. Dlatego wiadomość odpowiedzi zmodyfikowana przez tę zasadę przypisywania wiadomości zawiera nagłówek HTTP, który wskazuje, 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. Skonfiguruj zawartość dynamiczną
Za pomocą funkcji Przypisz wiadomość możesz umieszczać dynamiczne treści w ładunku wiadomości z odpowiedziami i zapytaniami.
Aby umieścić zmienne przepływu Edge w pliku XML, ułóż je w nawiasach klamrowych, np. {prefix.name}
.
W tym przykładzie wartość zmiennej przepływu nagłówka HTTP user-agent
jest umieszczana 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
z znakami rozdzielającymi, jak pokazano 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 w chmurze możesz też używać nawiasów klamrowych do wstawiania zmiennych.
5. Usuń parametr zapytania
Z żądania można usunąć parametr zapytania apikey
, jak w tym przykładzie:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Jeśli do uwierzytelniania użytkowników używasz polityki weryfikacji klucza API, zalecamy usunięcie parametru zapytania apikey
z wiadomości żądania. Dzięki temu zapobiegniesz przekazywaniu poufnych informacji kluczowych do celu w backendzie.
6. Ustawianie i pobieranie zmiennych
W tym przykładzie używamy 3 zasad przypisywania wiadomości:
- Tworzy w żądaniu 3 zmiennych przepływu o wartościach statycznych
- Pobiera zmienne przepływu dynamicznie w drugiej polityce 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 pierwszych zasadach element <AssignVariable>
tworzy i ustala 3 zmiennych w żądaniu. Każdy element <Name>
określa nazwę zmiennej, a element <Value>
określa jej wartość.
Druga zasada używa elementu <AssignVariable>
do odczytywania wartości 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 polityce 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 procesu żądania. Pamiętaj, aby umieścić zasadę 1 przed zasadą 2.
- Dodaj trzecią zasadę w sekcji odpowiedzi.
- Trzecia zasada używa elementu
<Set>
, aby dodać zmienne do odpowiedzi. W tym przykładzie ładunek XML jest tworzony w odpowiedzi, którą Edge zwraca klientowi:<!-- 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ładnia dostępu do zmiennych przepływu w sekcji
<Set>
wymaga umieszczenia ich w nawiasach klamrowych.Upewnij się, że atrybut
contentType
elementu<Payload>
jest ustawiony 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 przekierować wyniki przez narzędzie takie jak
xmllint
, aby plik XML był wyświetlany 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. Nagłówki odpowiedzi wywołania usługi
W tym przykładzie załóżmy, że w żądaniu proxy interfejsu API znajduje się zasadzka ServiceCallout, a jej odpowiedź zawiera wiele nagłówków o tej samej nazwie (Set-Cookie
). Zakładając, że zmienna odpowiedzi ServiceCallout ma domyślną wartość calloutResponse
, 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ć wszystkie wartości nagłówka, użyj tej zmiennej:
{calloutResponse.header.Set-Cookie.values}
Każdy element podrzędny w tym dokumencie zawiera dodatkowe przykłady. Jeszcze więcej przykładów znajdziesz na GitHubie w przykładowym projekcie przypisywania wiadomości.
Odwołanie do elementu podrzędnego
W tej sekcji opisujemy elementy podrzędne elementu <AssignMessage>
.
<Add>
Dodaje informacje do żądania lub odpowiedzi, które są określone przez element <AssignTo>
.
Element <Add>
dodaje do wiadomości nowe właściwości, których nie ma w pierwotnej wiadomości. Aby zmienić wartości dotychczasowych właściwości, użyj elementu <Set>
.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Złożony |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne |
<FormParams> <Headers> <QueryParams> |
Element <Add>
używa tej składni:
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 element <FormParams>
służy do pobierania wartości 3 parametrów ciągu zapytania z pierwotnego żądania i ustawiania ich jako parametry formularza w żądaniu do docelowego punktu końcowego:
<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 element <Headers>
służy do dodawania 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 element <QueryParams>
służy do dodawania do żądania pojedynczego parametru 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 w preflow żądania użyto elementu <Add>
. Jeśli spojrzysz na wyniki w narzędziu takim jak narzędzie do śledzenia, zobaczysz, że żądanie „http://httpbin.org/get” staje się „http://httpbin.org/get?myParam=42”.
Elementy podrzędne elementu <Add>
obsługują dynamiczną zamianę ciągów znaków, czyli szablonowanie wiadomości.
<FormParams>
(element podrzędny do <Add>
)
Dodaje nowe parametry formularza do wiadomości z prośbą. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica o elementach <FormParam> |
Element nadrzędny |
<Add>
|
Elementy podrzędne |
<FormParam> |
Element <FormParams>
używa tej składni:
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
W tym przykładzie do żądania dodaję jeden 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
W tym przykładzie pobieramy wartość parametru ciągu zapytania name
i dodajemy 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 w tym przykładzie nie określamy celu za pomocą <AssignTo>
. Ta zasada dodaje parametr
Przykład 3
W tym przykładzie do żądania dodawane są różne parametry formularza:
<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>
W tym przykładzie parametry ciągu zapytania są pobierane z początkowego żądania i dodawane jako parametry formularza do żądania wysyłanego do docelowego punktu końcowego.
Aby sprawdzić przepływ danych, możesz użyć narzędzia do śledzenia. Zobaczysz, że treść żądania zawiera zakodowane w adresie URL dane formularza, które zostały pierwotnie przekazane jako parametry ciągu zapytania:
%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en
Możesz użyć <FormParams>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Polecenie HTTP: POST
- Typ wiadomości: prośba
- Jeden (lub oba) z tych elementów:
- Dane formularza: ustaw na jakąś wartość lub „” (pusty ciąg znaków). Na przykład w przypadku
curl
dodaj do prośby-d ""
. Content-Length
nagłówek: ustaw wartość 0 (jeśli w pierwotnym żądaniu nie ma żadnych danych; w przeciwnym razie ustaw bieżącą długość w bajtach). Na przykład w przypadku zapytaniacurl
dodaj-H "Content-Length: 0"
.
- Dane formularza: ustaw na jakąś wartość lub „” (pusty ciąg znaków). Na przykład w przypadku
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
na „application/x-www-form-urlencoded” przed wysłaniem wiadomości do usługi docelowej.
<Headers>
(element podrzędny do <Add>
)
Dodaje nowe nagłówki do określonego żądania lub odpowiedzi, które jest określone przez element <AssignTo>
.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica o elementach <Header> |
Element nadrzędny |
<Add>
|
Elementy podrzędne |
<Header> |
Element <Headers>
używa tej składni:
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
W tym przykładzie do wiadomości żądania dodaję nagłówek user-agent
i przypisuję 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>
(element podrzędny do <Add>
)
dodaje do żądania nowe parametry zapytania. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica o elementach <QueryParam> |
Element nadrzędny |
<Add>
|
Elementy podrzędne |
<QueryParam> |
Element <QueryParams>
używa tej składni:
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
W tym przykładzie do żądania dodawany jest parametr zapytania „myParam” i przypisuje się 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>
Możesz użyć <QueryParams>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Wyrażenie HTTP: GET
- Typ wiadomości: prośba
Ponadto parametry zapytania możesz ustawić tylko wtedy, gdy atrybut <AssignTo>
elementu type
to wiadomość z żądaniem. Ustawienie ich w odpowiedzi nie ma żadnego wpływu.
Jeśli w zasadach zdefiniujesz pusty tablicowy zbiór parametrów zapytania (<Add><QueryParams/></Add>
), zasady nie dodadzą żadnych parametrów zapytania. Jest to tożsame z pominięciem <QueryParams>
.
<AssignTo>
Określa obiekt, na którym działa zasada przypisywania wiadomości. Dostępne opcje:
- Treść żądania:
request
odebrana przez serwer proxy interfejsu API. - Wiadomość z odpowiedzią:
response
zwracany przez serwer docelowy - Komunikat niestandardowy: niestandardowy obiekt żądania lub odpowiedzi.
W niektórych przypadkach nie możesz zmienić obiektu, na który działa zasada przypisywania wiadomości.
Nie możesz na przykład użyć instrukcji <Add>
ani <Set>
, aby dodać lub zmienić parametrów zapytania (<QueryParams>
) ani parametrów formularza (<FormParams>
) w odpowiedzi. W prośbie możesz manipulować tylko parametrami zapytania i formularza.
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 wartości <AssignTo>
, zasada będzie działać na podstawie domyślnego żądania lub odpowiedzi, która zależy od miejsca jej wykonania. Jeśli zasada jest wykonywana w ramach przepływu żądań, wpływa na wiadomość żądania. Jeśli jest wykonywana w ramach przepływu odpowiedzi, domyślnie wpływa na tę odpowiedź.
Element <AssignTo>
używa tej składni:
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
W tym przykładzie określamy, że docelowym żądaniem 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 createNew
na „false” (domyślnie) powoduje, że w tym przykładzie nie jest tworzona nowa prośba. Wszystkie operacje w tej zasadzie wpływają na pierwotne żądanie.
Przykład 2
W tym przykładzie tworzymy nowy obiekt żądania:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Gdy tworzysz nowy obiekt żądania lub odpowiedzi, inne elementy polityki przypisywania wiadomości (takie jak <Add>
, <Set>
i <Set>
) działają na tym nowym obiekcie żądania.
Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach w późniejszej części procesu lub wysłać nowy obiekt żądania do usługi zewnętrznej za pomocą zasad dotyczących wywołania usługi.
Przykład 3
W tym przykładzie tworzymy nowy obiekt żądania o nazwie „MyRequestObject”:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
Gdy tworzysz nowy obiekt żądania lub odpowiedzi, inne elementy polityki przypisywania wiadomości (takie jak <Add>
, <Set>
i <Set>
) działają na tym nowym obiekcie żądania.
Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach w późniejszej części procesu lub wysłać nowy obiekt żądania do usługi zewnętrznej za pomocą zasad dotyczących wywołania usługi.
W tej tabeli opisano atrybuty <AssignTo>
:
Atrybut | Opis | Wymagany? | Typ |
---|---|---|---|
createNew |
Określa, czy ta zasada tworzy nową wiadomość podczas przypisywania wartości. Jeśli ustawiona jest wartość „true”, zasada tworzy nową zmienną typu określonego przez parametr Jeśli wartość to „false”, zasady działają w jeden z 2 sposobów:
Jeśli parametr
|
Opcjonalnie | Wartość logiczna |
transport |
Określa typ transportu dla żądania lub typu komunikatu odpowiedzi. Wartość domyślna to „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ść domyślna to „request”. Jeśli pominiesz ten atrybut, Edge utworzy żądanie lub odpowiedź, w zależności od tego, gdzie w przepływie są wykonywane te zasady. |
Opcjonalnie | Ciąg znaków |
<AssignVariable>
Przypisuje wartość zmiennej przepływu docelowego (np. zmiennej, której wartość jest ustawiana przez zasadę przypisywania wiadomości). Jeśli zmienna przepływu nie istnieje, <AssignVariable>
ją tworzy.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Złożony |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne |
<Name> (wymagany)<Ref> <Template> <Value> |
Wartość przypisana do zmiennej przepływu docelowego może być jedną z tych:
- Wartość dosłowna: użyj elementu podrzędnego
<Value>
, aby określić dosłowną wartość ciągu znaków dla zmiennej przepływu docelowego. - Zmienne przepływu: użyj elementu podrzędnego
<Ref>
, aby określić wartość istniejącej zmiennej przepływu dla docelowej zmiennej przepływu. Pełną listę zmiennych przepływu, które 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 zmiennej przepływu docelowego.
Element <AssignVariable>
używa tej składni:
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ła, użyj elementu <Ref>
. Jeśli zmienna, do której odwołuje się <Ref>
, jest niedostępna, Edge używa wartości określonej przez element <Value>
. Jeśli zdefiniujesz element <Template>
, będzie on miał pierwszeństwo przed innymi elementami podrzędnymi.
Przykład 1
W tym przykładzie wartość nowej zmiennej myvar
jest ustawiana na wartość dosłowną „42”:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Przykład 2
W tym przykładzie wartość zmiennej przepływu
request.header.user-agent
jest przypisywana zmiennej docelowego przepływu myvar
oraz wartość parametru zapytania country
jest przypisywana zmiennej docelowego przepływu
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 żadne z przypisania nie powiedzie się, Edge przypisze zmiennej przepływu docelowego wartość „ErrorOnCopy”.
Jeśli zmienne przepływu myvar
lub Country
nie istnieją, zmienna <AssignVariable>
je tworzy.
Przykład 3
W tym przykładzie element podrzędny <Template>
służy do konkatenacji 2 zmiennych kontekstowych za pomocą ciągu znaków (przecinek):
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Najczęstszym zastosowaniem parametru <AssignVariable>
jest ustawienie wartości domyślnej dla parametru zapytania, nagłówka lub innej wartości, która może być przekazywana z żądaniem. Możesz to zrobić za pomocą kombinacji elementów podrzędnych <Ref>
i <Value>
. Więcej informacji znajdziesz w przykładach dotyczących <Ref>
.
<Name>
(element podrzędny do <AssignVariable>
)
Określa nazwę zmiennej przepływu docelowego (np. zmiennej, której wartość jest ustawiana przez zasadę przypisywania wiadomości). Jeśli zmienna o nazwie podanej w elemencie <AssignVariable>
nie istnieje, polityka utworzy zmienną o tej nazwie.
Wartość domyślna | nie dotyczy |
Wymagany? | Wymagane |
Typ | Ciąg znaków |
Element nadrzędny |
<AssignVariable>
|
Elementy podrzędne | Brak |
Element <Name>
używa tej składni:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
Przykład 1
W tym przykładzie zmienna docelowa ma nazwę myvar
i jest ustawiona na wartość dosłowną „42”:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Jeśli myvar
nie istnieje, <AssignVariable>
tworzy go.
<Ref>
(element podrzędny do <AssignVariable>
)
Określa źródło przypisania jako zmienną przepływu. Zmienna przepływu może być jedną z wstępnie zdefiniowanych zmiennych przepływu (wymienionych w tabeli zmiennych przepływu) lub niestandardową zmienną przepływu, którą utworzysz.
Wartość <Ref>
jest zawsze interpretowana jako zmienna przepływu. Nie możesz jako wartości podać ciągu znaków. Aby przypisać dokładną 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 |
Podczas określania zmiennej przepływu za pomocą <Ref>
pomiń nawiasy „{}”, które zwykle stosujesz 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ą dla zmiennej przepływu docelowego, użyj wartości <Value>
w połączeniu z wartością <Ref>
. Jeśli zmienna przepływu określona przez <Ref>
nie istnieje, nie można jej odczytać lub jest pusta, Edge przypisuje zmiennej przepływu docelowego wartość <Value>
.
Element <Ref>
używa tej składni:
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 wartość zmiennej przepływu request.header.user-agent
jest przypisywana zmiennej docelowego przepływu myvar
, a wartość parametru zapytania country
– 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 przeglądarka Edge nie ma określonej wartości domyślnej (lub wartości zapasowej) dla żadnego z przypisań.
Przykład 2
W tym przykładzie wartość zmiennej przepływu request.header.user-agent
jest przypisywana zmiennej docelowego przepływu myvar
, a wartość parametru zapytania country
– 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>
W tym przykładzie, jeśli wartości zmiennej przepływu request.header.user-agent
lub parametru zapytania Country
są puste, nieczytelne lub źle sformatowane, Edge przypisuje nowym zmiennym wartość „ErrorOnCopy”.
Przykład 3
Typowym zastosowaniem parametru <AssignVariable>
jest ustawienie domyślnej wartości parametru zapytania, nagłówka lub innej wartości, którą można przekazać w żądaniu. Na przykład tworzysz proksy API pogody, w którym żądanie przyjmuje jeden parametr zapytania o nazwie „w”. Ten parametr zawiera identyfikator miasta, dla którego chcesz sprawdzić pogodę. Adres URL żądania ma postać:
http://myCO.com/v1/weather/forecastrss?w=city_ID
Aby zdefiniować wartość domyślną dla „w”, utwórz regułę przypisywania wiadomości, która wygląda tak:
<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 parametr zapytania „w” został pominięty w żądaniu, przykład używa wartości domyślnej z elementu <Value>
. Dlatego możesz wysłać żądanie do tego proxy interfejsu API, pomijając parametr zapytania „w”:
http://myCO.com/v1/weather/forecastrss
...i aby proxy interfejsu API zwracał prawidłowy wynik.
W przeciwieństwie do <Value>
wartość zmiennej <Ref>
musi być zmienną przepływu, np. właściwością obiektu request
, response
lub target
. Wartością może być też utworzona przez Ciebie zmienna ścieżki niestandardowej.
Jeśli w przypadku wartości <Ref>
podasz zmienną przepływu, która nie istnieje, a wartość <IgnoreUnresolvedVariables>
to „true”, Edge zwróci błąd.
<Template>
(element podrzędny do <AssignVariable>
)
Określa szablon wiadomości. Szablon wiadomości umożliwia zastąpienie zmiennych ciągów podczas wykonywania zasady. Można w nim łączyć ciągi tekstowe z nazwami zmiennych umieszczonymi w nawiasach klamrowych. Ponadto szablony wiadomości obsługują funkcje takie jak ucieczka i konwersja wielkości liter.
Użyj atrybutu ref
, aby określić zmienną przepływu, której wartość jest szablonem wiadomości. Możesz na przykład przechowywać szablon wiadomości jako atrybut niestandardowy w aplikacji dewelopera. Gdy Edge rozpozna aplikację dewelopera po zweryfikowaniu klucza interfejsu API lub tokenu bezpieczeństwa (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 z zasady bezpieczeństwa. W tym przykładzie zakładamy, że szablon wiadomości jest dostępny w atribute klienta o nazwie message_template
w aplikacji dewelopera wywołującej interfejs API, gdzie do weryfikacji klucza interfejsu API została użyta polityka VerifyAPIKey:
<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 |
Element <Template>
używa tej składni:
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 szablonu wiadomości do konkatenacji 2 zmiennych kontekstowych za pomocą ciągu znaków (łącznika) między nimi:
<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
W tym przykładzie określono zmienną przepływu, której wartość to wstępnie zdefiniowany szablon wiadomości. Użyj tej opcji, jeśli chcesz wstrzyknąć zdefiniowany wstępnie szablon w czasie wykonywania bez konieczności modyfikowania zasad:
<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 tym przykładzie określono zmienną przepływu i wartość tekstową. W tym przypadku, jeśli odwołanie do zmiennej jest niezerowe, ta wartość jest używana jako szablon. Jeśli odwołana wartość jest pusta, jako szablon jest używana wartość tekstowa (w tym przypadku {system.uuid}-{messageid}
). Ten wzór jest przydatny do podawania wartości „zastąpienia”, gdy w niektórych przypadkach chcesz zastąpić szablon domyślny (część tekstową) wartościami ustawianymi dynamicznie. Na przykład instrukcja warunkowa może pobrać wartość z mapy klucz-wartość i przypisać ją do zmiennej, do której się odwołuje:
<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>
(element podrzędny do <AssignVariable>
)
Określa wartość zmiennej przepływu docelowego ustawionej za pomocą <AssignVariable>
. Wartość jest zawsze interpretowana jako ciąg znaków dosłownych. Nie możesz użyć jako wartości zmiennej przepływu, nawet jeśli otoczysz ją w nawiasy („{}”). Aby użyć zmiennej przepływu, użyj zamiast tego znaku <Ref>
.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<AssignVariable>
|
Elementy podrzędne | Brak |
Gdy jest używany w połączeniu z elementem <Ref>
, <Value>
działa jako wartość domyślna (lub zastępcza). Jeśli parametr <Ref>
nie jest określony, nie można go rozwiązać lub jest null, używana jest wartość parametru <Value>
.
Element <Value>
używa tej składni:
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ść zmiennej przepływu docelowego myvar
jest ustawiana na wartość dosłowną „42”:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Przykład 2
W tym przykładzie wartość zmiennej przepływu request.header.user-agent
jest przypisywana zmiennej przepływu myvar
, a wartość parametru zapytania country
– 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 żadne z tych przypisań się nie powiedzie, <AssignVariable>
zamiast tego przypisze zmiennej przepływu docelowego wartość „ErrorOnCopy”.
<Copy>
Kopiuje wartości z wiadomości określonej przez atrybut source
do wiadomości określonej przez element <AssignTo>
. Jeśli nie określisz celu za pomocą elementu <AssignTo>
, ta zasada skopiuje wartości do żądania lub odpowiedzi w zależności od tego, gdzie jest wykonywana.
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> |
Element <Copy>
używa tej składni:
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
W tym przykładzie kopiujemy 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 | Wymagany? | Typ |
---|---|---|---|
źródło |
Określa obiekt źródłowy kopii.
|
Opcjonalnie | Ciąg znaków |
<FormParams>
(element podrzędny do <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> |
Element <FormParams>
używa tej składni:
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 z żądania kopiowany jest pojedynczy parametr formularza 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
W tym przykładzie wszystkie parametry formularza są kopiowane 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 3 parametry formularza są kopiowane do niestandardowego żądania „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 masz kilka 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 skopiowane są elementy „f1”, „f2” i druga wartość elementu „f3”. Jeśli „f3” ma tylko jedną wartość, nie jest ona kopiowana.
Możesz użyć <FormParams>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Polecenie HTTP: POST
- Typ wiadomości: odpowiedź
- Jeden (lub oba) z tych elementów:
- Dane formularza: ustaw na jakąś wartość lub „” (pusty ciąg znaków). Na przykład w przypadku
curl
dodaj-d ""
do swojej prośby. Content-Length
nagłówek: ustaw wartość 0 (jeśli w pierwotnej prośbie nie ma danych), w przeciwnym razie ustaw bieżącą długość. Na przykład w przypadku zapytaniacurl
dodaj-H "Content-Length: 0"
.
- Dane formularza: ustaw na jakąś wartość lub „” (pusty ciąg znaków). Na przykład w przypadku
Gdy kopiujesz <FormParams>
, <Copy>
ustawia Content-Type
wiadomości na „application/x-www-form-urlencoded” przed wysłaniem wiadomości do usługi docelowej.
<Headers>
(element podrzędny do <Copy>
)
Kopiuje nagłówki HTTP z żądania lub wiadomości 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> |
Element <Headers>
używa tej składni:
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
W tym przykładzie nagłówek user-agent
jest kopiowany 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 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 jest kilka nagłówków o tej samej nazwie, 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 skopiowane są elementy „h1”, „h2” i druga wartość elementu „h3”. Jeśli element „h3” ma tylko jedną wartość, nie jest ona kopiowana.
<Path>
(element podrzędny do <Copy>
)
Określa, czy ścieżka ma być kopiowana z żądania źródłowego do żądania docelowego. Ten element nie ma wpływu na odpowiedź.
Jeśli ustawisz wartość „true”, ta zasada skopiuje ścieżkę z atrybutu source
elementu <Copy>
do elementu <AssignTo>
.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Copy>
|
Elementy podrzędne | Brak |
Element <Path>
używa tej składni:
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
Z tego przykładu wynika, że zasada przypisywania wiadomości powinna skopiować ścieżkę z żądania źródłowego do nowego obiektu żądania niestandardowego:
<AssignMessage name="copy-path-1"> <Copy source="request"> <Path>true</Path> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Możesz użyć <Path>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Typ wiadomości: prośba
<Payload>
(element podrzędny do <Copy>
)
Określa, czy ładunek ma zostać skopiowany ze źródła do miejsca docelowego. Źródłem i docelnikiem mogą być żądania lub odpowiedzi.
Jeśli wartość to „true”, 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 |
Element <Payload>
używa tej składni:
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
W tym przykładzie parametr <Payload>
ma wartość „true”, dzięki czemu ładunek żądania jest kopiowany 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>
(element podrzędny do <Copy>
)
Parametry ciągu zapytania są kopiowane 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 |
Element <QueryParams>
używa tej składni:
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
W tym przykładzie parametr zapytania „my_param” jest kopiowany z żądania do nowego obiektu żądania niestandardowego:
<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
W tym przykładzie wszystkie parametry zapytania z żądania są kopiowane 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 masz kilka 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 skopiowane są kolumny „qp1”, „qp2” i druga wartość kolumny „qp3”. Jeśli parametr „qp3” ma tylko jedną wartość, nie jest on kopiowany.
Możesz użyć <QueryParams>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Wyrażenie HTTP: GET
- Typ wiadomości: prośba
<ReasonPhrase>
(element podrzędny do <Copy>
)
Określa, czy fraza powodu ma być kopiowana z odpowiedzi źródłowej do odpowiedzi docelowej. Ten element nie ma wpływu na żądanie.
Jeśli wartość zasad to „true”, zasada ta kopiuje wartość 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 |
Element <ReasonPhrase>
używa tej składni:
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
W tym przykładzie wartość <ReasonPhrase>
jest ustawiona na „true”, co powoduje, że <Copy>
kopiuje wyrażenie powodu z domyślnej odpowiedzi do obiektu odpowiedzi niestandardowej:
<AssignMessage name="copy-reasonphrase-1"> <Copy source="response"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Możesz użyć <ReasonPhrase>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Typ wiadomości: odpowiedź
<StatusCode>
(element podrzędny do <Copy>
)
Określa, czy kod stanu jest kopiowany z odpowiedzi źródłowej do odpowiedzi docelowej. Ten element nie ma wpływu na żądanie.
Jeśli wartość tej zasady to „Prawda”, z elementu source
atrybutu do elementu <Copy>
kopiuje kod stanu z elementu <AssignTo>
.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Copy>
|
Elementy podrzędne | Brak |
Element <StatusCode>
używa tej składni:
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
W tym przykładzie parametr <StatusCode>
ma wartość „true” (prawda), co powoduje skopiowanie kodu stanu z obiektu odpowiedzi domyślnej do nowego obiektu odpowiedzi niestandardowej:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Możesz użyć <StatusCode>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Typ wiadomości: odpowiedź
Najczęstszym zastosowaniem parametru <StatusCode>
jest zapewnienie, aby odpowiedź serwera proxy miała ten sam stan co odpowiedź otrzymana od celu, gdy atrybut createNew
parametru <AssignTo>
jest ustawiony na „true”.
<Verb>
(element podrzędny do <Copy>
)
Określa, czy czasownik HTTP jest kopiowany z żądania źródłowego do żądania docelowego. Ten element nie ma wpływu na odpowiedź.
Jeśli ustawiona jest wartość „true”, do żądania określonego w elemencie <AssignTo>
zostanie skopiowane czasowniki znalezione w atrybucie source
elementu <Copy>
.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Copy>
|
Elementy podrzędne | Brak |
Element <Verb>
używa tej składni:
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
W tym przykładzie parametr <Verb>
ma wartość „true” (prawda), co powoduje skopiowanie czasownika 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>
Możesz używać <Verb>
tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: prośba
<Version>
(element podrzędny do <Copy>
)
Określa, czy wersja HTTP jest kopiowana z żądania źródłowego do żądania docelowego. Ten element nie ma wpływu na odpowiedź.
Jeśli wartość to „true” (prawda), kopiuje wersję HTTP znalezioną w atrybucie 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 |
Element <Version>
używa tej składni:
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
W tym przykładzie <Version>
jest ustawiony na „true” (prawda) w żądaniu, co powoduje skopiowanie wersji 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>
Możesz używać <Version>
tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: prośba
<DisplayName>
Oprócz atrybutu name
możesz użyć innej, bardziej naturalnie brzmiącej nazwy, aby oznaczyć zasadę w edytorze proxy w interfejsie zarządzania.
Element <DisplayName>
jest wspólny dla wszystkich zasad.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie: Jeśli pominiesz parametr <DisplayName> , zostanie użyta wartość atrybutu name zasady. |
Typ | Ciąg znaków |
Element nadrzędny | <PolicyElement> |
Elementy podrzędne | Brak |
Element <DisplayName>
używa tej składni:
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 ma się zatrzymać, gdy zostanie napotkana niezdefiniowana zmienna.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne | Brak |
Ustaw wartość true
, aby zignorować nierozwiązane zmienne i kontynuować przetwarzanie; w przeciwnym razie ustaw wartość false
. Wartością domyślną jest false
.
Ustawienie wartości <IgnoreUnresolvedVariables>
na true
różni się od ustawienia wartości <AssignMessage>
continueOnError
na true
, ponieważ dotyczy ono ustawiania i pobierania wartości zmiennych. Jeśli ustawisz continueOnError
na true
, przeglądarka Edge zignoruje wszystkie błędy, a nie tylko te, które wystąpiły podczas używania zmiennych.
Element <IgnoreUnresolvedVariables>
używa tej składni:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
Przykład 1
W tym przykładzie parametr <IgnoreUnresolvedVariables>
ma wartość „true”:
<AssignMessage name="ignoreunresolvedvariables"> <Copy source="response"> ... <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </Copy> </AssignMessage>
<Remove>
Usuwa nagłówki, parametry zapytania, parametry formularza lub ładunek wiadomości. Wiadomość może być prośbą lub odpowiedzią. Korzystając z elementu <AssignTo>
, możesz określić, na który komunikat <Remove>
ma działać.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Złożony |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne |
<FormParams> <Headers> <Payload> <QueryParams> |
Typowym zastosowaniem parametru <Remove>
jest usuwanie z obiektu przychodzącego zapytania parametru zapytania zawierającego poufne informacje, aby nie przekazywać go na serwer backendu.
Element <Remove>
używa tej składni:
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
W tym przykładzie z odpowiedzi usunięto treść wiadomości:
<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 ramach tej zasady w przepływie odpowiedzi usuwamy treść odpowiedzi i zwracamy klientowi tylko nagłówki HTTP.
Przykład 2
Z przychodzącego żądania usuwamy w tym przykładzie wszystkie parametry formularza i parametr zapytania:
<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>
(element podrzędny do <Remove>
)
Usuwa z żądania określone parametry formularza. 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> |
Element <FormParams>
używa tej składni:
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
W tym przykładzie z żądania usuwane są 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
Z tego przykładu wynika, że z żądania zostaną usunięte 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 masz kilka 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>
W tym przykładzie usuwamy kolumny „f1”, „f2” i drugą wartość kolumny „f3”. Jeśli parametr „f3” ma tylko jedną wartość, nie jest on usuwany.
Możesz użyć <FormParams>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Typ wiadomości: prośba
Content-Type
: „application/x-www-form-urlencoded”
<Headers>
(element podrzędny do <Remove>
)
Usuwa z żądania lub odpowiedzi określone nagłówki HTTP, które są 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> |
Element <Headers>
używa tej składni:
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
W tym przykładzie nagłówek user-agent
jest usuwany z żądania:
<AssignMessage name="remove-headers-1"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Przykład 2
W tym przykładzie wszystkie nagłówki są usuwane z żądania:
<AssignMessage name="remove-headers-2"> <Remove> <Headers/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Przykład 3
Jeśli jest kilka nagłówków o tej samej nazwie, 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 z żądania usuwane są parametry „h1”, „h2” i druga wartość parametru „h3”. Jeśli element „h3” ma tylko jedną wartość, nie jest on usuwany.
<Payload>
(element podrzędny do <Remove>
)
Określa, czy <Remove>
usuwa ładunek w żądaniu lub odpowiedzi, który jest określony przez element <AssignTo>
. Ustaw wartość „true”, aby wyczyścić ładunek. W przeciwnym razie wpisz „false”. Wartość domyślna to „false”.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<Remove>
|
Elementy podrzędne | Brak |
Element <Payload>
używa tej składni:
Składnia
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
Przykład 1
W tym przykładzie parametr <Payload>
ma wartość „true”, więc ładunek żądania jest wyczyszczany:
<AssignMessage name="remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(element podrzędny do <Remove>
)
Usuwa z zapytania 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> |
Element <QueryParams>
używa tej składni:
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
Z żądania można usunąć pojedynczy parametr zapytania. W tym przykładzie usuwamy z niego jeden parametr:
<AssignMessage name="remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Przykład 2
Z tego przykładu wynika, że z żądania usuwane są wszystkie parametry zapytania:
<AssignMessage name="remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Przykład 3
Jeśli masz kilka 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>
W tym przykładzie z żądania usuwane są parametry „qp1”, „qp2” i druga wartość parametru „qp3”. Jeśli parametr „qp3” ma tylko jedną wartość, nie jest on usuwany.
Przykład 4
Z żądania można usunąć parametr zapytania apikey
, jak w tym przykładzie:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Możesz użyć <QueryParams>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Wyrażenie HTTP: GET
- Typ wiadomości: prośba
<Set>
Ustawia informacje w wiadomości żądania lub odpowiedzi, które są określone przez element
<AssignTo>
. <Set>
zastępuje nagłówki lub parametry, które są już w oryginalnej wiadomości. Aby utworzyć nowy nagłówek lub parametr, użyj elementu <Add>
.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Złożony |
Element nadrzędny |
<AssignMessage>
|
Elementy podrzędne |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
Element <Set>
używa tej składni:
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
Ten przykład pokazuje element <Set>
:
<AssignMessage continueOnError="false" enabled="true" name="set-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> <QueryParams> <QueryParam name="name">{request.header.name}</QueryParam> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> <!-- <Verb>GET</Verb> --> <Payload contentType="text/plain">42</Payload> <Path/> <ReasonPhrase>Bad request</ReasonPhrase> <StatusCode>400</StatusCode> <Verb>POST</Verb> <Verb>{my_variable}</Verb> <Version>1.1</Version> </Set> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
<FormParams>
(element podrzędny do <Set>
)
Zastępuje dotychczasowe parametry formularza w żądaniu i zastępuje je nowymi wartościami określonymi w tym elemencie. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica o elementach <FormParam> |
Element nadrzędny |
<Set>
|
Elementy podrzędne |
<FormParam> |
Element <FormParams>
używa tej składni:
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
W tym przykładzie parametr formularza o nazwie „myparam” jest ustawiany na wartość zmiennej request.header.myparam
w nowej, niestandardowej prośbie:
<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>
Możesz użyć <FormParams>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Polecenie HTTP: POST
- Typ wiadomości: prośba
Jeśli w zasadzie zdefiniujesz puste parametry formularza (<Add><FormParams/></Add>
), zasada nie doda żadnych parametrów formularza. Jest to tożsame z pominięciem <FormParams>
.
<Set>
zmienia Content-Type
wiadomości na „application/x-www-form-urlencoded” przed wysłaniem jej do docelowego punktu końcowego.
<Headers>
(element podrzędny do <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 o elementach <Header> |
Element nadrzędny |
<Set>
|
Elementy podrzędne |
<Header> |
Element <Headers>
używa tej składni:
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
W tym przykładzie nagłówek user-agent
ma 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 w zasadzie zdefiniujesz puste nagłówki (<Add><Headers/></Add>
), zasada nie dodaje żadnych nagłówków. Jest to tożsame jak pominięcie <Headers>
.
<Path>
(element podrzędny do <Set>
)
<Payload>
(element podrzędny do <Set>
)
Określa treść wiadomości dla żądania lub odpowiedzi, która jest określona przez element <AssignTo>
. Ładunek może mieć dowolny prawidłowy typ treści, np. tekst, JSON lub XML.
Wartość domyślna | pusty ciąg |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<Set>
|
Elementy podrzędne | Brak |
Element <Payload>
używa tej składni:
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
W tym przykładzie ustawiono ładunek w postaci zwykłego tekstu:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
Przykład 2
W tym przykładzie ustawiamy ł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 wartości zmiennych są wstawiane do ładunku przez umieszczenie nazw zmiennych 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 (np. przed wersją w chmurze 16.08.17) nie można było 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
do określania znaków rozdzielaczych oraz do otaczania nazw zmiennych, np. 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ść pliku <Payload>
jest traktowana jako szablon wiadomości. Oznacza to, że zasada przypisywania wiadomości zastępuje zmienne otoczone nawiasami klamrowymi wartościami odwołań do zmiennych w czasie działania.
W tym przykładzie użyto nawiasów klamrowych, aby ustawić część ładunku na wartość zmiennej:
<AssignMessage name="set-payload-4"> <Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </root> </Payload> </Set> </AssignMessage>
W tej tabeli opisano atrybuty <Payload>
:
Atrybut | Opis | Obecność | Typ |
---|---|---|---|
contentType |
Jeśli jest podana, wartość |
Opcjonalnie | Ciąg znaków |
variablePrefix |
Opcjonalnie określa ogranicznik poprzedzający zmienną przepływu. Wartość domyślna to „{“}. Więcej informacji znajdziesz w dokumentacji dotyczącej zmiennych przepływu. | Opcjonalnie | Char |
variableSuffix |
Opcjonalnie określa końcowy ogranicznik zmiennej przepływu. Domyślnie jest to „}”. Więcej informacji znajdziesz w dokumentacji dotyczącej zmiennych przepływu. | Opcjonalnie | Char |
<QueryParams>
(element podrzędny do <Set>
)
Zastępuje dotychczasowe parametry zapytania w żądaniu nowymi wartościami. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Tablica o elementach <QueryParam> |
Element nadrzędny |
<Set>
|
Elementy podrzędne |
<QueryParam> |
Element <QueryParams>
używa tej składni:
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” ma 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>
Możesz użyć <QueryParams>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Wyrażenie HTTP: GET
- Typ wiadomości: prośba
Jeśli w zasadach zdefiniujesz puste parametry zapytania (<Set><QueryParams/></Set>
), zasady nie ustawiają żadnych parametrów zapytania. Jest to tożsame z pominięciem <QueryParams>
.
<ReasonPhrase>
(element podrzędny do <Set>
)
Określa wyrażenie przyczyny w odpowiedzi. Zwykle służy to do debugowania w połączeniu z polem <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 |
Element <ReasonPhrase>
używa tej składni:
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
W tym przykładzie zdefiniowano prostą frazę powodu:
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Przykład 2
Treść pliku <ReasonPhrase>
jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej umieszczona w nawiasach klamrowych zostanie zastąpiona podczas wykonywania kodu wartością odwołania do zmiennej, jak w tym przykładzie:
<AssignMessage name="set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Możesz użyć <ReasonPhrase>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Typ wiadomości: odpowiedź
<StatusCode>
(element podrzędny do <Set>
)
Ustawia kod stanu w odpowiedzi. Ten element nie ma wpływu na żądanie.
Wartość domyślna | 200 (gdy atrybut createNew tagu <AssignTo> ma wartość „true”) |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków lub variable |
Element nadrzędny |
<Set>
|
Elementy podrzędne | Brak |
Element <StatusCode>
używa tej składni:
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
W tym przykładzie ustawiono 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ść pliku <StatusCode>
jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej umieszczona w nawiasach klamrowych zostanie zastąpiona podczas wykonywania kodu wartością zmiennej, do której się odwołuje, jak w tym przykładzie:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Możesz użyć <StatusCode>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Typ wiadomości: odpowiedź
<Verb>
(element podrzędny do <Set>
)
Ustawia w żądaniu czasownik HTTP. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków lub variable |
Element nadrzędny |
<Set>
|
Elementy podrzędne | Brak |
Element <Verb>
używa tej składni:
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
W tym przykładzie żądaniu przypisuje się proste czasowniki:
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Przykład 2
Treść <Verb>
jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy będzie w czasie wykonywania zastępowana wartością zmiennej, do której się odwołuje.
W tym przykładzie do wypełnienia czasownika użyto zmiennej:
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Możesz użyć <Verb>
tylko wtedy, gdy zostaną spełnione te kryteria:
- Typ wiadomości: prośba
<Version>
(element podrzędny do <Set>
)
Ustawia wersję HTTP żądania. Ten element nie ma wpływu na odpowiedź.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków lub variable |
Element nadrzędny |
<Set>
|
Elementy podrzędne | Brak |
Element <Version>
używa tej składni:
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
W tym przykładzie numer wersji jest ustawiony 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 numer wersji jest ustawiany za pomocą zmiennej w nawiasach klamrowych:
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Treść pliku <Version>
jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej umieszczona w nawiasach klamrowych zostanie zastąpiona podczas wykonywania kodu wartością zmiennej, do której się odwołuje.
Możesz używać <Version>
tylko wtedy, gdy są spełnione te kryteria:
- Typ wiadomości: prośba
Tworzenie niestandardowych wiadomości o prośbach
Za pomocą zasady przypisywania wiadomości możesz utworzyć niestandardową wiadomość z prośbą. Po utworzeniu niestandardowej prośby możesz jej używać na te sposoby:
- dostęp do zmiennych w innych zasadach,
- Przekazywanie danych do usługi zewnętrznej
Aby utworzyć niestandardową wiadomość z prośbą, użyj elementu <AssignTo>
w zasadach dotyczących przypisywania wiadomości. Ustaw wartość createNew
na „true” (prawda) i określ nazwę nowej wiadomości w treści elementu, jak pokazano w tym przykładzie:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Domyślnie przeglądarka Edge nie wykonuje żadnych działań w reakcji na niestandardową wiadomość z prośbą. Po utworzeniu Edge kontynuuje proces z pierwotną prośbą. Aby użyć niestandardowego żądania, dodaj do serwera proxy zasadę, taką jak zasada ServiceCallout, która może przekazać niestandardowe żądanie do zewnętrznej usługi.
W tych przykładach tworzone są niestandardowe wiadomości z żądaniami:
Przykład 1
W tym przykładzie obiekt żądania niestandardowego jest tworzony za pomocą metody AssignMessage:
<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>
Ten przykład:
- Tworzy nowy obiekt wiadomości o nazwie „MyCustomRequest”.
- W przypadku MyCustomRequest te zasady:
- Kopiuje wartość nagłówka HTTP
user-agent
z dochodzącego żądania do nowej wiadomości. Funkcja<Copy>
używa odwołania bezwzględnego do zmiennej przepływuuser-agent
, więc nie musisz określać atrybutusource
w funkcji<Copy>
. - Ustawia parametr zapytania
address
w wiadomości niestandardowej na wartość parametru zapytaniaaddy
z dostarczoną prośbą. - Ustawia czasownik HTTP na
GET
.
- Kopiuje wartość nagłówka HTTP
- Ustawia wartość
<IgnoreUnresolvedVariables>
na „fałsz”. Jeśli<IgnoreUnresolvedVariables>
ma wartość „fałsz”, a jedna z zmiennych, które zasada próbuje dodać, nie istnieje, Edge przestanie przetwarzać dane w ramach przepływu interfejsu API.
Przykład 2
Oto kolejny przykład pokazujący, jak utworzyć obiekt niestandardowego żądania za pomocą metody AssignMessage:
<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 w nowej prośbie wartości <Verb>
i <Payload>
.
Do niestandardowego komunikatu z prośbą możesz uzyskać dostęp w innej regule przypisywania wiadomości, która występuje później w procesie. W tym przykładzie uzyskujemy wartość nagłówka user-agent
wiadomości z niestandardowym żądaniem:
<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
Aby dowiedzieć się więcej o zasadach dotyczących przypisywania wiadomości, obejrzyj te filmy.
Wideo | Opis |
---|---|
Dlaczego warto przypisać zasady dotyczące wiadomości? | Dowiedz się więcej o zaletach korzystania z zasady przypisywania wiadomości w celu modyfikowania żądania lub odpowiedzi interfejsu API bez modyfikowania kodu backendu. |
Kopiowanie elementów interfejsu API za pomocą zasady przypisywania wiadomości | Skopiuj elementy z żądania lub odpowiedzi interfejsu API i utwórz nowy obiekt żądania lub odpowiedzi, używając zasady przypisywania wiadomości. |
Usuwanie elementów interfejsu API za pomocą zasad dotyczących przypisywania wiadomości | Usuwaj elementy interfejsu API i modyfikuj go, zanim dotrze do docelowego backendu, korzystając z zasady przypisywania wiadomości. |
Dodawanie i ustawianie elementów interfejsu API za pomocą zasady AssignMessage | Zmień żądanie lub odpowiedź interfejsu API, dodając parametry zapytania, nagłówki, parametry formularza lub ładunki za pomocą zasad dotyczących przypisywania wiadomości. |
Tworzenie zmiennych niestandardowych za pomocą zasady przypisywania wiadomości | Ustaw zmienne niestandardowego przepływu za pomocą zasady przypisywania wiadomości i wykorzystaj te zmienne w innych zasadach w interfejsie proxy API. |
Tworzenie nowych obiektów żądań lub odpowiedzi za pomocą zasady przypisywania wiadomości | Tworzenie nowych obiektów żądania lub odpowiedzi interfejsu API za pomocą zasady przypisywania wiadomości w czasie wykonywania interfejsu API. |
Tworzenie mock API za pomocą zasady przypisywania wiadomości | Utwórz prosty interfejs API REST, dodając regułę przypisywania wiadomości w przepływie odpowiedzi. |
Ustawianie i modyfikowanie ładunku za pomocą zasady AssignMessage | Przekształć żądanie REST w żądanie SOAP, ustawiając ładunek SOAP za pomocą zasady przypisywania wiadomości podczas działania interfejsu API. |
Kody błędów
W tej sekcji opisaliśmy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów, które są ustawiane przez Edge, gdy te zasady powodują błąd. Te informacje są ważne, jeśli tworzysz reguły błędów do obsługi błędów. Więcej informacji znajdziesz w artykułach Więcej informacji o błędach związanych z naruszeniem zasad i Rozwiązywanie problemó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 | Zasada nie mogła ustawić zmiennej. Sprawdź ciąg błędów pod kątem nazwy niezdefiniowanej zmiennej. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
Ten błąd występuje, jeśli atrybut Zmienne typu message 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:
|
build |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego tę zasadę.
Nazwa błędu | Przyczyna | Napraw |
---|---|---|
InvalidIndex |
Jeśli indeks określony w elementach <Copy> lub <Remove> zasady Assign Message (Przypisywanie 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 jest określony w elemencie <AssignVariable> , wdrożenie interfejsu API zakończy się niepowodzeniem, ponieważ nie ma prawidłowej nazwy zmiennej, której można przypisać wartość. Wymagana jest prawidłowa nazwa zmiennej.
|
build |
InvalidPayload |
ładunek określony w zasadach jest nieprawidłowy. |
Zmienne dotyczące błędów
Te zmienne są ustawiane, gdy ta zasada wywołuje błąd w czasie działania. Więcej informacji znajdziesz w artykule Podstawowe informacje o błędach związanych z zasadami.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu, jak podano w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatni element kodu błędu. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name to nazwa zasady określona przez użytkownika, 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 zasad jest definiowany przez schemat XML (.xsd
). Informacje na temat schematów zasad znajdziesz na GitHubie.
Powiązane artykuły
Przykłady działających zasad metody AssignMessage są dostępne w przykładach interfejsu API.
Zaawansowany przykład zastąpienia wartości target.url
z ProxyEndpoint znajdziesz w tym artykule w społeczności Apigee.
Aby zobaczyć działanie „set path” w zasadach ServiceCallout, zapoznaj się z przykładem „Nauka poprzez działanie” w przykładach Apigee na GitHubie. Wystarczy sklonować repozytorium i postępować zgodnie z instrukcjami podanymi w tym temacie. Przykład używa zasady przypisywania wiadomości do ustawienia ścieżki żądania, a następnie używa zasady wywołania usługi do wysłania żądania do usługi zewnętrznej.