Zasada przypisywania wiadomości

Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. info

Co

Zasady AssignMessage zmieniają lub tworzą nowe wiadomości z żądaniem i odpowiedzią w trakcie przepływu proxy interfejsu API. Zasady umożliwiają wykonanie tych działań w przypadku takich wiadomości:

  • Dodawanie nowych parametrów formularza, nagłówków lub parametrów zapytania do wiadomości
  • 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 istniejących właściwości w wiadomości

Za pomocą zasady AssignMessage możesz zwykle dodawać, zmieniać lub usuwać właściwości żądania lub odpowiedzi. Możesz jednak użyć zasady AssignMessage, aby utworzyć niestandardową wiadomość żądania lub odpowiedzi i przekazać ją do alternatywnego miejsca docelowego, jak opisano w artykule Tworzenie niestandardowych wiadomości żądania.

Zasady AssignMessage mogą tworzyć lub zmieniać zmienne przepływu za pomocą tych elementów podrzędnych:

Element <AssignMessage>

Definiuje zasadę AssignMessage.

Wartość domyślna Patrz karta Zasady domyślne poniżej.
Wymagany? Wymagane
Typ Obiekt złożony
Element nadrzędny nie dotyczy
Elementy podrzędne <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

Element <AssignMessage> ma tę składnię:

Składnia

Element <AssignMessage> ma tę składnię:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

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

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

Domyślne zasady

Poniższy przykład pokazuje domyślne ustawienia po dodaniu zasady AssignMessage do przepływu w interfejsie 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 nowe zasady AssignMessage w interfejsie Edge, szablon będzie zawierać szablony wszystkich możliwych operacji. Zazwyczaj wybierasz operacje, które chcesz wykonać w ramach tej zasady, i usuwasz pozostałe elementy podrzędne. Jeśli na przykład chcesz wykonać operację kopiowania, użyj elementu <Copy> i usuń z zasad elementy podrzędne <Add>, <Remove> i inne, 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 tabeli poniżej znajdziesz ogólny opis elementów podrzędnych elementu <AssignMessage>:

Element podrzędny Wymagany? Opis
Typowe operacje
<Add> Opcjonalny Dodaje informacje do obiektu wiadomości określonego przez element <AssignTo>.

<Add> dodaje do wiadomości nagłówki lub parametry, które nie występują w oryginalnej wiadomości; Aby zastąpić istniejące nagłówki lub parametry, użyj elementu <Set>.

<Copy> Opcjonalny Kopiuje informacje z wiadomości określonej przez atrybut source do obiektu wiadomości określonego przez element <AssignTo>.
<Remove> Opcjonalny Usuwa określone elementy ze zmiennej wiadomości podanej w elemencie <AssignTo>.
<Set> Opcjonalny Zastępuje wartości istniejących właściwości w żądaniu lub odpowiedzi określonych przez element <AssignTo>.

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

Inne elementy podrzędne
<AssignTo> Opcjonalny Określa, na której wiadomości działa zasada AssignMessage. Może to być standardowa prośba lub odpowiedź albo nowa, niestandardowa wiadomość.
<AssignVariable> Opcjonalny Przypisuje wartość do zmiennej przepływu. Jeśli zmienna nie istnieje, <AssignVariable> ją utworzy.
<IgnoreUnresolvedVariables> Opcjonalny Określa, czy przetwarzanie ma się zatrzymać po napotkaniu nierozwiązanej zmiennej.

Każdy z tych elementów podrzędnych jest opisany w dalszej części tego artykułu.

Przykłady

Poniższe przykłady pokazują, jak można używać zasady AssignMessage:

1. Dodaj nagłówek

W tym przykładzie do żądania dodawany jest nagłówek 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

Poniższy przykład usuwa ładunek z odpowiedzi za pomocą elementu <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. Zmodyfikuj odpowiedź

Poniższy 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>

Ten przykład nie tworzy nowej wiadomości. Zamiast tego modyfikuje istniejącą wiadomość z odpowiedzią, dodając nagłówek HTTP.

W tym przykładzie w elemencie <AssignTo> pominięto nazwę zmiennej, a w przypadku elementu type określono wartość „response”. W związku z tym ta zasada modyfikuje obiekt odpowiedzi zwracany przez serwer docelowy.

Nagłówek HTTP dodany do wiadomości z odpowiedzią przez tę zasadę pochodzi ze zmiennej wypełnionej przez zasadę LookupCache. Dlatego komunikat odpowiedzi zmodyfikowany przez tę zasadę przypisywania komunikatu zawiera nagłówek HTTP, który wskazuje, czy wyniki zostały pobrane z pamięci podręcznej. Ustawianie 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 osadzać dynamiczną treść w ładunku wiadomości z odpowiedzią i wiadomości z prośbą.

Aby osadzić zmienne przepływu Edge w ładunku XML, ujmij wyznaczoną zmienną w nawiasy klamrowe, np. {prefix.name}.

W tym przykładzie wartość zmiennej przepływu nagłówka HTTP user-agent jest osadzona 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 variablePrefixvariableSuffix ze znakami rozdzielającymi, jak pokazano w tym przykładzie:

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

Pełną listę zmiennych przepływu znajdziesz w dokumentacji zmiennych przepływu.

Od wersji 16.08.17 w chmurze możesz też używać nawiasów klamrowych do wstawiania zmiennych.

5. Usuń parametr zapytania

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>

Jeśli do uwierzytelniania użytkowników używasz zasady VerifyAPIKey, sprawdzoną metodą jest usunięcie z wiadomości żądania parametru zapytania apikey. Zapobiega to przekazywaniu poufnych informacji o kluczu do docelowego backendu.

6. Ustawianie i pobieranie zmiennych

W tym przykładzie użyto 3 zasad przypisywania wiadomości:

  1. Tworzy w żądaniu 3 zmienne przepływu o wartościach statycznych.
  2. Dynamiczne pobieranie zmiennych 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 pierwszych zasadach element <AssignVariable> tworzy i ustawia w żądaniu 3 zmienne. Każdy element <Name> określa nazwę zmiennej, a element <Value> określa wartość.

Druga zasada używa elementu <AssignVariable> do odczytywania wartości i tworzy 3 nowe zmienne:

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

W drugiej 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 do przepływu żądania zasady 1 i 2. Pamiętaj, aby umieścić zasadę 1 przed zasadą 2.
  2. Dodaj trzecią zasadę w ścieżce odpowiedzi.
  3. Trzecia zasada używa elementu <Set> do dodawania zmiennych do odpowiedzi. Poniższy przykład pokazuje, jak w odpowiedzi zwracanej przez Edge do klienta tworzony jest ładunek XML:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>

    Pamiętaj, że składnia dostępu do zmiennych przepływu w <Set> polega na umieszczeniu ich w nawiasach klamrowych.

    Upewnij się, że atrybut contentType elementu <Payload> ma wartość „application/xml”.

  4. Wyślij żądanie do serwera proxy interfejsu API, np.:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Opcjonalnie możesz przekazać wyniki do narzędzia takiego jak xmllint, aby wyświetlić XML w odpowiednio 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. Pobierz nagłówki odpowiedzi wywołania usługi

W tym przykładzie załóżmy, że w żądaniu serwera proxy interfejsu API znajduje się zasada ServiceCallout, a odpowiedź wywołania zawiera kilka nagłówków o tej samej nazwie (Set-Cookie). Zakładając, że zmienna odpowiedzi wywołania usługi ma wartość domyślną calloutResponse, ta zasada pobiera drugą wartość nagłówka Set-Cookie.

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Aby wyświetlić wszystkie wartości nagłówka, użyj tej zmiennej:

{calloutResponse.header.Set-Cookie.values}

Każdy element podrzędny w tym odwołaniu zawiera dodatkowe przykłady. Więcej przykładów znajdziesz w przykładzie AssignMessage w GitHubie.

Odwołanie do elementu podrzędnego

W tej sekcji opisujemy elementy podrzędne elementu <AssignMessage>.

<Add>

Dodaje informacje do żądania lub odpowiedzi, które są określone przez element <AssignTo>.

Element <Add> dodaje do wiadomości nowe właściwości, które nie występują w oryginalnej wiadomości. Aby zmienić wartości dotychczasowych właściwości, użyj elementu <Set>.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Typ złożony
Element nadrzędny <AssignMessage>
Elementy podrzędne <FormParams>
<Headers>
<QueryParams>

Element <Add> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Przykład 1

W tym przykładzie element <FormParams> służy do pobierania wartości 3 parametrów ciągu zapytania z początkowego żądania i ustawiania ich jako parametrów formularza w żądaniu punktu końcowego docelowego:

<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>, aby dodać nagłówek User-Agent do żądania punktu końcowego:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Przykład 3

W tym przykładzie element <QueryParams> służy do dodania do żądania pojedynczego parametru zapytania o wartości statycznej:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

W tym przykładzie w przepływie wstępnym żądania użyto <Add>. Jeśli sprawdzisz wyniki w narzędziu, takim jak narzędzie śledzenia, żądanie „http://httpbin.org/get” zmieni się w „http://httpbin.org/get?myParam=42”.

Elementy podrzędne <Add> obsługują dynamiczne zastępowanie ciągów znaków, czyli szablony wiadomości.

<FormParams> (element podrzędny <Add>)

Dodaje do wiadomości z prośbą nowe parametry formularza. Ten element nie ma wpływu na wiadomość z odpowiedzią.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <FormParam>
Element nadrzędny <Add>
Elementy podrzędne <FormParam>

Element <FormParams> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

Przykład 1

W tym przykładzie do żądania dodajemy jeden parametr formularza („answer”) i statyczną wartość („42”):

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

Przykład 2

W tym przykładzie pobierana jest wartość parametru ciągu zapytania name i dodawana do żądania jako parametr formularza:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

Pamiętaj, że w tym przykładzie nie określono celu za pomocą znaku <AssignTo>. Ta zasada dodaje do żądania tylko parametr.

Przykład 3

W tym przykładzie do żądania dodano kilka parametrów formularza:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

W tym przykładzie parametry ciągu zapytania są pobierane z pierwotnego żądania i dodawane jako parametry formularza do żądania wysyłanego do docelowego punktu końcowego.

Aby sprawdzić przepływ, możesz użyć narzędzia do śledzenia. Zauważysz, że treść żądania zawiera zakodowane na potrzeby adresu URL dane formularza, które pierwotnie były przekazywane jako parametry ciągu zapytania:

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

Możesz używać <FormParams> tylko wtedy, gdy spełnione są te kryteria:

  • Czasownik HTTP: POST
  • Typ wiadomości: żądanie
  • Jedną z tych wartości (lub obie):
    • Dane formularza: ustawione na jakąś wartość lub „” (pusty ciąg znaków). Na przykład w przypadku curl dodaj do prośby -d "".
    • Content-Length nagłówek: ustawiony na 0 (jeśli w pierwotnej prośbie nie ma danych; w przeciwnym razie bieżąca długość w bajtach). Na przykład w przypadku curl dodaj do prośby -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 ustawi nagłówek Content-Type żądania na „application/x-www-form-urlencoded” przed wysłaniem wiadomości do usługi docelowej.

<Headers> (element podrzędny <Add>)

Dodaje nowe nagłówki do określonego żądania lub odpowiedzi, które są określone przez element <AssignTo>.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <Header>
Element nadrzędny <Add>
Elementy podrzędne <Header>

Element <Headers> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

Przykład 1

W tym przykładzie do wiadomości żądania dodawany jest nagłówek user-agent, a do tego nagłówka przypisywana jest wartość zmiennej przepływu request.user.agent.

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (element podrzędny <Add>)

Dodaje do żądania nowe parametry zapytania. Ten element nie ma wpływu na odpowiedź.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <QueryParam>
Element nadrzędny <Add>
Elementy podrzędne <QueryParam>

Element <QueryParams> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Przykład 1

W tym przykładzie do żądania dodawany jest parametr zapytania „myParam”, któremu przypisywana jest wartość „42”:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Możesz używać <QueryParams> tylko wtedy, gdy spełnione są te kryteria:

  • Czasownik HTTP: GET
  • Typ wiadomości: żądanie

Parametry zapytania można też ustawić tylko wtedy, gdy atrybut type elementu <AssignTo> jest wiadomością żądania. Ustawienie ich w odpowiedzi nie ma żadnego wpływu.

Jeśli w zasadach zdefiniujesz pustą tablicę parametrów zapytania (<Add><QueryParams/></Add>), zasady nie dodadzą żadnych parametrów zapytania. Jest to równoznaczne z pominięciem <QueryParams>.

<AssignTo>

Określa, na jakim obiekcie działa zasada AssignMessage. Dostępne są te opcje:

  • Wiadomość z żądaniem: request odebrany przez serwer proxy interfejsu API.
  • Wiadomość z odpowiedzią: 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órym działa zasada AssignMessage. Nie możesz na przykład użyć <Add> ani <Set>, aby dodać lub zmienić parametry zapytania (<QueryParams>) lub parametry formularza (<FormParams>) w odpowiedzi. W przypadku żądania możesz modyfikować tylko parametry zapytania i parametry formularza.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Ciąg znaków
Element nadrzędny <AssignMessage>
Elementy podrzędne Brak

Jeśli nie określisz <AssignTo>, zasada będzie działać na domyślne żądanie lub odpowiedź, w zależności od tego, gdzie jest wykonywana. Jeśli zasada jest wykonywana w ramach przepływu żądania, ma wpływ na wiadomość z żądaniem. Jeśli zasada jest wykonywana w przepływie odpowiedzi, domyślnie wpływa na odpowiedź.

Element <AssignTo> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

Przykład 1

W przykładzie poniżej określono, że celem jest pierwotne żądanie, które zostanie wysłane do punktu końcowego:

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

Jeśli ustawisz wartość createNew na „false” (domyślnie), ten przykład nie utworzy nowego żądania. Wszystkie operacje w tej zasadzie mają wpływ na pierwotne żądanie.

Przykład 2

W tym przykładzie tworzymy nowy obiekt żądania:

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

Gdy tworzysz nowy obiekt żądania lub odpowiedzi, pozostałe elementy zasady AssignMessage (takie jak <Add>, <Set><Set>) działają na ten nowy obiekt żądania.

Później w procesie możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach lub wysłać go do usługi zewnętrznej za pomocą zasad ServiceCallout.

Przykład 3

Poniższy przykład tworzy nowy obiekt żądania o nazwie „MyRequestObject”:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

Gdy tworzysz nowy obiekt żądania lub odpowiedzi, pozostałe elementy zasady AssignMessage (takie jak <Add>, <Set><Set>) działają na ten nowy obiekt żądania.

Później w procesie możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach lub wysłać go do usługi zewnętrznej za pomocą zasad ServiceCallout.

W tabeli poniżej opisano atrybuty <AssignTo>:

Atrybut Opis Wymagany? Typ
createNew

Określa, czy ta zasada tworzy nową wiadomość podczas przypisywania wartości.

Jeśli wartość to „true”, zasada tworzy nową zmienną typu określonego przez parametr type („request” lub „response”). Jeśli nie określisz nazwy nowej zmiennej, zasady utworzą nowy obiekt żądania lub odpowiedzi na podstawie wartości type.

Jeśli wartość to „false”, zasady reagują na jeden z 2 sposobów:

  • Jeśli <AssignTo> może rozpoznać nazwę zmiennej jako żądanie lub odpowiedź, kontynuuje przetwarzanie. Jeśli np. zasada znajduje się w przepływie żądania, zmienną jest obiekt żądania. Jeśli zasada znajduje się w odpowiedzi, zmienną jest obiekt odpowiedzi.
  • Jeśli nie można rozpoznać wartości <AssignTo> lub jest ona innego typu niż wiadomość, zasady zwracają błąd.

Jeśli parametr createNew nie jest określony, zasada odpowiada na jeden z 2 sposobów:

  • Jeśli <AssignTo> prowadzi do wiadomości, przetwarzanie przechodzi do następnego kroku.
  • Jeśli <AssignTo> nie można rozpoznać lub rozpoznano go jako typ inny niż typ wiadomości, tworzona jest nowa zmienna typu określonego w type.
Opcjonalny Wartość logiczna
transport

Określa typ transportu dla typu wiadomości żądania lub odpowiedzi.

Wartość domyślna to „http” (jedyna obsługiwana wartość).

Opcjonalny Ciąg znaków
type Określa typ nowej wiadomości, gdy wartość parametru createNew to „true”. Prawidłowe wartości to „request” lub „response”.

Wartość domyślna to „request”. Jeśli pominiesz ten atrybut, Edge utworzy żądanie lub odpowiedź w zależności od tego, w którym miejscu przepływu wykonuje się ta zasada.

Opcjonalny Ciąg znaków

<AssignVariable>

Przypisuje wartość do zmiennej przepływu docelowego (np. zmiennej, której wartość jest ustawiana przez zasadę AssignMessage). Jeśli zmienna przepływu nie istnieje, <AssignVariable> ją utworzy.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Typ złożony
Element nadrzędny <AssignMessage>
Elementy podrzędne <Name> (wymagany)
<Ref>
<Template>
<Value>

Wartość przypisana do zmiennej przepływu docelowego może być jedną z tych wartości:

  • Ciąg dosłowny: użyj elementu podrzędnego <Value>, aby określić dosłowną wartość ciągu dla zmiennej przepływu miejsca docelowego.
  • Zmienna przepływu: użyj elementu podrzędnego <Ref>, aby określić wartość istniejącej zmiennej przepływu dla docelowej zmiennej przepływu. Pełną listę zmiennych przepływu, które mogą być używane jako źródło, znajdziesz w dokumentacji zmiennych przepływu.
  • Szablon wiadomości: użyj elementu podrzędnego <Template>, aby określić szablon wiadomości dla zmiennej przepływu docelowego.

Element <AssignVariable> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Użyj elementu <Ref>, aby określić zmienną źródłową. Jeśli zmienna, do której odwołuje się <Ref>, jest niedostępna, Edge używa wartości określonej przez element <Value>. Jeśli zdefiniujesz element <Template>, będzie on miał pierwszeństwo przed innymi elementami podrzędnymi.

Przykład 1

W tym przykładzie wartość nowej zmiennej myvar jest ustawiana na wartość literału „42”:

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

Przykład 2

W tym przykładzie wartość zmiennej przepływu request.header.user-agent jest przypisywana do zmiennej przepływu docelowego myvar, a wartość parametru zapytania country jest przypisywana 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órekolwiek przypisanie się nie powiedzie, Edge przypisze do zmiennej przepływu docelowego wartość „ErrorOnCopy”.

Jeśli zmienne przepływu myvar lub Country nie istnieją, <AssignVariable> je tworzy.

Przykład 3

W przykładzie poniżej użyto elementu podrzędnego <Template>, aby połączyć 2 zmienne kontekstowe z ciągiem znaków (łą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 <AssignVariable> jest ustawianie wartości domyślnej dla parametru zapytania, nagłówka lub innej wartości, która może być przekazywana w żądaniu. Możesz to zrobić za pomocą elementów podrzędnych <Ref><Value>. Więcej informacji znajdziesz w przykładach dotyczących <Ref>.

<Name> (element podrzędny <AssignVariable>)

Określa nazwę zmiennej przepływu docelowego (np. zmiennej, której wartość jest ustawiana przez zasadę AssignMessage). Jeśli zmienna o nazwie podanej w <AssignVariable> nie istnieje, zasady utworzą zmienną o tej nazwie.

Wartość domyślna nie dotyczy
Wymagany? Wymagane
Typ Ciąg znaków
Element nadrzędny <AssignVariable>
Elementy podrzędne Brak

Element <Name> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

Przykład 1

W tym przykładzie zmienna docelowa to myvar, a jej wartość to „42”:

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

Jeśli myvar nie istnieje, <AssignVariable> go utworzy.

<Ref> (element podrzędny <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 (wymienionych w dokumentacji zmiennych przepływu) lub utworzoną przez Ciebie niestandardową zmienną przepływu.

Wartość <Ref> jest zawsze interpretowana jako zmienna przepływu. Nie możesz podać literału ciągu znaków jako wartości. Aby przypisać wartość w formie ciągu znaków, użyj elementu <Value>.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Ciąg znaków
Element nadrzędny <AssignVariable>
Elementy podrzędne Brak

Gdy określasz zmienną przepływu za pomocą <Ref>, pomiń nawiasy klamrowe „{}”, których zwykle używasz do odwoływania się do zmiennej przepływu. Aby na przykład ustawić wartość nowej zmiennej na wartość zmiennej client.host flow:

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

Aby zdefiniować domyślną wartość zmiennej przepływu miejsca docelowego, użyj <Value> w połączeniu z <Ref>. Jeśli zmienna przepływu określona przez <Ref> nie istnieje, nie można jej odczytać lub ma wartość null, Edge przypisuje do docelowej zmiennej przepływu wartość <Value>.

Element <Ref> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

Przykład 1

W tym przykładzie wartość zmiennej przepływu request.header.user-agent jest przypisywana do zmiennej przepływu docelowego myvar, a wartość parametru zapytania country jest przypisywana 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 w przypadku żadnego przypisania nie określono domyślnej wartości (ani wartości rezerwowej).

Przykład 2

W tym przykładzie wartość zmiennej przepływu request.header.user-agent jest przypisywana do zmiennej przepływu docelowego myvar, a wartość parametru zapytania country jest przypisywana 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>

W tym przykładzie, jeśli wartości zmiennej przepływu request.header.user-agent lub parametru zapytania Country są puste, nieczytelne lub nieprawidłowe, Edge przypisuje nowym zmiennym wartość „ErrorOnCopy”.

Przykład 3

Typowym zastosowaniem funkcji <AssignVariable> jest ustawianie wartości domyślnej parametru zapytania, nagłówka lub innej wartości, którą można przekazać w żądaniu. Na przykład tworzysz serwer proxy interfejsu Weather API, w którym żądanie przyjmuje jeden parametr zapytania o nazwie „w”. Ten parametr zawiera identyfikator miasta, dla którego chcesz uzyskać informacje o pogodzie. Adres URL żądania ma postać:

http://myCO.com/v1/weather/forecastrss?w=city_ID

Aby zdefiniować wartość domyślną dla 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 zmienna <AssignVariable> otrzymuje wartość zmiennej request.queryparam.w i przypisuje ją do siebie. Jeśli zmienna przepływu ma wartość null, co oznacza, że parametr zapytania „w” został pominięty w żądaniu, w tym przykładzie używana jest wartość domyślna z elementu <Value>. Dlatego możesz wysłać żądanie do tego serwera proxy interfejsu API, które pomija parametr zapytania „w”:

http://myCO.com/v1/weather/forecastrss

...i nadal zwracać prawidłowy wynik.

W przeciwieństwie do użycia <Value> wartość <Ref> musi być zmienną przepływu, np. właściwością obiektu request, response lub target. Wartość może być też utworzoną przez Ciebie zmienną niestandardową w przepływie.

Jeśli określisz zmienną przepływu, która nie istnieje dla wartości <Ref>, a wartość <IgnoreUnresolvedVariables> to „true”, Edge zgłosi błąd.

<Template> (element podrzędny <AssignVariable>)

Określa szablon wiadomości. Szablon wiadomości umożliwia zastępowanie ciągów znaków zmiennymi podczas wykonywania zasad i może łączyć ciągi znaków z nazwami zmiennych ujętymi w nawiasy klamrowe. Dodatkowo szablony wiadomości obsługują funkcje, takie jak znak ucieczki i zmiana wielkości liter.

Użyj atrybutu ref, aby określić zmienną przepływu, w której wartość zmiennej jest szablonem wiadomości. Możesz na przykład zapisać szablon wiadomości jako atrybut niestandardowy w aplikacji dewelopera. Gdy Edge zidentyfikuje aplikację dewelopera po zweryfikowaniu klucza interfejsu API lub tokena zabezpieczającego (za pomocą dodatkowych zasad), element <AssignVariable> może użyć szablonu wiadomości z atrybutu niestandardowego aplikacji, który jest dostępny jako zmienna przepływu w zasadach bezpieczeństwa. W tym przykładzie założono, że szablon wiadomości jest dostępny w atrybucie klienta o nazwie message_template w aplikacji dewelopera, która wywołuje interfejs API. Do weryfikacji klucza interfejsu API aplikacji użyto zasady VerifyAPIKey:

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Ciąg znaków
Element nadrzędny <AssignVariable>
Elementy podrzędne Brak

Element <Template> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

Przykład 1

W przykładzie poniżej użyto składni szablonu wiadomości, aby połączyć 2 zmienne kontekstowe z ciągiem literalnym (łącznikiem) między nimi:

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Przykład 2

W tym przykładzie określono zmienną przepływu, której wartością jest wstępnie zdefiniowany szablon wiadomości. Użyj tej opcji, jeśli chcesz wstawić wstępnie zdefiniowany szablon w czasie działania 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 tym przykładzie określono zmienną przepływu i wartość tekstową. W takim przypadku, jeśli zmienna, do której się odwołujesz, nie ma wartości null, jest ona używana jako szablon. Jeśli odwołująca się wartość jest pusta, jako szablon używana jest wartość tekstowa (w tym przypadku {system.uuid}-{messageid}). Ten wzorzec przydaje się do podawania wartości „zastępującej”, gdy w niektórych przypadkach chcesz zastąpić domyślny szablon (część tekstową) wartościami ustawianymi dynamicznie. Na przykład instrukcja warunkowa może pobrać wartość z mapy par klucz-wartość i ustawić zmienną, do której się odwołuje, na 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> (element podrzędny <AssignVariable>)

Określa wartość zmiennej przepływu miejsca docelowego ustawionej za pomocą <AssignVariable>. Wartość jest zawsze interpretowana jako ciąg dosłowny. Nie możesz używać zmiennej przepływu jako wartości, nawet jeśli umieścisz ją w nawiasach klamrowych („{}”). Aby użyć zmiennej przepływu, użyj <Ref>.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Ciąg znaków
Element nadrzędny <AssignVariable>
Elementy podrzędne Brak

W połączeniu z elementem <Ref> element <Value> działa jako wartość domyślna (lub zastępcza). Jeśli parametr <Ref> nie jest określony, nie można go rozpoznać lub ma wartość null, używana jest wartość parametru <Value>.

Element <Value> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Przykład 1

W tym przykładzie ustawiamy wartość zmiennej przepływu miejsca docelowego myvar 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 wartość zmiennej przepływu request.header.user-agent jest przypisywana do zmiennej przepływu myvar, a wartość parametru zapytania country jest przypisywana 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órekolwiek przypisanie się nie powiedzie, funkcja <AssignVariable> przypisze do zmiennej przepływu docelowego wartość „ErrorOnCopy”.

<Copy>

Kopiuje wartości z wiadomości określonej przez atrybut source do wiadomości określonej przez element <AssignTo>. Jeśli nie określisz celu za pomocą <AssignTo>, ta zasada skopiuje wartości do żądania lub odpowiedzi w zależności od tego, w którym miejscu przepływu jest wykonywana.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Ciąg znaków
Element nadrzędny <AssignMessage>
Elementy podrzędne <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

Element <Copy> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

Przykład 1

W tym przykładzie kopiujemy nagłówek, 3 parametry formularza, ścieżkę i wszystkie parametry zapytania z żądania do nowego, niestandardowego żądania:

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Element <Copy> ma te atrybuty:

Atrybut Opis Wymagany? Typ
źródło

Określa obiekt źródłowy kopii.

  • Jeśli nie podasz wartości source, zostanie ona potraktowana jako zwykła wiadomość. Jeśli na przykład zasada znajduje się w przepływie żądania, źródłem domyślnie jest obiekt request. Jeśli zasada jest w przepływie odpowiedzi, domyślnie jest to obiekt response. Jeśli pominiesz source, możesz użyć bezwzględnego odwołania do zmiennej przepływu jako źródła kopii. Na przykład określ wartość jako {request.header.user-agent}.
  • Jeśli zmienna źródłowa nie może zostać rozpoznana lub zostanie rozpoznana jako typ inny niż wiadomość, <Copy> nie odpowie.
Opcjonalny Ciąg znaków

<FormParams> (element podrzędny <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? Opcjonalny
Typ Tablica elementów <FormParam> lub pusta tablica
Element nadrzędny <Copy>
Elementy podrzędne <FormParam>

Element <FormParams> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

Przykład 1

W tym przykładzie pojedynczy parametr formularza z żądania jest kopiowany do żądania niestandardowego „MyCustomRequest”:

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Przykład 2

W tym przykładzie wszystkie parametry formularza są kopiowane do żądania niestandardowego „MyCustomRequest”:

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Przykład 3

W tym przykładzie do niestandardowego żądania „MyCustomRequest” kopiowane są 3 parametry formularza:

<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 kopiowane są wartości „f1”, „f2” i druga wartość „f3”. Jeśli parametr „f3” ma tylko jedną wartość, nie jest kopiowany.

Możesz używać <FormParams> tylko wtedy, gdy spełnione są te kryteria:

  • Czasownik HTTP: POST
  • Typ wiadomości: odpowiedź
  • Jedną z tych wartości (lub obie):
    • Dane formularza: ustawione na jakąś wartość lub „” (pusty ciąg znaków). Na przykład w przypadku curl dodaj do prośby -d "".
    • Nagłówek Content-Length: ustaw na 0 (jeśli w pierwotnej prośbie nie ma danych; w przeciwnym razie ustaw na bieżącą długość). Na przykład w przypadku curl dodaj do prośby -H "Content-Length: 0".

Gdy skopiujesz <FormParams>, <Copy> ustawi Content-Type wiadomości na „application/x-www-form-urlencoded” przed wysłaniem wiadomości do usługi docelowej.

<Headers> (element podrzędny <Copy>)

Kopiuje nagłówki HTTP z wiadomości żądania lub odpowiedzi określonej przez atrybut source elementu <Copy> do wiadomości żądania lub odpowiedzi określonej przez element <AssignTo>.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <Header> lub pusta tablica
Element nadrzędny <Copy>
Elementy podrzędne <Header>

Element <Headers> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

Przykład 1

W tym przykładzie nagłówek user-agent z żądania jest kopiowany do nowego, niestandardowego obiektu żądania:

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Przykład 2

Aby skopiować wszystkie nagłówki, użyj pustego elementu <Headers>, jak w tym przykładzie:

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Przykład 3

Jeśli istnieje kilka nagłówków o tej samej nazwie, użyj tej składni:

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

W tym przykładzie kopiowane są elementy „h1”, „h2” i druga wartość elementu „h3”. Jeśli element „h3” ma tylko jedną wartość, nie jest ona kopiowana.

<Path> (element podrzędny <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 wartość to „true”, ta zasada kopiuje ścieżkę z wiadomości z żądaniem określonej przez atrybut source elementu <Copy> do wiadomości z żądaniem określonej przez element <AssignTo>.

Wartość domyślna Fałsz
Wymagany? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <Copy>
Elementy podrzędne Brak

Element <Path> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

Przykład 1

Poniższy przykład pokazuje, ż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>

Możesz używać <Path> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: żądanie

<Payload> (element podrzędny <Copy>)

Określa, czy ładunek ma zostać skopiowany ze źródła do miejsca docelowego. Źródłem i miejscem docelowym mogą być żądania lub odpowiedzi.

Jeśli wartość to „true”, ta zasada kopiuje ładunek z wiadomości określonej przez atrybut source elementu <Copy> do wiadomości określonej przez element <AssignTo>.

Wartość domyślna Fałsz
Wymagany? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <Copy>
Elementy podrzędne Brak

Element <Payload> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

Przykład 1

W tym przykładzie ustawiamy wartość <Payload> na „true”, 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> (element podrzędny <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? Opcjonalny
Typ Tablica elementów <QueryParam> lub pusta tablica
Element nadrzędny <QueryParam>
Elementy podrzędne Brak

Element <QueryParams> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

Przykład 1

W tym przykładzie parametr zapytania „my_param” z żądania jest kopiowany 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

W tym przykładzie wszystkie parametry zapytania z żądania są kopiowane do nowego, niestandardowego obiektu żądania:

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Przykład 3

Jeśli jest kilka parametrów zapytania o tej samej nazwie, użyj tej składni:

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

W tym przykładzie kopiowane są parametry „qp1”, „qp2” i druga wartość parametru „qp3”. Jeśli parametr „qp3” ma tylko jedną wartość, nie jest kopiowany.

Możesz używać <QueryParams> tylko wtedy, gdy spełnione są te kryteria:

  • Czasownik HTTP: GET
  • Typ wiadomości: żądanie

<ReasonPhrase> (element podrzędny <Copy>)

Określa, czy fraza przyczyny powinna zostać skopiowana z odpowiedzi źródłowej do odpowiedzi docelowej. Ten element nie ma wpływu na żądanie.

Jeśli wartość to „true”, 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? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <Copy>
Elementy podrzędne Brak

Element <ReasonPhrase> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

Przykład 1

W tym przykładzie wartość <ReasonPhrase> jest ustawiona na „true”, co powoduje, że <Copy> kopiuje frazę 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>

Możesz używać <ReasonPhrase> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: odpowiedź

<StatusCode> (element podrzędny <Copy>)

Określa, czy kod stanu jest kopiowany z odpowiedzi źródłowej do odpowiedzi docelowej. Ten element nie ma wpływu na żądanie.

Jeśli wartość to „true”, ta zasada kopiuje kod stanu z wiadomości z odpowiedzią określonej przez atrybut source elementu <Copy> do wiadomości z odpowiedzią określonej przez element <AssignTo>.

Wartość domyślna Fałsz
Wymagany? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <Copy>
Elementy podrzędne Brak

Element <StatusCode> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

Przykład 1

W tym przykładzie wartość parametru <StatusCode> jest ustawiona na „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>

Możesz używać <StatusCode> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: odpowiedź

Częstym zastosowaniem <StatusCode> jest zapewnienie, że odpowiedź serwera proxy ma taki sam stan jak odpowiedź otrzymana z usługi docelowej, gdy atrybut createNew<AssignTo> jest ustawiony na „true”.

<Verb> (element podrzędny <Copy>)

Określa, czy czasownik HTTP jest kopiowany z żądania źródłowego do żądania docelowego. Ten element nie ma wpływu na odpowiedź.

Jeśli ma wartość „true”, kopiuje czasownik znaleziony w atrybucie source elementu <Copy> do żądania określonego w elemencie <AssignTo>.

Wartość domyślna Fałsz
Wymagany? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <Copy>
Elementy podrzędne Brak

Element <Verb> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

Przykład 1

W tym przykładzie wartość <Verb> jest ustawiona na „true”, co powoduje skopiowanie czasownika z domyślnego żądania do nowego żądania niestandardowego:

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Możesz używać <Verb> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: żądanie

<Version> (element podrzędny <Copy>)

Określa, czy wersja HTTP jest kopiowana z żądania źródłowego do żądania docelowego. Ten element nie ma wpływu na odpowiedź.

Jeśli wartość to „true”, kopiuje wersję HTTP znalezioną w atrybucie source elementu <Copy> do obiektu określonego przez element <AssignTo>.

Wartość domyślna Fałsz
Wymagany? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <Copy>
Elementy podrzędne Brak

Element <Version> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

Przykład 1

W tym przykładzie ustawiamy wartość <Version> na „true” w żądaniu, co powoduje skopiowanie wersji z domyślnego obiektu żądania do nowego, niestandardowego obiektu żądania:

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Możesz używać <Version> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: żądanie

<DisplayName>

Oprócz atrybutu name możesz użyć innej, bardziej naturalnie brzmiącej nazwy do oznaczenia zasady w edytorze proxy w interfejsie zarządzania.

Element <DisplayName> jest wspólny dla wszystkich zasad.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalnie. Jeśli pominiesz parametr <DisplayName>, zostanie użyta wartość atrybutu name zasady.
Typ Ciąg znaków
Element nadrzędny <PolicyElement>
Elementy podrzędne Brak

Element <DisplayName> używa tej składni:

Składnia

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

Przykład

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

Element <DisplayName> nie ma atrybutów ani elementów podrzędnych.

<IgnoreUnresolvedVariables>

Określa, czy przetwarzanie ma się zatrzymać po napotkaniu nierozwiązanej zmiennej.

Wartość domyślna Fałsz
Wymagany? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <AssignMessage>
Elementy podrzędne Brak

Ustaw na true, aby zignorować nierozwiązane zmienne i kontynuować przetwarzanie; w przeciwnym razie false. Wartością domyślną jest false.

Ustawienie <IgnoreUnresolvedVariables> na true różni się od ustawienia continueOnError na true w przypadku <AssignMessage>, ponieważ dotyczy konkretnie ustawiania i pobierania wartości zmiennych. Jeśli ustawisz wartość continueOnError na true, Edge zignoruje wszystkie błędy, a nie tylko te, które wystąpiły podczas korzystania ze zmiennych.

Element <IgnoreUnresolvedVariables> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

Przykład 1

W tym przykładzie wartość parametru <IgnoreUnresolvedVariables> jest ustawiona na „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 być prośbą lub odpowiedzią. Określasz, na którą wiadomość <Remove> ma wpływ, za pomocą elementu <AssignTo>.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Typ złożony
Element nadrzędny <AssignMessage>
Elementy podrzędne <FormParams>
<Headers>
<Payload>
<QueryParams>

Typowym zastosowaniem <Remove> jest usuwanie z obiektu żądania przychodzącego parametru zapytania, który zawiera informacje poufne, aby uniknąć przekazywania go na serwer backendu.

Element <Remove> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Przykład 1

Poniższy 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 przypadku przepływu odpowiedzi ta zasada usuwa treść odpowiedzi i zwraca do klienta tylko nagłówki HTTP.

Przykład 2

W tym przykładzie z przychodzącego żądania usuwane są wszystkie parametry formularza i parametr zapytania:

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<FormParams> (element podrzędny <Remove>)

Usuwa z żądania określone parametry formularza. Ten element nie ma wpływu na odpowiedź.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <FormParam> lub pusta tablica
Element nadrzędny <Remove>
Elementy podrzędne <FormParam>

Element <FormParams> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

Przykład 1

W tym przykładzie z żądania usuwane są 3 parametry formularza:

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Przykład 2

W tym przykładzie z żądania usuwane są 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>

W tym przykładzie usuwane są wartości „f1”, „f2” i druga wartość „f3”. Jeśli parametr „f3” ma tylko jedną wartość, nie jest usuwany.

Możesz używać <FormParams> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: żądanie
  • Content-Type: "application/x-www-form-urlencoded"

<Headers> (element podrzędny <Remove>)

Usuwa z żądania lub odpowiedzi określone nagłówki HTTP, które są określone przez element <AssignTo>.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <Header> lub pusta tablica
Element nadrzędny <Remove>
Elementy podrzędne <Header>

Element <Headers> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

Przykład 1

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

W tym przykładzie z żądania usuwane są wszystkie nagłówki:

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Przykład 3

Jeśli istnieje kilka nagłówków o tej samej nazwie, użyj tej składni:

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

W tym przykładzie z żądania usuwane są elementy „h1”, „h2” i druga wartość „h3”. Jeśli element „h3” ma tylko jedną wartość, nie jest usuwany.

<Payload> (element podrzędny <Remove>)

Określa, czy <Remove> usuwa ładunek w żądaniu lub odpowiedzi, który jest określony przez element <AssignTo>. Wpisz „true”, aby wyczyścić ładunek, lub „false”, aby tego nie robić. Wartość domyślna to „false”.

Wartość domyślna Fałsz
Wymagany? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <Remove>
Elementy podrzędne Brak

Element <Payload> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

Przykład 1

W tym przykładzie wartość parametru <Payload> jest ustawiona na „true”, aby wyczyścić ładunek żądania:

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (element podrzędny <Remove>)

Usuwa z żądania określone parametry zapytania. Ten element nie ma wpływu na odpowiedź.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <QueryParam> lub pusta tablica
Element nadrzędny <Remove>
Elementy podrzędne <QueryParam>

Element <QueryParams> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Przykład 1

W tym przykładzie z żądania usuwany jest jeden 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

W tym przykładzie z żądania usuwane są wszystkie parametry zapytania:

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Przykład 3

Jeśli jest kilka parametrów zapytania o tej samej nazwie, użyj tej składni:

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

W tym przykładzie z żądania usuwane są parametry „qp1”, „qp2” i druga wartość parametru „qp3”. Jeśli parametr „qp3” ma tylko jedną wartość, nie jest usuwany.

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>

Możesz używać <QueryParams> tylko wtedy, gdy spełnione są te kryteria:

  • Czasownik HTTP: GET
  • Typ wiadomości: żądanie

<Set>

Ustawia informacje w wiadomości żądania lub odpowiedzi, które są określone przez element <AssignTo>. <Set> zastępuje nagłówki lub parametry, które już istnieją w oryginalnej wiadomości. Aby utworzyć nowy nagłówek lub parametr, użyj elementu <Add>.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Typ złożony
Element nadrzędny <AssignMessage>
Elementy podrzędne <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

Element <Set> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Przykład 1

Poniższy przykład pokazuje element <Set>:

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<FormParams> (element podrzędny <Set>)

Zastępuje istniejące parametry formularza w żądaniu nowymi wartościami określonymi w tym elemencie. Ten element nie ma wpływu na odpowiedź.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <FormParam>
Element nadrzędny <Set>
Elementy podrzędne <FormParam>

Element <FormParams> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

Przykład 1

W tym przykładzie parametr formularza o nazwie „myparam” ma wartość zmiennej request.header.myparam w nowym żądaniu niestandardowym:

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Możesz używać <FormParams> tylko wtedy, gdy spełnione są te kryteria:

  • Czasownik HTTP: POST
  • Typ wiadomości: żądanie

Jeśli w zasadach zdefiniujesz puste parametry formularza (<Add><FormParams/></Add>), zasady nie dodadzą żadnych parametrów formularza. Jest to równoznaczne z pominięciem <FormParams>.

<Set> zmienia Content-Type wiadomości na „application/x-www-form-urlencoded” przed wysłaniem jej do docelowego punktu końcowego.

<Headers> (element podrzędny <Set>)

Zastępuje istniejące nagłówki HTTP w żądaniu lub odpowiedzi, co jest określone przez element <AssignTo>.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <Header>
Element nadrzędny <Set>
Elementy podrzędne <Header>

Element <Headers> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

Przykład 1

W tym przykładzie nagłówek user-agent jest ustawiony 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 w zasadach zdefiniujesz puste nagłówki (<Add><Headers/></Add>), zasady nie dodadzą żadnych nagłówków. Jest to równoznaczne z pominięciem <Headers>.

<Path> (element podrzędny <Set>)

<Payload> (element podrzędny <Set>)

Definiuje treść wiadomości w przypadku żądania lub odpowiedzi, która jest określona przez element <AssignTo>. Ładunek może mieć dowolny prawidłowy typ treści, np. zwykły tekst, JSON lub XML.

Wartość domyślna pusty ciąg
Wymagany? Opcjonalny
Typ Ciąg znaków
Element nadrzędny <Set>
Elementy podrzędne Brak

Element <Payload> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

Przykład 1

W tym przykładzie ustawiamy ładunek w formie zwykłego tekstu:

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

Przykład 2

Poniższy 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 przykładzie poniżej wartości zmiennych są wstawiane do ładunku przez umieszczenie nazw zmiennych w nawiasach klamrowych:

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

W starszych wersjach Apigee Edge – na przykład przed wersją 16.08.17 w chmurze – nie można było używać nawiasów klamrowych do oznaczania odwołań do zmiennych w ładunkach JSON. W tych wersjach do określania znaków rozdzielających i otaczania nimi nazw zmiennych trzeba było używać atrybutów variablePrefixvariableSuffix, np.:

<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ść <Payload> jest traktowana jako szablon wiadomości. Oznacza to, że zasada AssignMessage zastępuje zmienne ujęte w nawiasy klamrowe wartościami zmiennych, do których się odwołuje, w czasie działania.

W przykładzie poniżej użyto składni nawiasów klamrowych, aby ustawić część ładunku na wartość zmiennej:

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

W tabeli poniżej opisano atrybuty <Payload>:

Atrybut Opis Obecność Typ
contentType

Jeśli jest określona, wartość contentType jest przypisywana do nagłówka HTTP Content-Type.

Opcjonalny Ciąg znaków
variablePrefix Opcjonalnie określa ogranicznik początkowy w zmiennej przepływu. Wartość domyślna to „{”. Więcej informacji znajdziesz w dokumentacji zmiennych przepływu. Opcjonalny Char
variableSuffix Opcjonalnie określa ogranicznik końcowy w zmiennej przepływu. Domyślnie jest to „}”. Więcej informacji znajdziesz w materiałach referencyjnych dotyczących zmiennych przepływu. Opcjonalny Char

<QueryParams> (element podrzędny <Set>)

Zastępuje dotychczasowe parametry zapytania w żądaniu nowymi wartościami. Ten element nie ma wpływu na odpowiedź.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Tablica elementów <QueryParam>
Element nadrzędny <Set>
Elementy podrzędne <QueryParam>

Element <QueryParams> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

Przykład 1

W tym przykładzie parametr zapytania „address” jest ustawiony 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>

Możesz używać <QueryParams> tylko wtedy, gdy spełnione są te kryteria:

  • Czasownik HTTP: GET
  • Typ wiadomości: żądanie

Jeśli w zasadach zdefiniujesz puste parametry zapytania (<Set><QueryParams/></Set>), zasady nie ustawią żadnych parametrów zapytania. Jest to równoznaczne z pominięciem <QueryParams>.

<ReasonPhrase> (element podrzędny <Set>)

Ustawia w odpowiedzi frazę przyczyny. Zwykle robi się to w celu debugowania w połączeniu z <StatusCode>. Ten element nie ma wpływu na żądanie.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Ciąg znaków
Element nadrzędny <Set>
Elementy podrzędne Brak

Element <ReasonPhrase> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

Przykład 1

W tym przykładzie zdefiniowano prosty tekst uzasadnienia:

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Przykład 2

Treść <ReasonPhrase> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe zostanie w czasie działania programu zastąpiona wartością zmiennej, do której się odwołuje, jak pokazano w tym przykładzie:

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Możesz używać <ReasonPhrase> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: odpowiedź

<StatusCode> (element podrzędny <Set>)

Ustawia kod stanu w odpowiedzi. Ten element nie ma wpływu na żądanie.

Wartość domyślna „200” (gdy atrybut createNew elementu <AssignTo> ma wartość „true”)
Wymagany? Opcjonalny
Typ Ciąg znaków lub variable
Element nadrzędny <Set>
Elementy podrzędne Brak

Element <StatusCode> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

Przykład 1

W tym przykładzie ustawiamy 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ść <StatusCode> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe zostanie w czasie działania programu zastąpiona wartością zmiennej, do której się odwołuje, 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>

Możesz używać <StatusCode> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: odpowiedź

<Verb> (element podrzędny <Set>)

Ustawia czasownik HTTP w żądaniu. Ten element nie ma wpływu na odpowiedź.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Ciąg znaków lub variable
Element nadrzędny <Set>
Elementy podrzędne Brak

Element <Verb> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

Przykład 1

W tym przykładzie w żądaniu ustawiono proste czasowniki:

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Przykład 2

Treść <Verb> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe zostanie w czasie działania programu zastąpiona wartością zmiennej, do której się odwołuje.

W przykładzie poniżej użyto zmiennej do wypełnienia czasownika:

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Możesz używać <Verb> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: żądanie

<Version> (element podrzędny <Set>)

Ustawia wersję HTTP w żądaniu. Ten element nie ma wpływu na odpowiedź.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Ciąg znaków lub variable
Element nadrzędny <Set>
Elementy podrzędne Brak

Element <Version> ma tę składnię:

Składnia

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Przykład 1

W tym przykładzie numer wersji jest ustawiony na „1.1”:

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Przykład 2

W przykładzie poniżej 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ść <Version> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe zostanie w czasie działania programu zastąpiona wartością zmiennej, do której się odwołuje.

Możesz używać <Version> tylko wtedy, gdy spełnione są te kryteria:

  • Typ wiadomości: żądanie

Tworzenie niestandardowych wiadomości z prośbą

Za pomocą zasady AssignMessage możesz utworzyć niestandardową wiadomość z prośbą. Po utworzeniu niestandardowego żądania możesz go używać w ten sposób:

  • uzyskiwać dostęp do jego zmiennych w innych zasadach,
  • przekazać go do usługi zewnętrznej,

Aby utworzyć niestandardową wiadomość z prośbą, użyj elementu <AssignTo> w zasadach AssignMessage. Ustaw wartość createNew na „true” i określ nazwę nowej wiadomości w treści elementu, jak pokazano w tym przykładzie:

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

Domyślnie Edge nie wykonuje żadnych działań związanych z niestandardową wiadomością z prośbą o zgodę. Po utworzeniu odpowiedzi Edge będzie kontynuować proces z pierwotnym żądaniem. Aby użyć niestandardowego żądania, dodaj do serwera proxy zasadę, np. ServiceCallout, która może przekazywać niestandardowe żądanie do usługi zewnętrznej.

W tych przykładach tworzymy niestandardowe wiadomości z prośbą:

Przykład 1

W tym przykładzie tworzymy niestandardowy obiekt żą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>

Przykład:

  • Tworzy nowy obiekt wiadomości z prośbą o nazwie „MyCustomRequest”.
  • W przypadku MyCustomRequest ta zasada:
    • Kopiuje wartość nagłówka HTTP user-agent z przychodzącego żądania do nowej wiadomości. Ponieważ <Copy> używa odwołania bezwzględnego do zmiennej przepływu user-agent, nie musisz określać atrybutu source w <Copy>.
    • Ustawia parametr zapytania address w wiadomości niestandardowej na wartość parametru zapytania addy w przychodzącym żądaniu.
    • Ustawia czasownik HTTP na GET.
  • Ustawia wartość <IgnoreUnresolvedVariables> na „false”. Gdy wartość <IgnoreUnresolvedVariables> to „false”, jeśli jedna ze zmiennych, którą zasada 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 AssignMessage:

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

W tym przykładzie tworzymy nowe żądanie niestandardowe o nazwie „partner.request”. Następnie ustawia w nowym żądaniu parametry <Verb><Payload>.

Możesz uzyskać dostęp do niestandardowej wiadomości z prośbą w innej zasadzie AssignMessage, która występuje później w przepływie. Poniższy przykład pokazuje, jak uzyskać wartość nagłówka user-agent niestandardowego komunikatu żą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

Aby dowiedzieć się więcej o zasadach AssignMessage, obejrzyj te filmy.

Wideo Opis
Dlaczego warto przypisać zasady wiadomości? Dowiedz się więcej o zaletach korzystania z zasady AssignMessage do modyfikowania żądania lub odpowiedzi interfejsu API bez modyfikowania kodu backendu.
Kopiowanie elementów interfejsu API za pomocą zasady AssignMessage Kopiuj elementy z żądania lub odpowiedzi interfejsu API i twó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 on do docelowego backendu, za pomocą zasady AssignMessage.
Dodawanie i konfigurowanie elementów interfejsu API za pomocą zasady AssignMessage Zmień żądanie lub odpowiedź interfejsu API, dodając parametry zapytania, nagłówki, parametry formularza lub ładunki za pomocą zasady AssignMessage.
Tworzenie zmiennych niestandardowych za pomocą zasady AssignMessage Ustaw niestandardowe zmienne przepływu za pomocą zasady AssignMessage i wykorzystaj je w innych zasadach w proxy interfejsu API.
Tworzenie nowych obiektów żądań lub odpowiedzi za pomocą zasady AssignMessage Twórz nowe obiekty żądań lub odpowiedzi interfejsu API za pomocą zasady AssignMessage w czasie działania interfejsu API.
Tworzenie interfejsu API do testów za pomocą zasady AssignMessage Utwórz prosty interfejs API REST, dodając zasadę AssignMessage w przepływie odpowiedzi.
Ustawianie lub modyfikowanie ładunku za pomocą zasady AssignMessage Przekształć żądanie REST w żądanie SOAP, ustawiając ładunek SOAP za pomocą zasady AssignMessage w czasie działania interfejsu API.

Kody błędów

W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami

Błędy w czasie wykonywania

Te błędy mogą wystąpić podczas wykonywania zasady.

Kod błędu Stan HTTP Przyczyna Napraw
steps.assignmessage.SetVariableFailed 500 Zasada nie mogła ustawić zmiennej. Zobacz ciąg błędu dla nazwy nierozwiązane.
steps.assignmessage.VariableOfNonMsgType 500

Ten błąd występuje, jeśli atrybut source w elemencie <Copy> jest ustawiony na zmienną który nie jest typu wiadomość.

Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowana aplikacja Edge Zmienne przepływu request, response i message są typem komunikatu. Aby dowiedzieć się więcej, 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 to:

  • poza zakresem (niedostępne w ramach konkretnego procesu, w którym są realizowane zasady)
  • lub
  • nie można rozwiązać (nie jest zdefiniowany)

Błędy wdrażania

Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego tę zasadę.

Nazwa błędu Przyczyna Napraw
InvalidIndex Jeśli indeks określony w elementach <Copy> i/lub <Remove> pliku Assign Message (Przypisywanie wiadomości) ma wartość 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ż brakuje prawidłowej nazwy zmiennej, aby 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 ta zasada wywołuje błąd w czasie działania. Aby dowiedzieć się więcej, zapoznaj się z artykułem Co musisz wiedzieć o błędach związanych z naruszeniem zasad.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu podana w tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. 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 zasad jest zdefiniowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.

Powiązane artykuły

Działające przykłady zasady AssignMessage są dostępne w przykładach platformy API.

Bardziej zaawansowany przykład zastępowania target.url z ProxyEndpoint znajdziesz w tym artykule na forum Apigee.

Aby zobaczyć działanie „set path” w zasadach ServiceCallout, zapoznaj się z tym przykładem praktycznym w próbkach Apigee na GitHubie. Wystarczy sklonować repozytorium i postępować zgodnie z instrukcjami w tym temacie. W przykładzie użyto zasady AssignMessage do ustawienia ścieżki żądania, a następnie zasady Service Callout do wysłania żądania do usługi zewnętrznej.