Zasada przypisywania wiadomości

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Co

Zasada AssignMessage zmienia się lub tworzy nowe wiadomości z żądaniami i odpowiedziami podczas przepływu serwera proxy interfejsu API. Ta zasada umożliwia wykonywanie na tych wiadomościach następujące działania:

  • Dodawanie nowych parametrów formularza, nagłówków lub parametrów zapytania do wiadomości
  • Kopiowanie istniejących usług z jednej wiadomości do drugiej
  • Usuń nagłówki, parametry zapytania, parametry formularza lub wiadomość. ładunki z wiadomości
  • Ustaw wartość istniejących właściwości w wiadomości.

Za pomocą zasady AssignMessage zazwyczaj można dodawać, zmieniać lub usuwać właściwości żądania lub odpowiedzi. Możesz też jednak użyć zasady AssignMessage, aby utworzyć niestandardową żądania lub odpowiedzi i przekazać ją do innego miejsca docelowego, tak jak to opisano w Tworzenie niestandardowych wiadomości z prośbami

Zasada AssignMessage może tworzyć i zmieniać zmienne przepływu z następującym elementem podrzędnym elementy:

<AssignMessage> element

Definiuje zasadę AssignMessage.

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

Element <AssignMessage> ma taką składnię:

Składnia

Element <AssignMessage> ma taką 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ślna zasada

Poniższy przykład pokazuje ustawienia domyślne po dodaniu zasady AssignMessage. do procesu w interfejsie Edge:

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

Gdy wstawisz nową zasadę AssignMessage w interfejsie Edge, szablon będzie zawierał atrapy dla wszystkich możliwe działania. Zwykle wybierasz operacje, które chcesz wykonywać z użyciem tej zasady i usuń pozostałe elementy podrzędne. Jeśli na przykład chcesz wykonać operację kopiowania, użyj <Copy> i usuń elementy <Add>, <Remove> oraz inne elementy podrzędne z elementu zasady ochrony prywatności.

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.

Poniższa tabela zawiera ogólny opis elementów podrzędnych funkcji <AssignMessage>:

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

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

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

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

Inne elementy podrzędne
<AssignTo> Opcjonalnie Określa wiadomość, na której działa zasada AssignMessage. Może to być standardowa wartość, może to być również nowa, niestandardowa wiadomość.
<AssignVariable> Opcjonalnie Przypisuje wartość do zmiennej przepływu. Jeśli zmienna nie istnieje, Tworzy ją <AssignVariable>.
<IgnoreUnresolvedVariables> Opcjonalnie Określa, czy przetwarzanie zatrzymuje się po napotkaniu nierozwiązanej zmiennej.

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

Przykłady

Poniższe przykłady pokazują niektóre sposoby korzystania z zasady AssignMessage zasady:

1. Dodaj nagłówek

Poniższy przykład dodaje do żądania nagłówek z parametrem Element <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. Usunięcie ładunku

Poniższy przykład pokazuje usunięcie ładunku z odpowiedzi z tagiem <Remove> element:

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

3. Zmień odpowiedź

Ten przykład zmienia istniejący obiekt odpowiedzi przez dodanie do niego nagłówka:

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

Ten przykład nie powoduje utworzenia nowej wiadomości. Zamiast tego do wiadomości z odpowiedzią, dodając nagłówek HTTP.

Ponieważ w tym przykładzie pominięto nazwę zmiennej w elemencie <AssignTo> i wskazuje on type jako „odpowiedź”, ta zasada modyfikuje obiekt odpowiedzi zwrócony przez element docelowy serwera.

Nagłówek HTTP dodany do odpowiedzi przez tę zasadę pochodzi ze zmiennej wypełniane przez zasadę wyszukiwania pamięci podręcznej. Dlatego komunikat z odpowiedzią zmodyfikowany przez ten Zasada dotycząca przypisania wiadomości zawiera nagłówek HTTP wskazujący, czy wyniki zostały nie są pobierane z pamięci podręcznej. Ustawienie nagłówków w odpowiedzi może być przydatne podczas debugowania w rozwiązywaniu problemów.

4. Ustaw zawartość dynamiczną

Używając funkcji Przypisz wiadomość, możesz umieścić zawartość dynamiczną w ładunku odpowiedzi oraz wiadomości z prośbami.

Aby umieścić zmienne przepływu Edge w ładunku XML, opakuj wyznaczoną zmienną w formacie curly. nawiasy klamrowe w ten sposób: {prefix.name}.

Ten przykład zawiera wartość zmiennej przepływu nagłówka HTTP user-agent w elemencie XML o nazwie User-agent:

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

W przypadku ładunków JSON możesz wstawić zmienne za pomocą funkcji variablePrefix i Atrybuty variableSuffix ze znakami separatora, jak pokazano poniżej przykład:

<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 Cloud 16.08.17 do wstawiania zmiennych można też używać nawiasów klamrowych.

5. Usuń parametr zapytania

Ten przykład pozwala usunąć z żądania parametr zapytania apikey:

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

Sprawdzoną metodą jest usunięcie z żądania parametru zapytania apikey jest wyświetlany, gdy do uwierzytelniania użytkowników używasz zasadVerifyAPIKey. Robisz to, by zapobiec lub przekazywania poufnych informacji do celu backendu.

6: Ustaw/pobieraj zmienne

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

  1. Tworzy w żądaniu 3 zmienne przepływu z wartościami statycznymi
  2. Dynamicznie pobiera zmienne przepływu z drugiej zasady w przepływie żądań
  3. Ustawia je w ładunku odpowiedzi
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

W pierwszej zasadzie element <AssignVariable> tworzy i ustawia 3 elementy zmiennych w żądaniu. Każdy element <Name> określa nazwę zmiennej, a <Value> określa jej wartość.

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

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

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

Aby wypróbować te zasady:

  1. Dodaj zasady 1 i 2 do przepływu żądań. Zasada nr 1 musi być umieszczona przed zasadą 2.
  2. Dodaj trzecią zasadę w procesie odpowiedzi.
  3. Trzecia zasada używa elementu <Set>, aby dodać zmienne do odpowiedzi. Ten przykład tworzy ładunek XML 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, aby uzyskać dostęp do zmiennych przepływu w <Set>, polega na ich umieszczaniu nawiasy klamrowe.

    Pamiętaj, aby ustawić atrybut contentType elementu <Payload> na „application/xml”.

  4. wysłać żądanie do serwera proxy interfejsu API; np.:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Opcjonalnie możesz wyświetlać wyniki potokiem za pomocą narzędzia takiego jak xmllint, aby kod XML jest wyświetlany w odpowiednio sformatowanej strukturze:

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

    Treść odpowiedzi powinna wyglądać tak:

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

7. Uzyskaj nagłówki odpowiedzi objaśnienia usługi

W tym przykładzie załóżmy, że zasada ServiceCallout znajduje się w żądaniu serwera proxy interfejsu API. a odpowiedź na objaśnienie zawiera wiele nagłówków o tej samej nazwie (Set-Cookie). Przy założeniu, że zmienna odpowiedzi wywołania usługi jest domyślną calloutResponse, ta zasada uzyskuje drugą wartość (Set-Cookie) wartość nagłówka.

<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 ma dodatkowe przykłady. Więcej przykładów: Przykład elementu AssignMessage w GitHubie.

Odniesienie do elementu podrzędnego

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

<Add>

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

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

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

Element <Add> ma taką 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 przykładzie poniżej użyto elementu <FormParams> do pobrania wartości parametrów ciągu zapytania z początkowego żądania i ustawić je jako parametry formularza żądanie 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 użyto elementu <Headers> do dodania Nagłówek User-Agent do żądania docelowego punktu końcowego:

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

Przykład 3

W tym przykładzie użyto elementu <QueryParams> do dodania pojedynczego zapytania ma do żądania stałą wartość:

<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 użyto typu <Add> we wstępnym przepływie żądania. Gdy spojrzysz na wyniki w narzędziu na przykład narzędzie Trace, żądanie „http://httpbin.org/get”. zmienia się w &quot;http://httpbin.org/get?myParam=42&quot;.

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

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

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

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

Element <FormParams> ma taką 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 przykładzie poniżej dodano pojedynczy parametr formularza („answer”) i wartość statyczną („42”) do żądanie:

<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

Ten przykład pobiera wartość parametru ciągu zapytania name i doda go do żądania jako parametr formularza:

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

Pamiętaj, że ten przykład nie określa celu z elementem <AssignTo>. Ta zasada dodaje atrybuty tylko do żądania.

Przykład 3

Ten przykład dodaje do żądania wiele parametrów formularza:

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

Ten przykład pobiera parametry ciągu zapytania ze źródłowego żądania i je dodaje. jako parametry formularza do żądania wysyłanego do docelowego punktu końcowego.

Aby przyjrzeć się przebiegowi procesu, możesz użyć narzędzia Ślad. Zobaczysz, że treść żądania zawiera zakodowane w adresie URL dane formularza, które zostały pierwotnie przekazane jako ciąg zapytania parametry:

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

Z <FormParams> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Czasownik HTTP: POST
  • Typ wiadomości: prośba
  • Jeden (lub oba) z tych elementów:
    • Dane formularza: ustaw jakąś wartość lub „” (pusty ciąg znaków). Na przykład curl, dodaj do swojej prośby: -d "".
    • Nagłówek Content-Length: ustaw na 0 (jeśli w pierwotne żądanie; w przeciwnym razie – bieżąca długość w bajtach). Na przykład curl dodaj użytkownika -H "Content-Length: 0" do Twojej prośby.

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 element <FormParams>, Edge ustawi nagłówek Content-Type żądania na &quot;application/x-www-form-urlencoded&quot; przed wysłaniem wiadomości do usługi docelowej.

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

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

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

Element <Headers> ma taką 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 poniższym przykładzie do wiadomości z żądaniem zostanie dodany nagłówek user-agent oraz przypisuje wartość zmiennej przepływu request.user.agent do tego nagłówka.

<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 tagu <Add>)

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

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

Element <QueryParams> ma taką 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

Poniższy przykład dodaje parametr zapytania „myParam” i przypisuje wartość „42” :

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

Z <QueryParams> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Czasownik HTTP: GET
  • Typ wiadomości: prośba

Dodatkowo parametry zapytania możesz ustawiać tylko wtedy, gdy w elemencie <AssignTo> jest Atrybut type to wiadomość z żądaniem. Ustawienie ich w odpowiedzi nie ma żadnego efektu.

Jeśli w zasadzie zdefiniujesz pustą tablicę parametrów zapytania (<Add><QueryParams/></Add>), zasada nie dodaje żadnego zapytania . Działa to tak samo jak pominięcie <QueryParams>.

<AssignTo>

Określa, na którym obiekcie działa zasada AssignMessage. Dostępne są następujące opcje:

  • Komunikat żądania: request odebrany przez serwer proxy interfejsu API
  • Komunikat odpowiedzi: element response zwrócony z serwera docelowego
  • Komunikat niestandardowy: niestandardowy obiekt żądania lub odpowiedzi.

W niektórych przypadkach nie możesz zmienić obiektu, na którym działa zasada AssignMessage. Na przykład nie możesz używać parametrów <Add> ani <Set> do dodawania lub zmieniania parametrów zapytania (<QueryParams>) lub parametrów formularza (<FormParams>) w odpowiedzi. Do wyboru masz tylko manipulowanie parametrami zapytań i formularza w żądaniu.

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 domyślnym żądaniu lub odpowiedzi w zależności od miejsca jej wykonania. Jeśli zasada jest wykonywana w przepływie żądania, wpływa na wiadomość z prośbą. Jeśli jest wykonywane w ramach przepływu odpowiedzi, zasada wpływa na tę odpowiedź domyślnie.

Element <AssignTo> ma taką 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

Poniższy przykład wskazuje, że celem jest pierwotne żądanie, które zostanie wysłane do docelowy punkt końcowy:

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

Ustawiam atrybut createNew na „false” (domyślnie), ten przykład nie utworzy nowe żądanie. Wszystkie operacje w tej zasadzie mają wpływ na pierwotne żądanie.

Przykład 2

Ten przykład tworzy nowy obiekt żądania:

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

Gdy utworzysz nowy obiekt żądania lub odpowiedzi, pozostałe elementy zasady AssignMessage (takich jak <Add>, <Set> i <Set>) działają na tych nowych obiektu żądania.

Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach w dalszej części procesu lub wysłać nowy żądania do usługi zewnętrznej z zasadami ServiceCallout.

Przykład 3

Poniższy przykład pokazuje utworzenie nowego obiektu żądania o nazwie „MyRequestObject”:

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

Gdy utworzysz nowy obiekt żądania lub odpowiedzi, pozostałe elementy zasady AssignMessage (takich jak <Add>, <Set> i <Set>) działają na tych nowych obiektu żądania.

Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach w dalszej części procesu lub wysłać nowy żądania do usługi zewnętrznej z zasadami ServiceCallout.

W poniższej tabeli opisano atrybuty <AssignTo>:

Atrybut Opis Wymagana? Typ
createNew

Określa, czy podczas przypisywania wartości ta zasada tworzy nowy komunikat.

Jeśli ma wartość „true”, zasada tworzy nową zmienną typu określone przez type („żądanie” lub „odpowiedź”). Jeśli nie określa nazwy nowej zmiennej, wtedy zasada tworzy nowe żądanie lub na podstawie wartości type.

W przypadku wartości „false” (fałsz) zasada reaguje na jeden z 2 sposobów:

  • Jeśli <AssignTo> może przekształcić nazwę zmiennej na żądanie lub odpowiedź, trwa przetwarzanie. Jeśli na przykład zasada znajduje się w przepływie żądania, zmienną jest obiektu żądania. Jeśli zasada jest w odpowiedzi, zmienną jest parametrem obiektu odpowiedzi.
  • Jeśli nie można znaleźć wartości <AssignTo> lub zmienić typ na inny niż komunikat, powoduje zgłoszenie błędu.

Jeśli createNew nie jest określony, zasada działa na jeden z 2 sposobów:

  • Jeśli <AssignTo> przejdzie do wiadomości, przetwarzanie przechodzi do następnej krok po kroku.
  • Jeśli nie można znaleźć typu <AssignTo> lub zmienić typ na inny, nowy jest tworzona zmienna typu określonego w type.
Opcjonalnie Wartość logiczna
transport

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

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

Opcjonalnie Ciąg znaków
type Określa typ nowej wiadomości, jeśli createNew ma wartość „true”. Prawidłowa wartości to „request” lub „odpowiedź”.

Wartość domyślna to „request”. Jeśli pominiesz ten atrybut, Edge utworzy w zależności od tego, w którym miejscu w przepływie działa ta zasada.

Opcjonalnie Ciąg znaków

<AssignVariable>

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

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

Wartość, którą możesz przypisać do zmiennej przepływu docelowego, może być jedną z tych wartości:

  • Ciąg literału: użyj elementu podrzędnego <Value>, aby określić literał jako ciąg znaków dla zmiennej przepływu docelowego.
  • Zmienna przepływu: użyj elementu podrzędnego <Ref>, by określić wartość istniejącą zmienną przepływu dla zmiennej przepływu docelowego. Pełną listę przepływu , które można wykorzystać jako źródło, znajdziesz w dokumentacji zmiennych przepływu.
  • Szablon wiadomości: użyj elementu podrzędnego <Template>, aby określić szablon wiadomości dla zmienną przepływu docelowego.

Element <AssignVariable> ma taką 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łową, użyj elementu <Ref>. Jeśli zmienna, do której odwołuje się <Ref>, jest niedostępna, Edge używa wartości określona przez element <Value>. Jeśli określisz parametr <Template>, ma pierwszeństwo przed innymi elementami podrzędnymi.

Przykład 1

W przykładzie poniżej ustawiana jest wartość nowej zmiennej (myvar) na literał wartość „42”:

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

Przykład 2

W przykładzie poniżej przypisano wartość zmiennej przepływu request.header.user-agent do zmiennej przepływu docelowego myvar i wartość parametru zapytania country do 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 któreś z przypisań się nie powiedzie, Edge przypisze wartość „ErrorOnCopy” do zmienną przepływu docelowego.

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

Przykład 3

W przykładzie poniżej użyto funkcji <Template> elementu podrzędnego łączącego dwie zmienne kontekstowe z ciągiem literału (łącznikiem) między nimi:

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

Typowym zastosowaniem funkcji <AssignVariable> jest ustawienie wartości domyślnej parametru zapytania, nagłówka lub innej wartości, którą można przekazać w żądaniu. Służy do tego kombinacja funkcji elementów podrzędnych <Ref> i <Value>. Więcej informacje znajdziesz w przykładach dla atrybutu <Ref>.

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

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

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

Element <Name> ma taką składnię:

Składnia

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

Przykład 1

Ten przykład określa zmienną docelową jako myvar i ustawia ją do wartości literału „42”:

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

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

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

Określa źródło przypisania jako zmienną przepływu. Zmienna przepływu może być jedną ze zmiennych wstępnie zdefiniowanych zmiennych przepływu (jak wymieniono w dokumentacji zmiennych przepływu) lub niestandardową zmienną przepływu utworzonej przez siebie.

Wartość <Ref> jest zawsze interpretowana jako zmienna przepływu. nie możesz określ ciąg literału jako . Aby przypisać wartość ciągu literału, użyj elementu <Value> .

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

Gdy podasz zmienną przepływu za pomocą funkcji <Ref>, pomiń znacznik nawiasy „{}” które normalnie służy do odwoływania się do zmiennej przepływu. Przykład: aby ustawić wartość nowej zmiennej na wartość przepływu client.host :

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

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

Aby zdefiniować domyślną wartość zmiennej przepływu docelowego, użyj funkcji <Value> w połączeniu z kolumną <Ref>. Jeśli zmienna przepływu określona przez <Ref> nie istnieje, nie może zostać odczytany lub ma wartość null, to Edge przypisuje wartość <Value> do zmiennej przepływu docelowego.

Element <Ref> ma taką 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 przykładzie poniżej przypisano wartość zmiennej przepływu request.header.user-agent do zmiennej przepływu docelowego myvar i wartość parametru zapytania country na zmienną Country:

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

W tym przykładzie Edge nie ma wartości domyślnej (ani wartości zastępczej) określonej dla projektu.

Przykład 2

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

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

W tym przykładzie, jeśli wartości zmiennej przepływu request.header.user-agent lub parametr zapytania Country ma wartość null, jest nieczytelny lub uszkodzony, Edge przypisuje wartość „ErrorOnCopy”, do nowych zmiennych.

Przykład 3

Typowy przypadek użycia <AssignVariable> to ustawienie wartości domyślnej zapytania. parametr, nagłówek lub inną wartość, którą można przekazać z żądaniem. Na przykład tworzysz serwer proxy interfejsu Weather API, w którym żądanie przyjmuje pojedynczy parametr zapytania o nazwie „w”. Ten zawiera identyfikator miasta, dla którego chcesz uzyskać prognozę pogody. Adres URL żądania zawiera formularz:

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

Aby zdefiniować wartość domyślną dla argumentu „w”, utwórz zasadę AssignMessage, taką jak :

<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> otrzymuje wartość request.queryparam.w. i przypisuje ją sobie. Jeśli zmienna przepływu ma wartość null, czyli „w” parametr zapytania był zostanie pominięty w żądaniu, wówczas w tym przykładzie zostanie użyta wartość domyślna z parametru <Value>. Dlatego możesz wysłać żądanie do tego interfejsu API serwer proxy z pomijaniem litery „w” parametr zapytania:

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

...i nadal serwer proxy interfejsu API zwraca prawidłowy wynik.

W przeciwieństwie do <Value>, wartość <Ref> musi być zmienną przepływu, np. właściwość request, response lub target. Może to być też utworzona przez Ciebie niestandardowa zmienna przepływu.

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

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

Określa szablon wiadomości. Wiadomość umożliwia zastępowanie ciągów zmiennych przy wykonywaniu zasady oraz może łączyć ciągi literał z nazwami zmiennych zapakowanymi w zakrętkę nawiasy klamrowe. Dodatkowo szablony wiadomości pomoc techniczna funkcji, takich jak zmiany znaczenia i konwertowanie wielkości liter.

Użyj atrybutu ref, aby określić zmienną przepływu, w której wartość zmiennej to szablon wiadomości. Możesz na przykład zapisać szablon wiadomości jako atrybut niestandardowy w aplikacji dewelopera. Gdy Edge wykryje aplikację dewelopera po zweryfikowaniu klucza interfejsu API. lub tokenu zabezpieczeń (za pomocą dodatkowych zasad), <AssignVariable> może używać szablonu wiadomości z atrybutu niestandardowego aplikacji, który jest dostępny jako zmienną przepływu z zasady zabezpieczeń. W przykładzie poniżej założono, że wiadomość szablon jest dostępny w atrybucie klienta o nazwie message_template w aplikacja deweloperska wywołująca interfejs API, przy czym do weryfikacji użyto zasady VerifyAPIKey klucz interfejsu API aplikacji:

<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> ma taką 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

Poniższy przykład używa składni szablonów wiadomości do połączenia 2 zmiennych kontekstowych z ciągiem literału (łącznikiem) między nimi:

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

Przykład 2

Poniższy przykład określa zmienną przepływu, w której wartość zmiennej to wstępnie zdefiniowany szablon wiadomości. Użyj tej opcji, jeśli chcesz wstrzyknąć wstępnie zdefiniowany szablon w środowiska wykonawczego 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

Następujący przykład określa zmienną przepływu i wartość tekstową. W tym przypadku, jeśli podana zmienna nie ma wartości null, ta wartość jest używana jako szablon. Jeśli w odniesieniu do wartość to null, a następnie wartość tekstowa (w tym przypadku {system.uuid}-{messageid}); . Ten wzorzec przydaje się do zastąpienia wartość, gdzie może się zdarzyć, że zechcesz zastąpić domyślny szablon (część tekstową) wartościami ustawiane dynamicznie. Na przykład instrukcja warunkowa może przechwycić wartość z mapowania par klucz-wartość i ustaw podaną zmienną na tę wartość:

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

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

Definiuje wartość zmiennej przepływu docelowego ustawionej za pomocą <AssignVariable>. wartość jest zawsze interpretowana jako literał; nie można użyć zmiennej przepływu jako wartości, nawet jeśli umieścisz ją w nawiasach kwadratowych („{}”). Aby używać zmiennej przepływu, użyj funkcji <Ref> .

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

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

Element <Value> ma taką 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

Poniższy przykład ustawia wartość zmiennej docelowego przepływu danych, myvar, do wartości literału „42”:

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

Przykład 2

W przykładzie poniżej przypisano wartość zmiennej przepływu request.header.user-agent do zmiennej przepływu myvar i wartości parametru zapytania country do zmiennej Country:

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

Jeśli któreś z przypisań się nie powiedzie, <AssignVariable> przypisze wartość „ErrorOnCopy” do zmienną przepływu docelowego.

<Copy>

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

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

Element <Copy> ma taką 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 poniższym przykładzie skopiujemy nagłówek, 3 parametry formularza, ścieżkę i całe zapytanie parametry z żądania do nowego, niestandardowego żądania:

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

Element <Copy> ma te atrybuty:

Atrybut Opis Wymagana? Typ
źródło

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

  • Jeśli source nie jest określony, jest traktowany jako zwykła wiadomość. Dla: na przykład jeśli zasada znajduje się w przepływie żądań, domyślną wartością źródła jest request obiekt. Jeśli zasada znajduje się w procesie odpowiedzi, domyślnie przyjmuje się wartość response obiekt. Jeśli pominiesz source, możesz użyć zmiennej bezwzględnej ze zmienną przepływu jako źródłem kopii. Na przykład podaj wartość jako {request.header.user-agent}.
  • Jeśli zmiennej źródłowej nie można rozpoznać lub przechodzi się do typu innego niż wiadomość, <Copy> nie odpowiada.
Opcjonalnie Ciąg znaków

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

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

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> ma taką 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

Poniższy przykład pokazuje skopiowanie pojedynczego parametru formularza z żądania do request custom request "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

Przykład poniżej skopiuje wszystkie parametry formularza do żądania niestandardowego &quot;MyCustomRequest&quot;:

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

Przykład 3

Poniższy przykład skopiuje do żądania niestandardowego 3 parametry formularza &quot;MyCustomRequest&quot;:

<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 wiele parametrów formularza ma taką samą nazwę, użyj tej składni:

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

W tym przykładzie skopiujemy wartości „f1”, „f2” i drugą wartość „f3”. Jeśli „f3” ma tylko jedną , nie zostanie ona skopiowana.

Z <FormParams> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Czasownik HTTP: POST
  • Typ wiadomości: odpowiedź
  • Jeden (lub oba) z tych elementów:
    • Dane formularza: ustaw jakąś wartość lub „” (pusty ciąg znaków). Na przykład curl, dodaj do swojej prośby: -d "".
    • Nagłówek Content-Length: ustaw na 0 (jeśli w pierwotne żądanie; w przeciwnym razie bieżąca długość. Na przykład curl dodaj użytkownika -H "Content-Length: 0" do Twojej prośby.

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

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

Kopiuje nagłówki HTTP z żądania lub odpowiedzi określonej przez atrybut source elementu <Copy> do żądania lub komunikat z odpowiedzią określony w elemencie <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> ma taką 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 poniższym przykładzie skopiujemy nagłówek user-agent z żądania do nowy, niestandardowy obiekt żą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 przykładzie poniżej programy:

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

Przykład 3

W przypadku wielu 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 skopiujemy wartości „h1”, „h2” i drugą wartość „h3”. Jeśli „h3” ma tylko jedną , nie zostanie ona skopiowana.

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

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

Jeśli zasada ma wartość „true”, ta zasada kopiuje ścieżkę z komunikatu żądania określonego w parametrze atrybut source elementu <Copy> do żądania komunikat określony w elemencie <AssignTo>.

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

Element <Path> ma taką 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

W poniższym przykładzie widać, że zasada AssignMessage powinna kopiować ścieżkę ze źródła do nowego, niestandardowego obiektu żądania:

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

Z <Path> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Typ wiadomości: prośba

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

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

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

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

Element <Payload> ma taką 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 <Payload> ma wartość „true” (prawda) tak aby ładunek żądania skopiowano 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 tagu <Copy>)

Kopiuje parametry ciągu zapytania z żądania określonego przez atrybut source elementu <Copy> do określonego żądania 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> ma taką 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

Poniższy przykład kopiuje parametr „my_param” z żądania do nowego, niestandardowy obiekt żądania:

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

Przykład 2

Następujący przykład powoduje skopiowanie wszystkich parametrów zapytania z żądania do nowego niestandardowego obiekt żą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 wiele parametrów zapytania ma taką samą nazwę, użyj tej składni:

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

W tym przykładzie skopiujemy wartości „qp1”, „qp2” i drugą wartość „qp3”. Jeśli „qp3” ma tylko nie jest kopiowana.

Z <QueryParams> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Czasownik HTTP: GET
  • Typ wiadomości: prośba

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

Określa, czy wyrażenie przyczyny powinno zostać skopiowane z odpowiedzi źródłowej do odpowiedź miejsca docelowego. Ten element nie ma wpływu na żądanie.

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

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

Element <ReasonPhrase> ma taką 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

Poniższy przykład ustawia <ReasonPhrase> na „true”, co powoduje, że <Copy> aby skopiować wyrażenie przyczyny z odpowiedzi domyślnej 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>

Z <ReasonPhrase> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Typ wiadomości: odpowiedź

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

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

Jeśli ma wartość „true” (prawda), ta zasada kopiuje kod stanu z komunikatu odpowiedzi określonego w parametrze atrybutu source elementu <Copy> do odpowiedzi komunikat określony w elemencie <AssignTo>.

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

Element <StatusCode> ma taką 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 poniższym przykładzie ustawienie <StatusCode> ma wartość „true”, co powoduje skopiowanie kodu stanu z domyślnego obiektu odpowiedzi do nowego, niestandardowego obiektu odpowiedzi:

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

Z <StatusCode> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Typ wiadomości: odpowiedź

Typowym zastosowaniem atrybutu <StatusCode> jest zapewnienie tego samego stanu odpowiedzi serwera proxy jako odpowiedź otrzymaną od celu, gdy createNew użytkownika <AssignTo> ma wartość „true” (prawda).

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

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

Jeśli wartość to „true”, kopiuje czasownik znaleziony w atrybucie source elementu <Copy> w odpowiedzi na żądanie określone w elemencie <AssignTo>.

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

Element <Verb> ma taką 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 poniższym przykładzie <Verb> ma wartość „true”, co powoduje skopiowanie czasownika z funkcji ustaw domyślne żądanie na nowe, niestandardowe żądanie:

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

Z <Verb> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Typ wiadomości: prośba

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

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

Jeśli wartość to „true”, skopiuje wersję HTTP z atrybutu source elementu <Copy>. do obiektu określonego przez element <AssignTo>.

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

Element <Version> ma taką 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> ma wartość „true” (prawda) który następnie z domyślnego obiektu żądania do nowego, niestandardowego obiektu żądania:

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

Z <Version> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Typ wiadomości: prośba

<DisplayName>

Używaj oprócz atrybutu name do oznaczania zasady w edytor serwera proxy w interfejsie zarządzania o innej, bardziej naturalnie brzmiącej nazwie.

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

Wartość domyślna nie dotyczy
Wymagany? Opcjonalnie: Jeśli pominiesz <DisplayName>, wartość pary klucz-wartość jest używany atrybut name zasady
Typ Ciąg znaków
Element nadrzędny &lt;PolicyElement&gt;
Elementy podrzędne Brak

Element <DisplayName> ma taką 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 zatrzymuje się po napotkaniu nierozwiązanej zmiennej.

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

Ustaw jako true, aby ignorować nierozstrzygnięte zmienne i kontynuować przetwarzanie; w przeciwnym razie false Wartością domyślną jest false.

Ustawienie <IgnoreUnresolvedVariables> na true różni się od ustawienia Wartość parametru continueOnError <AssignMessage> do true, ponieważ dotyczy tylko ustawiania i pobierania wartości zmiennych. Jeśli ustawisz continueOnError na true, a następnie Edge ignoruje wszystkie błędy, nie tylko błędy napotkane podczas używania funkcji zmiennych.

Element <IgnoreUnresolvedVariables> ma taką 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 <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 z wiadomość. Może to być prośba lub odpowiedź. Ty określasz, który komunikat <Remove> działa za pomocą elementu <AssignTo>.

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

Typowy przypadek użycia <Remove> to usunięcie parametru zapytania zawierającego poufne dane z obiektu żądania przychodzącego, aby uniknąć przekazywania ich do serwera backendu.

Element <Remove> ma taką 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

Ten przykład pozwala usunąć treść wiadomości z odpowiedzi:

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

W przepływie odpowiedzi ta zasada usuwa treść odpowiedzi, zwracając tylko kod HTTP klientowi.

Przykład 2

Poniższy przykład pozwala usunąć wszystkie parametry formularza i parametr zapytania z przychodzących żądanie:

<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 tagu <Remove>)

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

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> ma taką 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

Ten przykład pozwala usunąć z żądania 3 parametry formularza:

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

Przykład 2

Ten przykład powoduje usunięcie z żądania wszystkich parametrów 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 wiele parametrów formularza ma taką samą nazwę, 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 usunięto wartości „f1”, „f2” i drugą wartość „f3”. Jeśli „f3” ma tylko jedną , nie jest ona usuwana.

Z <FormParams> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

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

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

Usuwa określone nagłówki HTTP z żądania lub odpowiedzi, które są określone przez <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> ma taką składnię:

Składnia

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

Przykład 1

Ten przykład pozwala usunąć z żądania nagłówek user-agent:

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

Przykład 2

Ten przykład pozwala usunąć wszystkie nagłówki z żądania:

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

Przykład 3

W przypadku wielu 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 usunięto wartości „h1”, „h2” i drugą wartość „h3” od wniosku. Jeśli „h3” ma tylko jedną wartość, nie jest usuwana.

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

Określa, czy <Remove> usuwa ładunek w żądaniu lub odpowiedzi, który jest określona przez element <AssignTo>. Ustaw jako „true” (prawda) do wyczyścić ładunek, w przeciwnym razie ma wartość „false” (fałsz). 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> ma taką 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 <Payload> ma wartość „true” (prawda) tak aby ładunek żądania wyczyszczono:

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

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

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

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> ma taką 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

Ten przykład pozwala usunąć z żądania pojedynczy parametr zapytania:

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

Przykład 2

Ten przykład pozwala usunąć z żądania wszystkie parametry zapytania:

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

Przykład 3

Jeśli wiele parametrów zapytania ma taką samą nazwę, 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 usunięto wartości „qp1”, „qp2” i drugą wartość „qp3” od wniosku. Jeśli „qp3” ma tylko jedną wartość, nie jest usuwana.

Przykład 4

Ten przykład pozwala usunąć z żądania parametr zapytania apikey:

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

Z <QueryParams> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Czasownik HTTP: GET
  • Typ wiadomości: prośba

<Set>

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

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

Element <Set> ma taką 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 tagu <Set>)

Zastępuje istniejące parametry formularza w żądaniu i zastępuje je nowymi wartościami które można określić za pomocą tego elementu. Ten element nie ma wpływu na odpowiedź.

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

Element <FormParams> ma taką 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

Poniższy przykład pokazuje parametr formularza o nazwie „myparam” do wartości Zmienna request.header.myparam w nowym żądaniu niestandardowym:

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

Z <FormParams> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

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

Jeśli zdefiniujesz w zasadach puste parametry formularza (<Add><FormParams/></Add>), zasada nie dodaje żadnego formularza . Działa to tak samo jak pominięcie <FormParams>.

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

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

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

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

Element <Headers> ma taką 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

Ten przykład ustawia nagłówek user-agent na wartość parametru Zmienna request.header.user-agent:

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

Jeśli w zasadach zdefiniujesz puste nagłówki (<Add><Headers/></Add>), zasada nie dodaje żadnych nagłówków. Ten jest równoważne z pominięciem <Headers>.

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

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

Definiuje treść żądania lub odpowiedzi, która jest wskazywana przez tag <AssignTo>. Może być to dowolny prawidłowy typ treści, np. tekstowych, 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> ma taką 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

Ten przykład ustawia ładunek w postaci zwykłego tekstu:

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

Przykład 2

Ten przykład ustawia ładunek JSON:

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

Przykład 3

Poniższy przykład wstawia wartości zmiennych do ładunku przez opakowanie nazw zmiennych w nawiasach klamrowych:

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

W starszych wersjach Apigee Edge – na przykład przed wersją Cloud 16.08.17 – możesz Nie używaj nawiasów klamrowych do oznaczenia odwołań do zmiennych w ładunkach JSON. W tych wydaniach jest wymagane do użycia atrybutów variablePrefix i variableSuffix do określić znaki separatora i używać ich do zawijania nazw zmiennych w następujący 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

Zawartość pliku <Payload> jest traktowana jako szablon wiadomości. Oznacza to, że Zasada AssignMessage zastępuje zmienne w nawiasach klamrowych wartością atrybutu w przypadku odwołanych zmiennych w czasie działania.

W poniższym przykładzie użyto składni nawiasów klamrowych do ustawienia części ł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 poniższej tabeli opisano atrybuty <Payload>:

Atrybut Opis Obecność Typ
contentType

Jeśli zostanie określony, wartość contentType zostanie przypisana do parametru Nagłówek HTTP Content-Type.

Opcjonalnie Ciąg znaków
variablePrefix Opcjonalnie określa początkowy separator zmiennej przepływu. Wartość domyślna to „{”. Dla: więcej informacji znajdziesz w dokumentacji zmiennych przepływu. Opcjonalnie Znak
variableSuffix Opcjonalnie określa separator końcowy w zmiennej przepływu. Domyślna wartość to „"}”. Dla: więcej informacji znajdziesz w dokumentacji zmiennych przepływu. Opcjonalnie Znak

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

Zastępuje istniejące parametry zapytania w żądaniu nowymi wartościami. Ten element nie ma żadnego efektu na odpowiedź.

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

Element <QueryParams> ma taką 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

Poniższy przykład pokazuje wartość „adresu” na wartość pary klucz-wartość Zmienna request.header.address:

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

Z <QueryParams> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Czasownik HTTP: GET
  • Typ wiadomości: prośba

Jeśli zdefiniujesz w zasadach puste parametry zapytania (<Set><QueryParams/></Set>), zasada nie ustawia żadnego zapytania . Działa to tak samo jak pominięcie <QueryParams>.

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

Ustawia wyrażenie określające powód w odpowiedzi. Zwykle robi się to podczas debugowania w połączeniu z parametrami <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> ma taką 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

Poniższy przykład zdefiniował proste wyrażenie przyczyny:

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

Przykład 2

Zawartość pliku <ReasonPhrase> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej w nawiasach klamrowych jest zastępowana w czasie działania wartością funkcji jak w następującym przykładzie:

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

Z <ReasonPhrase> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Typ wiadomości: odpowiedź

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

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

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

Element <StatusCode> ma taką 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

Ten przykład ustawia prosty kod stanu:

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

Przykład 2

Zawartość pliku <StatusCode> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej w nawiasach klamrowych zostanie w czasie działania zastąpiona wartością jak w następującym przykładzie:

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

Z <StatusCode> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Typ wiadomości: odpowiedź

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

Ustawia czasownik HTTP w żądaniu. 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> ma taką 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

Ten przykład ustawia prosty czasownik w żądaniu:

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

Przykład 2

Zawartość pliku <Verb> jest traktowana jako szablon wiadomości. Oznacza to, że zmienna ujęte w nawiasy klamrowe zostaną zastąpione w czasie działania wartością odwołania .

Ten przykład używa zmiennej do wypełniania czasownika:

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

Z <Verb> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Typ wiadomości: prośba

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

Określa wersję HTTP dla żą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> ma taką 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 ustawiany jest numer wersji na „1.1”:

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

Przykład 2

W tym przykładzie numer wersji ustawia się 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>

Zawartość pliku <Version> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej w nawiasach klamrowych zostanie zastąpiona w czasie działania wartością zmiennej .

Z <Version> możesz korzystać tylko wtedy, gdy są spełnione te kryteria:

  • Typ wiadomości: prośba

Tworzenie niestandardowych wiadomości z prośbami

Możesz użyć zasady AssignMessage, aby utworzyć niestandardową wiadomość z prośbą. Po utworzeniu niestandardowego możesz użyć go na kilka sposobów:

  • Dostęp do zmiennych w innych zasadach
  • Przekazywanie go do usługi zewnętrznej
.

Aby utworzyć niestandardową wiadomość z prośbą, użyj elementu <AssignTo> w zasadach AssignMessage . Ustaw createNew na „prawda” i podaj w treści nazwę nowej wiadomości. zgodnie z poniższym przykładem:

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

Domyślnie Edge nie wykonuje żadnych działań z niestandardową wiadomością żądania. Po utworzeniu Edge możesz kontynuować proces z pierwotnym żądaniem. Aby używać żądania niestandardowego, dodaj zasadę taką jak jako zasadę objaśnienia usługi do serwera proxy, która może przekazać żądanie niestandardowe do serwera proxy posprzedażna.

Na przykład te przykłady pozwalają tworzyć niestandardowe komunikaty dotyczące żądań:

Przykład 1

Ten przykład tworzy niestandardowy obiekt żądania za pomocą funkcji Assign Message:

<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 żądania o nazwie „MyCustomRequest”.
  • W MyCustomRequest ta zasada:
    • Kopiuje wartość nagłówka HTTP user-agent z nagłówka przychodzącego nową wiadomość. Ponieważ <Copy> wykorzystuje bezwzględne odwołanie do funkcji user-agent zmiennej przepływu, brak musisz określić atrybut source w <Copy>.
    • Ustawia parametr zapytania address w komunikacie niestandardowym na wartość parametru zapytania addy żądania przychodzącego.
    • Ustawia czasownik HTTP na GET.
  • Ustawia wartość <IgnoreUnresolvedVariables> na „false” (fałsz). Gdy <IgnoreUnresolvedVariables> to „false” (fałsz), jeśli jedna ze zmiennych, które próbuje dodać zasada, nie istnieje, Edge zostanie zatrzymana. i przetwarza dane w ramach procesu API.

Przykład 2

Oto inny przykład tworzenia niestandardowego obiektu żądania za pomocą funkcji Assign Wiadomość:

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

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

Dostęp do niestandardowej wiadomości z prośbą można uzyskać w innej zasadzie AssignMessage, która występuje później w przepływu danych. Poniższy przykład pobiera wartość niestandardowego komunikatu żądania Nagłówek user-agent:

<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 zasadzie AssignMessage, obejrzyj poniższe filmy.

Wideo Opis
Dlaczego przydzielasz Zasady dotyczące wiadomości? poznać zalety stosowania zasady AssignMessage do modyfikowania żądania do interfejsu API; bez modyfikowania kodu backendu.
Kopiuj elementy interfejsu API przy użyciu zasady AssignMessage Skopiuj elementy z żądania lub odpowiedzi interfejsu API i utwórz nowe żądanie lub odpowiedź przy użyciu zasady AssignMessage.
Usuń interfejs API elementów korzystających z zasady AssignMessage Usuń elementy interfejsu API i zmodyfikuj interfejs API, zanim dotrze do docelowego backendu za pomocą Zasada AssignMessage.
Dodaj i skonfiguruj interfejs API elementów korzystających z zasady AssignMessage zmień żądanie lub odpowiedź interfejsu API przez dodanie parametrów zapytania, nagłówków, parametrów formularza lub ładunków za pomocą zasady AssignMessage.
Utwórz niestandardowy zmienne korzystające z zasady AssignMessage Ustaw niestandardowe zmienne przepływu za pomocą zasady AssignMessage i wykorzystaj zmienne w innych zasad na serwerze proxy API.
Utwórz nowe obiektów żądań lub odpowiedzi za pomocą zasady AssignMessage Tworzenie nowych obiektów żądań lub odpowiedzi interfejsu API przy użyciu zasady AssignMessage w interfejsie API w środowisku wykonawczym.
Tworzenie przykładowego interfejsu API przy użyciu zasady AssignMessage Utwórz prosty przykładowy interfejs API REST, dodając zasadę AssignMessage w odpowiedzi przepływu danych.
Ustaw lub zmodyfikuj ładunek z użyciem zasady AssignMessage Przekształć żądanie REST na żądanie SOAP przez ustawienie ładunku SOAP przy użyciu zasady AssignMessage w czasie 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). Schematy zasad są dostępne na GitHubie.

Powiązane artykuły

Pracuję przykładowe zasady AssignMessage znajdziesz w przykładach platformy API.

Bardziej zaawansowany przykład zastępowania parametru target.url ProxyEndpoint znajdziesz w tym artykule społeczności Apigee.

Aby wyświetlić „ustaloną ścieżkę” w działaniu w zasadzie objaśnienia usługi, zapoznaj się z tym artykułem Learn by wykorzystaniem example w przykładach Apigee na GitHubie. Po prostu skopiuj repozytorium postępuj zgodnie z instrukcjami w tym temacie. W przykładzie użyto zasady AssignMessage do ustawienia ścieżki żądania. a następnie za pomocą zasad dotyczących wywołań usługi, aby wysłać żądanie do usługi zewnętrznej.