Zasada przypisywania wiadomości

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Co

Zasady przypisywania wiadomości zmieniają lub tworzą nowe wiadomości z żądaniem i odpowiedzią podczas przepływu proxy API. Zasady te umożliwiają wykonywanie tych czynności związanych z wiadomościami:

  • Dodaj nowe parametry formularza, nagłówki lub parametry zapytania do wiadomości.
  • Kopiowanie istniejących właściwości z jednej wiadomości do drugiej
  • Usuń nagłówki, parametry zapytania, parametry formularza lub ładunki wiadomości.
  • Ustaw wartość istniejących właściwości w wiadomości.

Za pomocą zasady przypisywania wiadomości zwykle dodajesz, zmieniasz lub usuwasz właściwości żądania lub odpowiedzi. Możesz też użyć zasady przypisywania wiadomości, aby utworzyć niestandardową wiadomość z prośbą lub odpowiedzią i przekazać ją do alternatywnego celu, zgodnie z opisem w artykule Tworzenie niestandardowych wiadomości z prośbą.

Zasada przypisywania wiadomości może tworzyć lub zmieniać zmienne przepływu za pomocą tych elementów podrzędnych:

Element <AssignMessage>

Określa zasadę przypisywania wiadomości.

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

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

Składnia

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

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

Domyślne zasady

Ten przykład pokazuje ustawienia domyślne, gdy dodasz do przepływu w interfejsie Edge zasadę przypisywania wiadomości:

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Gdy w interfejsie Edge wstawiasz nową zasadę przypisywania wiadomości, szablon zawiera zaczepy dla wszystkich możliwych operacji. Zazwyczaj wybierasz operacje, które chcesz wykonać za pomocą tej zasady, i usuwasz pozostałe elementy podrzędne. Jeśli na przykład chcesz wykonać operację kopiowania, użyj elementu <Copy> i usuń z polityki elementy <Add>, <Remove> i inne elementy podrzędne, aby ułatwić jej czytanie.

Ten element ma te atrybuty, które są wspólne dla wszystkich zasad:

Atrybut Domyślnie Wymagany? Description
name Nie dotyczy Wymagane

Wewnętrzna nazwa zasady. Wartość atrybutu 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 <AssignMessage>:

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

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

<Copy> Opcjonalnie Kopiuje informacje z wiadomości określonej przez atrybut source do obiektu wiadomości określonego przez element <AssignTo>.
<Remove> Opcjonalnie Usuwa określone elementy ze zmiennej wiadomości określonej w elemencie <AssignTo>.
<Set> Opcjonalnie Zastępuje wartości dotychczasowych właściwości w żądaniu lub odpowiedzi, które są określone przez element <AssignTo>.

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

Inne elementy podrzędne
<AssignTo> Opcjonalnie Określa, w przypadku której wiadomości ma działać zasada przypisywania wiadomości. Może to być standardowa prośba lub odpowiedź, ale też nowa wiadomość niestandardowa.
<AssignVariable> Opcjonalnie Przypisuje wartość zmiennej przepływu. Jeśli zmienna nie istnieje, <AssignVariable> ją tworzy.
<IgnoreUnresolvedVariables> Opcjonalnie Określa, czy przetwarzanie ma się zatrzymać, gdy zostanie napotkana niezdefiniowana zmienna.

Każdy z tych elementów podrzędnych jest opisany w następnych sekcjach.

Przykłady

Przykłady poniżej pokazują, jak można stosować zasadę przypisywania wiadomości:

1. Dodaj nagłówek

W tym przykładzie nagłówek jest dodawany do żądania za pomocą elementu <Add>:

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

2. Usuń ładunek

W tym przykładzie element <Remove> służy do usunięcia ładunku z odpowiedzi:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3. Zmień odpowiedź

W tym przykładzie modyfikujemy istniejący obiekt odpowiedzi, dodając do niego nagłówek:

<AssignMessage name="modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" type="response"></AssignTo>
</AssignMessage>

W tym przykładzie nie tworzy się nowa wiadomość. Zamiast tego modyfikuje istniejący komunikat odpowiedzi przez dodanie nagłówka HTTP.

Ponieważ w tym przykładzie pominięto nazwę zmiennej w elemencie <AssignTo> i podano wartość type jako „response”, ta zasada modyfikuje obiekt odpowiedzi zwracany przez serwer docelowy.

Nagłówek HTTP dodany do wiadomości odpowiedzi przez tę zasadę pochodzi z zmiennej wypełnianej przez zasadę LookupCache. Dlatego wiadomość odpowiedzi zmodyfikowana przez tę zasadę przypisywania wiadomości zawiera nagłówek HTTP, który wskazuje, czy wyniki zostały pobrane z pamięci podręcznej. Ustawienie nagłówków w odpowiedzi może być przydatne podczas debugowania i rozwiązywania problemów.

4. Skonfiguruj zawartość dynamiczną

Za pomocą funkcji Przypisz wiadomość możesz umieszczać dynamiczne treści w ładunku wiadomości z odpowiedziami i zapytaniami.

Aby umieścić zmienne przepływu Edge w pliku XML, ułóż je w nawiasach klamrowych, np. {prefix.name}.

W tym przykładzie wartość zmiennej przepływu nagłówka HTTP user-agent jest umieszczana w elemencie XML o nazwie User-agent:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

W przypadku ładunków JSON możesz wstawiać zmienne za pomocą atrybutów variablePrefix i variableSuffix z znakami rozdzielającymi, jak pokazano w tym przykładzie:

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

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

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

5. Usuń parametr zapytania

Z żądania można usunąć parametr zapytania apikey, jak w tym przykładzie:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Jeśli do uwierzytelniania użytkowników używasz polityki weryfikacji klucza API, zalecamy usunięcie parametru zapytania apikey z wiadomości żądania. Dzięki temu zapobiegniesz przekazywaniu poufnych informacji kluczowych do celu w backendzie.

6. Ustawianie i pobieranie zmiennych

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

  1. Tworzy w żądaniu 3 zmiennych przepływu o wartościach statycznych
  2. Pobiera zmienne przepływu dynamicznie w drugiej polityce 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 ustala 3 zmiennych w żądaniu. Każdy element <Name> określa nazwę zmiennej, a element <Value> określa jej wartość.

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

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

W drugiej polityce element <Ref> odwołuje się do zmiennej źródłowej, a elementy <Name> określają nazwy nowych zmiennych. Jeśli zmienna, do której odwołuje się element <Ref>, jest niedostępna, możesz użyć wartości określonej przez element <Value>.

Aby wypróbować ten zestaw zasad:

  1. Dodaj zasady 1 i 2 do procesu żądania. Pamiętaj, aby umieścić zasadę 1 przed zasadą 2.
  2. Dodaj trzecią zasadę w sekcji odpowiedzi.
  3. Trzecia zasada używa elementu <Set>, aby dodać zmienne do odpowiedzi. W tym przykładzie ładunek XML jest tworzony w odpowiedzi, którą Edge zwraca klientowi:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>

    Pamiętaj, że składnia dostępu do zmiennych przepływu w sekcji <Set> wymaga umieszczenia ich w nawiasach klamrowych.

    Upewnij się, że atrybut contentType elementu <Payload> jest ustawiony na „application/xml”.

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

    Opcjonalnie możesz przekierować wyniki przez narzędzie takie jak xmllint, aby plik XML był wyświetlany w ładnie sformatowanej strukturze:

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    Treść odpowiedzi powinna wyglądać tak:

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

7. Nagłówki odpowiedzi wywołania usługi

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

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

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

{calloutResponse.header.Set-Cookie.values}

Każdy element podrzędny w tym dokumencie zawiera dodatkowe przykłady. Jeszcze więcej przykładów znajdziesz na GitHubie w przykładowym projekcie przypisywania wiadomości.

Odwołanie do elementu podrzędnego

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

<Add>

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

Element <Add> dodaje do wiadomości nowe właściwości, których nie ma w pierwotnej wiadomości. Aby zmienić wartości dotychczasowych właściwości, użyj elementu <Set>.

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

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

Składnia

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

Przykład 1

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

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

Przykład 2

W tym przykładzie element <Headers> służy do dodawania nagłówka User-Agent do żądania docelowego punktu końcowego:

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

Przykład 3

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

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

W tym przykładzie w preflow żądania użyto elementu <Add>. Jeśli spojrzysz na wyniki w narzędziu takim jak narzędzie do śledzenia, zobaczysz, że żądanie „http://httpbin.org/get” staje się „http://httpbin.org/get?myParam=42”.

Elementy podrzędne elementu <Add> obsługują dynamiczną zamianę ciągów znaków, czyli szablonowanie wiadomości.

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

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

Wartość domyślna nie dotyczy
Wymagany? Opcjonalnie
Typ Tablica o elementach <FormParam>
Element nadrzędny <Add>
Elementy podrzędne <FormParam>

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

Składnia

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

Przykład 1

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

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

Przykład 2

W tym przykładzie pobieramy wartość parametru ciągu zapytania name i dodajemy ją do żądania jako parametr formularza:

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

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

Przykład 3

W tym przykładzie do żądania dodawane są różne parametry formularza:

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

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

Aby sprawdzić przepływ danych, możesz użyć narzędzia do śledzenia. Zobaczysz, że treść żądania zawiera zakodowane w adresie URL dane formularza, które zostały pierwotnie przekazane jako parametry ciągu zapytania:

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

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

  • Polecenie HTTP: POST
  • Typ wiadomości: prośba
  • Jeden (lub oba) z tych elementów:
    • Dane formularza: ustaw na jakąś wartość lub „” (pusty ciąg znaków). Na przykład w przypadku curl dodaj do prośby -d "".
    • Content-Length nagłówek: ustaw wartość 0 (jeśli w pierwotnym żądaniu nie ma żadnych danych; w przeciwnym razie ustaw bieżącą długość w bajtach). Na przykład w przypadku zapytania curl dodaj -H "Content-Length: 0".

Na przykład:

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

Gdy dodasz <FormParams>, Edge ustawia nagłówek Content-Type na „application/x-www-form-urlencoded” przed wysłaniem wiadomości do usługi docelowej.

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

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

Wartość domyślna nie dotyczy
Wymagany? Opcjonalnie
Typ Tablica o elementach <Header>
Element nadrzędny <Add>
Elementy podrzędne <Header>

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

Składnia

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

Przykład 1

W tym przykładzie do wiadomości żądania dodaję nagłówek user-agent i przypisuję do niego wartość zmiennej przepływu request.user.agent.

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

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

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

Wartość domyślna nie dotyczy
Wymagany? Opcjonalnie
Typ Tablica o elementach <QueryParam>
Element nadrzędny <Add>
Elementy podrzędne <QueryParam>

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

Składnia

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

Przykład 1

W tym przykładzie do żądania dodawany jest parametr zapytania „myParam” i przypisuje się mu wartość „42”:

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

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

  • Wyrażenie HTTP: GET
  • Typ wiadomości: prośba

Ponadto parametry zapytania możesz ustawić tylko wtedy, gdy atrybut <AssignTo> elementu type to wiadomość z żądaniem. Ustawienie ich w odpowiedzi nie ma żadnego wpływu.

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

<AssignTo>

Określa obiekt, na którym działa zasada przypisywania wiadomości. Dostępne opcje:

  • Treść żądania: request odebrana przez serwer proxy interfejsu API.
  • Wiadomość z odpowiedzią: response zwracany przez serwer docelowy
  • Komunikat niestandardowy: niestandardowy obiekt żądania lub odpowiedzi.

W niektórych przypadkach nie możesz zmienić obiektu, na który działa zasada przypisywania wiadomości. Nie możesz na przykład użyć instrukcji <Add> ani <Set>, aby dodać lub zmienić parametrów zapytania (<QueryParams>) ani parametrów formularza (<FormParams>) w odpowiedzi. W prośbie możesz manipulować tylko parametrami zapytania i formularza.

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

Jeśli nie określisz wartości <AssignTo>, zasada będzie działać na podstawie domyślnego żądania lub odpowiedzi, która zależy od miejsca jej wykonania. Jeśli zasada jest wykonywana w ramach przepływu żądań, wpływa na wiadomość żądania. Jeśli jest wykonywana w ramach przepływu odpowiedzi, domyślnie wpływa na tę odpowiedź.

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

Składnia

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

Przykład 1

W tym przykładzie określamy, że docelowym żądaniem jest pierwotne żądanie, które zostanie wysłane do docelowego punktu końcowego:

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

Ustawienie createNew na „false” (domyślnie) powoduje, że w tym przykładzie nie jest tworzona nowa prośba. Wszystkie operacje w tej zasadzie wpływają na pierwotne żądanie.

Przykład 2

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

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

Gdy tworzysz nowy obiekt żądania lub odpowiedzi, inne elementy polityki przypisywania wiadomości (takie jak <Add>, <Set> i <Set>) działają na tym nowym obiekcie żądania.

Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach w późniejszej części procesu lub wysłać nowy obiekt żądania do usługi zewnętrznej za pomocą zasad dotyczących wywołania usługi.

Przykład 3

W tym przykładzie tworzymy nowy obiekt żądania o nazwie „MyRequestObject”:

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

Gdy tworzysz nowy obiekt żądania lub odpowiedzi, inne elementy polityki przypisywania wiadomości (takie jak <Add>, <Set> i <Set>) działają na tym nowym obiekcie żądania.

Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach w późniejszej części procesu lub wysłać nowy obiekt żądania do usługi zewnętrznej za pomocą zasad dotyczących wywołania usługi.

W tej tabeli opisano atrybuty <AssignTo>:

Atrybut Opis Wymagany? Typ
createNew

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

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

Jeśli wartość to „false”, zasady działają w jeden z 2 sposobów:

  • Jeśli <AssignTo> może odnieść nazwę zmiennej do żądania lub odpowiedzi, kontynuuje przetwarzanie. Jeśli na przykład zasada znajduje się w przepływie żądania, zmienna jest obiektem żądania. Jeśli zasada znajduje się w odpowiedzi, zmienna jest obiektem odpowiedzi.
  • Jeśli <AssignTo> nie może zostać rozwiązany lub jest nieprawidłowy, zasada zwraca błąd.

Jeśli parametr createNew nie jest określony, zasady reagują w jeden z 2 sposobów:

  • Jeśli <AssignTo> przekształci się w wiadomość, przetwarzanie przechodzi do następnego kroku.
  • Jeśli <AssignTo> nie może zostać rozwiązany lub jest nieprawidłowy, tworzy się nowa zmienna typu określonego w parametrye type.
Opcjonalnie Wartość logiczna
transport

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

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

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

Wartość domyślna to „request”. Jeśli pominiesz ten atrybut, Edge utworzy żądanie lub odpowiedź, w zależności od tego, gdzie w przepływie są wykonywane te zasady.

Opcjonalnie Ciąg znaków

<AssignVariable>

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

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

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

  • Wartość dosłowna: użyj elementu podrzędnego <Value>, aby określić dosłowną wartość ciągu znaków dla zmiennej przepływu docelowego.
  • Zmienne przepływu: użyj elementu podrzędnego <Ref>, aby określić wartość istniejącej zmiennej przepływu dla docelowej zmiennej przepływu. Pełną listę zmiennych przepływu, które można używać jako źródła, znajdziesz w dokumentacji zmiennych przepływu.
  • Szablon wiadomości: użyj elementu podrzędnego <Template>, aby określić szablon wiadomości dla zmiennej przepływu docelowego.

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

Składnia

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

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

Przykład 1

W tym przykładzie wartość nowej zmiennej myvar jest ustawiana na wartość dosłowną „42”:

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

Przykład 2

W tym przykładzie wartość zmiennej przepływu request.header.user-agent jest przypisywana zmiennej docelowego przepływu myvar oraz wartość parametru zapytania country jest przypisywana zmiennej docelowego przepływu Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Jeśli żadne z przypisania nie powiedzie się, Edge przypisze zmiennej przepływu docelowego wartość „ErrorOnCopy”.

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

Przykład 3

W tym przykładzie element podrzędny <Template> służy do konkatenacji 2 zmiennych kontekstowych za pomocą ciągu znaków (przecinek):

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

Najczęstszym zastosowaniem parametru <AssignVariable> jest ustawienie wartości domyślnej dla parametru zapytania, nagłówka lub innej wartości, która może być przekazywana z żądaniem. Możesz to zrobić za pomocą kombinacji elementów podrzędnych <Ref> i <Value>. Więcej informacji znajdziesz w przykładach dotyczących <Ref>.

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie zmienna docelowa ma nazwę myvar i jest ustawiona na wartość dosłowną „42”:

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

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

<Ref> (element podrzędny do <AssignVariable>)

Określa źródło przypisania jako zmienną przepływu. Zmienna przepływu może być jedną z wstępnie zdefiniowanych zmiennych przepływu (wymienionych w tabeli zmiennych przepływu) lub niestandardową zmienną przepływu, którą utworzysz.

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

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

Podczas określania zmiennej przepływu za pomocą <Ref> pomiń nawiasy „{}”, które zwykle stosujesz do odwoływania się do zmiennej przepływu. Aby np. ustawić wartość nowej zmiennej na wartość zmiennej przepływu client.host:

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie wartość zmiennej przepływu request.header.user-agent jest przypisywana zmiennej docelowego przepływu myvar, a wartość parametru zapytania country – zmiennej Country:

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

W tym przykładzie przeglądarka Edge nie ma określonej wartości domyślnej (lub wartości zapasowej) dla żadnego z przypisań.

Przykład 2

W tym przykładzie wartość zmiennej przepływu request.header.user-agent jest przypisywana zmiennej docelowego przepływu myvar, a wartość parametru zapytania country – zmiennej Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

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

Przykład 3

Typowym zastosowaniem parametru <AssignVariable> jest ustawienie domyślnej wartości parametru zapytania, nagłówka lub innej wartości, którą można przekazać w żądaniu. Na przykład tworzysz proksy API pogody, w którym żądanie przyjmuje jeden parametr zapytania o nazwie „w”. Ten parametr zawiera identyfikator miasta, dla którego chcesz sprawdzić pogodę. Adres URL żądania ma postać:

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

Aby zdefiniować wartość domyślną dla „w”, utwórz regułę przypisywania wiadomości, która wygląda tak:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

W tym przykładzie <AssignVariable> pobiera wartość request.queryparam.w i przypisuje ją do siebie. Jeśli zmienna przepływu ma wartość null, co oznacza, że parametr zapytania „w” został pominięty w żądaniu, przykład używa wartości domyślnej z elementu <Value>. Dlatego możesz wysłać żądanie do tego proxy interfejsu API, pomijając parametr zapytania „w”:

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

...i aby proxy interfejsu API zwracał prawidłowy wynik.

W przeciwieństwie do <Value> wartość zmiennej <Ref> musi być zmienną przepływu, np. właściwością obiektu request, response lub target. Wartością może być też utworzona przez Ciebie zmienna ścieżki niestandardowej.

Jeśli w przypadku wartości <Ref> podasz zmienną przepływu, która nie istnieje, a wartość <IgnoreUnresolvedVariables> to „true”, Edge zwróci błąd.

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

Określa szablon wiadomości. Szablon wiadomości umożliwia zastąpienie zmiennych ciągów podczas wykonywania zasady. Można w nim łączyć ciągi tekstowe z nazwami zmiennych umieszczonymi w nawiasach klamrowych. Ponadto szablony wiadomości obsługują funkcje takie jak ucieczka i konwersja wielkości liter.

Użyj atrybutu ref, aby określić zmienną przepływu, której wartość jest szablonem wiadomości. Możesz na przykład przechowywać szablon wiadomości jako atrybut niestandardowy w aplikacji dewelopera. Gdy Edge rozpozna aplikację dewelopera po zweryfikowaniu klucza interfejsu API lub tokenu bezpieczeństwa (za pomocą dodatkowej zasady), element <AssignVariable> może użyć szablonu wiadomości z atrybutu niestandardowego aplikacji, który jest dostępny jako zmienna przepływu z zasady bezpieczeństwa. W tym przykładzie zakładamy, że szablon wiadomości jest dostępny w atribute klienta o nazwie message_template w aplikacji dewelopera wywołującej interfejs API, gdzie do weryfikacji klucza interfejsu API została użyta polityka VerifyAPIKey:

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

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

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

Składnia

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

Przykład 1

W tym przykładzie użyto składni szablonu wiadomości do konkatenacji 2 zmiennych kontekstowych za pomocą ciągu znaków (łącznika) między nimi:

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

Przykład 2

W tym przykładzie określono zmienną przepływu, której wartość to wstępnie zdefiniowany szablon wiadomości. Użyj tej opcji, jeśli chcesz wstrzyknąć zdefiniowany wstępnie szablon w czasie wykonywania bez konieczności modyfikowania zasad:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

Przykład 3

W tym przykładzie określono zmienną przepływu i wartość tekstową. W tym przypadku, jeśli odwołanie do zmiennej jest niezerowe, ta wartość jest używana jako szablon. Jeśli odwołana wartość jest pusta, jako szablon jest używana wartość tekstowa (w tym przypadku {system.uuid}-{messageid}). Ten wzór jest przydatny do podawania wartości „zastąpienia”, gdy w niektórych przypadkach chcesz zastąpić szablon domyślny (część tekstową) wartościami ustawianymi dynamicznie. Na przykład instrukcja warunkowa może pobrać wartość z mapy klucz-wartość i przypisać ją do zmiennej, do której się odwołuje:

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

<Value> (element podrzędny do <AssignVariable>)

Określa wartość zmiennej przepływu docelowego ustawionej za pomocą <AssignVariable>. Wartość jest zawsze interpretowana jako ciąg znaków dosłownych. Nie możesz użyć jako wartości zmiennej przepływu, nawet jeśli otoczysz ją w nawiasy („{}”). Aby użyć zmiennej przepływu, użyj zamiast tego znaku <Ref>.

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

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

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

Składnia

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

Przykład 1

W tym przykładzie wartość zmiennej przepływu docelowego myvar jest ustawiana na wartość dosłowną „42”:

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

Przykład 2

W tym przykładzie wartość zmiennej przepływu request.header.user-agent jest przypisywana zmiennej przepływu myvar, a wartość parametru zapytania country – zmiennej Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Jeśli żadne z tych przypisań się nie powiedzie, <AssignVariable> zamiast tego przypisze zmiennej przepływu docelowego wartość „ErrorOnCopy”.

<Copy>

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

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

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

Składnia

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

Przykład 1

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

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

Element <Copy> ma te atrybuty:

Atrybut Opis Wymagany? Typ
źródło

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

  • Jeśli nie określisz właściwości source, zostanie ona potraktowana jako prosta wiadomość. Jeśli na przykład zasada znajduje się w przepływie żądania, domyślnym źródłem jest obiekt request. Jeśli zasada znajduje się w przepływie odpowiedzi, domyślnie jest używany obiekt response. Jeśli pominiesz source, jako źródła kopii możesz użyć bezwzględnego odwołania do zmiennej przepływu. Na przykład wartość {request.header.user-agent}.
  • Jeśli nie można rozwiązać zmiennej źródłowej lub jeśli okazuje się, że jest ona typu innego niż wiadomość, funkcja <Copy> nie odpowiada.
Opcjonalnie Ciąg znaków

<FormParams> (element podrzędny do <Copy>)

Kopiuje parametry formularza z żądania określonego przez atrybut source elementu <Copy> do żądania określonego przez element <AssignTo>. Ten element nie ma wpływu na odpowiedź.

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

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

Składnia

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

Przykład 1

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

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

Przykład 2

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

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

Przykład 3

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

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Przykład 4

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

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

W tym przykładzie skopiowane są elementy „f1”, „f2” i druga wartość elementu „f3”. Jeśli „f3” ma tylko jedną wartość, nie jest ona kopiowana.

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

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

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

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

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

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

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

Składnia

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

Przykład 1

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

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

Przykład 2

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

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

Przykład 3

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

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

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

<Path> (element podrzędny do <Copy>)

Określa, czy ścieżka ma być kopiowana z żądania źródłowego do żądania docelowego. Ten element nie ma wpływu na odpowiedź.

Jeśli ustawisz wartość „true”, ta zasada skopiuje ścieżkę z atrybutu source elementu <Copy> do elementu <AssignTo>.

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

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

Składnia

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

Przykład 1

Z tego przykładu wynika, że zasada przypisywania wiadomości powinna skopiować ścieżkę z żądania źródłowego do nowego obiektu żądania niestandardowego:

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

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

  • Typ wiadomości: prośba

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

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie parametr <Payload> ma wartość „true”, dzięki czemu ładunek żądania jest kopiowany z żądania do odpowiedzi:

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

<QueryParams> (element podrzędny do <Copy>)

Parametry ciągu zapytania są kopiowane z żądania określonego przez atrybut source elementu <Copy> do żądania określonego przez element <AssignTo>. Ten element nie ma wpływu na odpowiedź.

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

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

Składnia

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

Przykład 1

W tym przykładzie parametr zapytania „my_param” jest kopiowany z żądania do nowego obiektu żądania niestandardowego:

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

Przykład 2

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

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

Przykład 3

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

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

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

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

  • Wyrażenie HTTP: GET
  • Typ wiadomości: prośba

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

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie wartość <ReasonPhrase> jest ustawiona na „true”, co powoduje, że <Copy> kopiuje wyrażenie powodu z domyślnej odpowiedzi do obiektu odpowiedzi niestandardowej:

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

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

  • Typ wiadomości: odpowiedź

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

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

Jeśli wartość tej zasady to „Prawda”, z elementu source atrybutu do elementu <Copy> kopiuje kod stanu z elementu <AssignTo>.

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

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

Składnia

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

Przykład 1

W tym przykładzie parametr <StatusCode> ma wartość „true” (prawda), co powoduje skopiowanie kodu stanu z obiektu odpowiedzi domyślnej do nowego obiektu odpowiedzi niestandardowej:

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

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

  • Typ wiadomości: odpowiedź

Najczęstszym zastosowaniem parametru <StatusCode> jest zapewnienie, aby odpowiedź serwera proxy miała ten sam stan co odpowiedź otrzymana od celu, gdy atrybut createNew parametru <AssignTo> jest ustawiony na „true”.

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

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

Jeśli ustawiona jest wartość „true”, do żądania określonego w elemencie <AssignTo> zostanie skopiowane czasowniki znalezione w atrybucie source elementu <Copy>.

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

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

Składnia

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

Przykład 1

W tym przykładzie parametr <Verb> ma wartość „true” (prawda), co powoduje skopiowanie czasownika z żądania domyślnego do nowego żądania niestandardowego:

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

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

  • Typ wiadomości: prośba

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

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie <Version> jest ustawiony na „true” (prawda) w żądaniu, co powoduje skopiowanie wersji z domyślnego obiektu żądania do nowego, niestandardowego obiektu żądania:

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

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

  • Typ wiadomości: prośba

<DisplayName>

Oprócz atrybutu name możesz użyć innej, bardziej naturalnie brzmiącej nazwy, aby oznaczyć zasadę w edytorze proxy w interfejsie zarządzania.

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

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

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

Składnia

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

Przykład

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

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

<IgnoreUnresolvedVariables>

Określa, czy przetwarzanie ma się zatrzymać, gdy zostanie napotkana niezdefiniowana zmienna.

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie parametr <IgnoreUnresolvedVariables> ma wartość „true”:

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

Usuwa nagłówki, parametry zapytania, parametry formularza lub ładunek wiadomości. Wiadomość może być prośbą lub odpowiedzią. Korzystając z elementu <AssignTo>, możesz określić, na który komunikat <Remove> ma działać.

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

Typowym zastosowaniem parametru <Remove> jest usuwanie z obiektu przychodzącego zapytania parametru zapytania zawierającego poufne informacje, aby nie przekazywać go na serwer backendu.

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

Składnia

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

Przykład 1

W tym przykładzie z odpowiedzi usunięto treść wiadomości:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

W ramach tej zasady w przepływie odpowiedzi usuwamy treść odpowiedzi i zwracamy klientowi tylko nagłówki HTTP.

Przykład 2

Z przychodzącego żądania usuwamy w tym przykładzie wszystkie parametry formularza i parametr zapytania:

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

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

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

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

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

Składnia

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

Przykład 1

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

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

Przykład 2

Z tego przykładu wynika, że z żądania zostaną usunięte wszystkie parametry formularza:

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Przykład 3

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

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

W tym przykładzie usuwamy kolumny „f1”, „f2” i drugą wartość kolumny „f3”. Jeśli parametr „f3” ma tylko jedną wartość, nie jest on usuwany.

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

  • Typ wiadomości: prośba
  • Content-Type: „application/x-www-form-urlencoded”

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie nagłówek user-agent jest usuwany z żądania:

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Przykład 2

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

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

Przykład 3

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

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

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

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

Określa, czy <Remove> usuwa ładunek w żądaniu lub odpowiedzi, który jest określony przez element <AssignTo>. Ustaw wartość „true”, aby wyczyścić ładunek. W przeciwnym razie wpisz „false”. Wartość domyślna to „false”.

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

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

Składnia

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

Przykład 1

W tym przykładzie parametr <Payload> ma wartość „true”, więc ładunek żądania jest wyczyszczany:

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

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

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

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

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

Składnia

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

Przykład 1

Z żądania można usunąć pojedynczy parametr zapytania. W tym przykładzie usuwamy z niego jeden parametr:

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

Przykład 2

Z tego przykładu wynika, że z żądania usuwane są wszystkie parametry zapytania:

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

Przykład 3

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

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

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

Przykład 4

Z żądania można usunąć parametr zapytania apikey, jak w tym przykładzie:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

  • Wyrażenie HTTP: GET
  • Typ wiadomości: prośba

<Set>

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

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

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

Składnia

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

Przykład 1

Ten przykład pokazuje element <Set>:

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

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

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

Wartość domyślna nie dotyczy
Wymagany? Opcjonalnie
Typ Tablica o elementach <FormParam>
Element nadrzędny <Set>
Elementy podrzędne <FormParam>

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

Składnia

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

Przykład 1

W tym przykładzie parametr formularza o nazwie „myparam” jest ustawiany na wartość zmiennej request.header.myparam w nowej, niestandardowej prośbie:

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

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

  • Polecenie HTTP: POST
  • Typ wiadomości: prośba

Jeśli w zasadzie zdefiniujesz puste parametry formularza (<Add><FormParams/></Add>), zasada nie doda żadnych parametrów formularza. Jest to tożsame z pominięciem <FormParams>.

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

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

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

Wartość domyślna nie dotyczy
Wymagany? Opcjonalnie
Typ Tablica o elementach <Header>
Element nadrzędny <Set>
Elementy podrzędne <Header>

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

Składnia

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

Przykład 1

W tym przykładzie nagłówek user-agent ma wartość zmiennej request.header.user-agent:

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Jeśli w zasadzie zdefiniujesz puste nagłówki (<Add><Headers/></Add>), zasada nie dodaje żadnych nagłówków. Jest to tożsame jak pominięcie <Headers>.

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

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie ustawiono ładunek w postaci zwykłego tekstu:

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

Przykład 2

W tym przykładzie ustawiamy ładunek JSON:

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

Przykład 3

W tym przykładzie wartości zmiennych są wstawiane do ładunku przez umieszczenie nazw zmiennych w nawiasach klamrowych:

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

W starszych wersjach Apigee Edge (np. przed wersją w chmurze 16.08.17) nie można było używać nawiasów klamrowych do oznaczania odwołań do zmiennych w ładunkach JSON. W tych wersjach trzeba było używać atrybutów variablePrefixvariableSuffix do określania znaków rozdzielaczych oraz do otaczania nazw zmiennych, np. w ten sposób:

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

Ta starsza składnia nadal działa.

Przykład 4

Treść pliku <Payload> jest traktowana jako szablon wiadomości. Oznacza to, że zasada przypisywania wiadomości zastępuje zmienne otoczone nawiasami klamrowymi wartościami odwołań do zmiennych w czasie działania.

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

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

W tej tabeli opisano atrybuty <Payload>:

Atrybut Opis Obecność Typ
contentType

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

Opcjonalnie Ciąg znaków
variablePrefix Opcjonalnie określa ogranicznik poprzedzający zmienną przepływu. Wartość domyślna to „{“}. Więcej informacji znajdziesz w dokumentacji dotyczącej zmiennych przepływu. Opcjonalnie Char
variableSuffix Opcjonalnie określa końcowy ogranicznik zmiennej przepływu. Domyślnie jest to „}”. Więcej informacji znajdziesz w dokumentacji dotyczącej zmiennych przepływu. Opcjonalnie Char

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

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

Wartość domyślna nie dotyczy
Wymagany? Opcjonalnie
Typ Tablica o elementach <QueryParam>
Element nadrzędny <Set>
Elementy podrzędne <QueryParam>

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

Składnia

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

Przykład 1

W tym przykładzie parametr zapytania „address” ma wartość zmiennej request.header.address:

<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

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

  • Wyrażenie HTTP: GET
  • Typ wiadomości: prośba

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

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

Określa wyrażenie przyczyny w odpowiedzi. Zwykle służy to do debugowania w połączeniu z polem <StatusCode>. Ten element nie ma wpływu na żądanie.

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

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

Składnia

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

Przykład 1

W tym przykładzie zdefiniowano prostą frazę powodu:

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

Przykład 2

Treść pliku <ReasonPhrase> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej umieszczona w nawiasach klamrowych zostanie zastąpiona podczas wykonywania kodu wartością odwołania do zmiennej, jak w tym przykładzie:

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

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

  • Typ wiadomości: odpowiedź

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie ustawiono prosty kod stanu:

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Przykład 2

Treść pliku <StatusCode> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej umieszczona w nawiasach klamrowych zostanie zastąpiona podczas wykonywania kodu wartością zmiennej, do której się odwołuje, jak w tym przykładzie:

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

  • Typ wiadomości: odpowiedź

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

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

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

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

Składnia

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

Przykład 1

W tym przykładzie żądaniu przypisuje się proste czasowniki:

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

Przykład 2

Treść <Verb> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy będzie w czasie wykonywania zastępowana wartością zmiennej, do której się odwołuje.

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

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

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

  • Typ wiadomości: prośba

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

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

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

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

Składnia

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

Przykład 1

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

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

Przykład 2

W tym przykładzie numer wersji jest ustawiany za pomocą zmiennej w nawiasach klamrowych:

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Treść pliku <Version> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej umieszczona w nawiasach klamrowych zostanie zastąpiona podczas wykonywania kodu wartością zmiennej, do której się odwołuje.

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

  • Typ wiadomości: prośba

Tworzenie niestandardowych wiadomości o prośbach

Za pomocą zasady przypisywania wiadomości możesz utworzyć niestandardową wiadomość z prośbą. Po utworzeniu niestandardowej prośby możesz jej używać na te sposoby:

  • dostęp do zmiennych w innych zasadach,
  • Przekazywanie danych do usługi zewnętrznej

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

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

Domyślnie przeglądarka Edge nie wykonuje żadnych działań w reakcji na niestandardową wiadomość z prośbą. Po utworzeniu Edge kontynuuje proces z pierwotną prośbą. Aby użyć niestandardowego żądania, dodaj do serwera proxy zasadę, taką jak zasada ServiceCallout, która może przekazać niestandardowe żądanie do zewnętrznej usługi.

W tych przykładach tworzone są niestandardowe wiadomości z żądaniami:

Przykład 1

W tym przykładzie obiekt żądania niestandardowego jest tworzony za pomocą metody AssignMessage:

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Ten przykład:

  • Tworzy nowy obiekt wiadomości o nazwie „MyCustomRequest”.
  • W przypadku MyCustomRequest te zasady:
    • Kopiuje wartość nagłówka HTTP user-agent z dochodzącego żądania do nowej wiadomości. Funkcja <Copy> używa odwołania bezwzględnego do zmiennej przepływu user-agent, więc nie musisz określać atrybutu source w funkcji <Copy>.
    • Ustawia parametr zapytania address w wiadomości niestandardowej na wartość parametru zapytania addy z dostarczoną prośbą.
    • Ustawia czasownik HTTP na GET.
  • Ustawia wartość <IgnoreUnresolvedVariables> na „fałsz”. Jeśli <IgnoreUnresolvedVariables> ma wartość „fałsz”, a jedna z zmiennych, które zasada próbuje dodać, nie istnieje, Edge przestanie przetwarzać dane w ramach przepływu interfejsu API.

Przykład 2

Oto kolejny przykład pokazujący, jak utworzyć obiekt niestandardowego żądania za pomocą metody AssignMessage:

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

W tym przykładzie tworzymy nowe żądanie niestandardowe o nazwie „partner.request”. Następnie ustawia w nowej prośbie wartości <Verb><Payload>.

Do niestandardowego komunikatu z prośbą możesz uzyskać dostęp w innej regule przypisywania wiadomości, która występuje później w procesie. W tym przykładzie uzyskujemy wartość nagłówka user-agent wiadomości z niestandardowym żądaniem:

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo createNew="false" type="request"></AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </Headers>
  </Set>
</AssignMessage>

Filmy

Aby dowiedzieć się więcej o zasadach dotyczących przypisywania wiadomości, obejrzyj te filmy.

Wideo Opis
Dlaczego warto przypisać zasady dotyczące wiadomości? Dowiedz się więcej o zaletach korzystania z zasady przypisywania wiadomości w celu modyfikowania żądania lub odpowiedzi interfejsu API bez modyfikowania kodu backendu.
Kopiowanie elementów interfejsu API za pomocą zasady przypisywania wiadomości Skopiuj elementy z żądania lub odpowiedzi interfejsu API i utwórz nowy obiekt żądania lub odpowiedzi, używając zasady przypisywania wiadomości.
Usuwanie elementów interfejsu API za pomocą zasad dotyczących przypisywania wiadomości Usuwaj elementy interfejsu API i modyfikuj go, zanim dotrze do docelowego backendu, korzystając z zasady przypisywania wiadomości.
Dodawanie i ustawianie elementów interfejsu API za pomocą zasady AssignMessage Zmień żądanie lub odpowiedź interfejsu API, dodając parametry zapytania, nagłówki, parametry formularza lub ładunki za pomocą zasad dotyczących przypisywania wiadomości.
Tworzenie zmiennych niestandardowych za pomocą zasady przypisywania wiadomości Ustaw zmienne niestandardowego przepływu za pomocą zasady przypisywania wiadomości i wykorzystaj te zmienne w innych zasadach w interfejsie proxy API.
Tworzenie nowych obiektów żądań lub odpowiedzi za pomocą zasady przypisywania wiadomości Tworzenie nowych obiektów żądania lub odpowiedzi interfejsu API za pomocą zasady przypisywania wiadomości w czasie wykonywania interfejsu API.
Tworzenie mock API za pomocą zasady przypisywania wiadomości Utwórz prosty interfejs API REST, dodając regułę przypisywania wiadomości w przepływie odpowiedzi.
Ustawianie i modyfikowanie ładunku za pomocą zasady AssignMessage Przekształć żądanie REST w żądanie SOAP, ustawiając ładunek SOAP za pomocą zasady przypisywania wiadomości podczas działania interfejsu API.

Kody błędów

W tej sekcji opisaliśmy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów, które są ustawiane przez Edge, gdy te zasady powodują błąd. Te informacje są ważne, jeśli tworzysz reguły błędów do obsługi błędów. Więcej informacji znajdziesz w artykułach Więcej informacji o błędach związanych z naruszeniem zasadRozwiązywanie problemów.

Błędy w czasie wykonywania

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

Kod błędu Stan HTTP Przyczyna Napraw
steps.assignmessage.SetVariableFailed 500 Zasada nie mogła ustawić zmiennej. Sprawdź ciąg błędów pod kątem nazwy niezdefiniowanej zmiennej.
steps.assignmessage.VariableOfNonMsgType 500

Ten błąd występuje, jeśli atrybut source w elemencie <Copy> ma wartość zmiennej, która nie jest typu message.

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

steps.assignmessage.UnresolvedVariable 500

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

  • poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest wykonywana zasada)
  • 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> lub <Remove> zasady Assign Message (Przypisywanie wiadomości) wynosi 0 lub jest liczbą ujemną, wdrożenie serwera proxy interfejsu API się nie uda.
InvalidVariableName Jeśli element podrzędny <Name> jest pusty lub nie jest określony w elemencie <AssignVariable>, wdrożenie interfejsu API zakończy się niepowodzeniem, ponieważ nie ma prawidłowej nazwy zmiennej, której można przypisać wartość. Wymagana jest prawidłowa nazwa zmiennej.
InvalidPayload ładunek określony w zasadach jest nieprawidłowy.

Zmienne dotyczące błędów

Te zmienne są ustawiane, gdy ta zasada wywołuje błąd w czasie działania. Więcej informacji znajdziesz w artykule Podstawowe informacje o błędach związanych z zasadami.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu, jak podano w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatni element kodu błędu. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name to nazwa zasady określona przez użytkownika, która spowodowała błąd. assignmessage.AM-SetResponse.failed = true

Przykładowa odpowiedź na błąd

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

Przykładowa reguła błędu

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults">
    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

Schematy

Każdy typ zasad jest definiowany przez schemat XML (.xsd). Informacje na temat schematów zasad znajdziesz na GitHubie.

Powiązane artykuły

Przykłady działających zasad metody AssignMessage są dostępne w przykładach interfejsu API.

Zaawansowany przykład zastąpienia wartości target.url z ProxyEndpoint znajdziesz w tym artykule w społeczności Apigee.

Aby zobaczyć działanie „set path” w zasadach ServiceCallout, zapoznaj się z przykładem „Nauka poprzez działanie” w przykładach Apigee na GitHubie. Wystarczy sklonować repozytorium i postępować zgodnie z instrukcjami podanymi w tym temacie. Przykład używa zasady przypisywania wiadomości do ustawienia ścieżki żądania, a następnie używa zasady wywołania usługi do wysłania żądania do usługi zewnętrznej.