Zasada przypisywania wiadomości

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 name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekraczać 255 znaków.

Opcjonalnie użyj elementu <DisplayName>, aby oznaczyć zasadę w edytorze proxy interfejsu zarządzania inną nazwą w języku naturalnym.

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

<Add> dodaje do wiadomości nagłówki lub parametry, których nie ma w pierwotnej wiadomości. Aby zastąpić istniejące nagłówki lub parametry, użyj elementu <Set>.

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

<Set> zastępuje nagłówki lub parametry, które istnieją już w oryginalnej wiadomości. Aby dodać nowe nagłówki lub parametry, użyj elementu <Add>.

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:

  1. Tworzy w żądaniu trzy zmienne przepływu z wartościami statycznymi
  2. Dynamicznie pobiera zmienne przepływu w drugiej zasadzie w przepływie żądania
  3. 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:

  1. Dodaj zasady 1 i 2 do przepływu żądań. Pamiętaj, aby ustawić zasadę nr 1 przed zasadą nr 2.
  2. Dodaj trzecią zasadę do procesu odpowiedzi.
  3. 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”.

  4. 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 polecenie curl dodaj do żądania element -H "Content-Length: 0".

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"&gt;MyRequestObject&lt;/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 type („żądanie” lub „odpowiedź”). Jeśli nie podasz nazwy nowej zmiennej, zasada utworzy nowy obiekt żądania lub odpowiedzi na podstawie wartości type.

W przypadku wartości „false” (fałsz) zasada odpowiada na 2 sposoby:

  • Jeśli <AssignTo> może przypisać nazwę zmiennej do żądania lub odpowiedzi, kontynuuje przetwarzanie. Jeśli na przykład zasada jest w przepływie żądania, zmienna jest obiektem żądania. Jeśli zasada jest w odpowiedzi, zmienna jest obiektem odpowiedzi.
  • Jeśli nie można znaleźć atrybutu <AssignTo> lub przyjmuje on typ inny niż wiadomość, zasada zgłasza błąd.

Jeśli zasada createNew nie jest określona, zasada odpowiada na 2 sposoby:

  • Jeśli wyświetli się komunikat o błędzie <AssignTo>, przetwarzanie przejdzie do następnego kroku.
  • Jeśli nie można znaleźć zmiennej <AssignTo> lub przyjmuje ona typ inny niż wiadomość, tworzona jest nowa zmienna typu określonego w type.
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.

  • Jeśli source nie jest określony, jest on traktowany jako prosty komunikat. Jeśli na przykład zasada jest w trakcie przepływu żądań, domyślnym źródłem jest obiekt request. Jeśli zasada jest w przepływie odpowiedzi, domyślnie przyjmuje się obiekt response. Jeśli pominiesz właściwość source, jako źródła kopii możesz użyć bezwzględnego odwołania do zmiennej przepływu. Podaj np. wartość {request.header.user-agent}.
  • Jeśli nie można znaleźć zmiennej źródłowej lub przyjmuje ona typ inny niż komunikat, <Copy> nie odpowiada.
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 polecenie curl dodaj do żądania element -H "Content-Length: 0".

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ść contentType, do nagłówka HTTP Content-Type zostanie przypisana 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ływu user-agent, więc nie musisz określać atrybutu source na potrzeby elementu <Copy>.
    • Ustawia parametr zapytania address w wiadomości niestandardowej na wartość parametru zapytania addy przychodzącego żądania.
    • Ustawia czasownik HTTP na GET.
  • 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 source w elemencie <Copy> jest ustawiony na zmienną innego typu niż message.

Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Edge request, response i message mają typ komunikatu. Więcej informacji o zmiennych wiadomości znajdziesz w dokumentacji zmiennych.

steps.assignmessage.UnresolvedVariable 500

Ten błąd występuje, jeśli zmienna określona w zasadzie przypisywania wiadomości ma postać:

  • poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada)
  • lub
  • Nie można rozwiązać (nie określono)

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