Zasada przypisywania wiadomości

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

Co

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

  • Dodawanie nowych parametrów formularza, nagłówków lub parametrów zapytania do wiadomości
  • Kopiowanie istniejących właściwości z jednej wiadomości do drugiej
  • Usuwanie nagłówków, parametrów zapytania, parametrów formularza lub ładunków wiadomości z wiadomości
  • Ustawianie wartości istniejących właściwości w wiadomości

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

Zasada AssignMessage może tworzyć lub zmieniać wiadomości albo zmienne przepływu. Użyj tych zasad, aby modyfikować wiadomości z żądaniami przed wysłaniem ich przez serwer proxy do systemów nadrzędnych lub modyfikować wiadomości z odpowiedziami przed przekazaniem ich do aplikacji korzystających z interfejsu API.

Element <AssignMessage>

Definiuje zasadę AssignMessage.

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

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

Składnia

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

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

Domyślne zasady

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

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

Gdy wstawisz nowe zasady AssignMessage w interfejsie Edge, szablon będzie zawierać szablony wszystkich możliwych operacji. Zazwyczaj wybierasz operacje, które chcesz wykonać w ramach tej zasady, i usuwasz pozostałe elementy podrzędne. Jeśli na przykład chcesz wykonać operację kopiowania, użyj elementu <Copy> i usuń z zasad elementy podrzędne <Add>, <Remove> i inne, aby zwiększyć czytelność.

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

Atrybut Domyślnie Wymagany? Description
name Nie dotyczy Wymagane

Wewnętrzna nazwa zasady. Wartość atrybutu name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekraczać 255 znaków.

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

continueOnError fałsz Opcjonalnie Ustaw wartość „false”, aby wyświetlać błąd, gdy zasada nie działa. To prawidłowy proces w przypadku większości zasad. Ustaw wartość „true”, aby kontynuować wykonywanie przepływu nawet po wystąpieniu błędu.
enabled prawda Opcjonalnie Ustaw wartość „true”, aby egzekwować zasadę. Ustaw wartość „false”, aby wyłączyć zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie powiązana z przepływem.
async   fałsz Wycofano Ten atrybut został wycofany.

W tabeli poniżej znajdziesz ogólny opis elementów podrzędnych elementu <AssignMessage>:

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

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

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

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

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

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

Przykłady

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

1. Dodaj nagłówek

W tym przykładzie do żądania dodawany jest nagłówek z elementem <Add>:

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

2. Usuń ładunek

Poniższy przykład usuwa ładunek z odpowiedzi za pomocą elementu <Remove>:

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

3. Zmodyfikuj odpowiedź

Poniższy przykład modyfikuje istniejący obiekt odpowiedzi, dodając do niego nagłówek:

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

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

W tym przykładzie w elemencie <AssignTo> jako nazwę zmiennej podano response, więc ta zasada modyfikuje obiekt odpowiedzi, który został pierwotnie ustawiony za pomocą danych zwróconych przez serwer docelowy.

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

4. Ustaw zawartość dynamiczną

Za pomocą funkcji Przypisz wiadomość możesz osadzać dynamiczną treść w ładunku wiadomości z odpowiedzią i wiadomości z prośbą.

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

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

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

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

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

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

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

5. Usuń parametr zapytania

Ten przykład usuwa z żądania parametr zapytania apikey:

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

6. Ustawianie i pobieranie zmiennych

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

  1. Tworzy w żądaniu 3 zmienne przepływu o wartościach statycznych.
  2. Dynamiczne pobieranie zmiennych przepływu w drugiej zasadzie w przepływie żądania
  3. Ustawia je w ładunku odpowiedzi.
<!-- Policy #1: Set variables in the request -->

<AssignMessage name="AM-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>
</AssignMessage>

W pierwszych zasadach element <AssignVariable> tworzy i ustawia w żądaniu 3 zmienne. Każdy element <Name> określa nazwę zmiennej, a element <Value> określa wartość.

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

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

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

Aby wypróbować ten zestaw zasad:

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

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

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

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

    Opcjonalnie możesz przekazać wyniki do narzędzia takiego jak xmllint, aby wyświetlić XML w odpowiednio sformatowanej strukturze:

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

    Treść odpowiedzi powinna wyglądać tak:

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

7. Pobierz nagłówki odpowiedzi wywołania usługi

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

<AssignMessage name="AM-Payload-from-SC-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

{calloutResponse.header.Set-Cookie.values}

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

Odwołanie do elementu podrzędnego

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

<Add>

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

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

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

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

Składnias1

<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 1s2

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

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 2s3

W tym przykładzie element <Headers> służy do dodania nagłówka partner-id do żądania, które zostanie wysłane do docelowego punktu końcowego:

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 3s4

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

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

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

Składnias5

<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 1s6

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

<AssignMessage name="AM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 2s7

W tym przykładzie pobierana jest wartość parametru zapytania name, która jest dodawana do żądania jako parametr formularza, a następnie parametr zapytania jest usuwany:

<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</AssignMessage>

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

Przykład 3s8

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

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

W tym przykładzie parametry ciągu zapytania są pobierane z żądania źródłowego i dodawane jako parametry formularza o różnych nazwach. Następnie usuwa oryginalne parametry zapytania. Apigee wyśle zmodyfikowane żądanie do docelowego punktu końcowego.

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

username=nick&zip_code=90210&default_language=en

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

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

Na przykład:

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

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

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

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

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

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

Składnias9

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

Przykład 1s10

W tym przykładzie do wiadomości żądania dodawany jest nagłówek partner-id, a do tego nagłówka przypisywana jest wartość zmiennej przepływu verifyapikey.VAK-1.developer.app.partner-id.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

Składnias11

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

Przykład 1s12

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

<AssignTo>

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

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

Pamiętaj, że w niektórych przypadkach nie możesz zmienić obiektu, na którym działa zasada AssignMessage. Nie możesz na przykład użyć <Add> ani <Set>, aby dodać lub zmienić parametry zapytania (<QueryParams>) lub parametry formularza (<FormParams>) w odpowiedzi. W przypadku żądania możesz modyfikować tylko parametry zapytania i parametry formularza.

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

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

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

Składnias13

<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 1s14

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

<AssignMessage name="assignto-1">
<!-- DO NOT do this -->
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Przykład 2s15

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

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

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

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

Przykład 3s16

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

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

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

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

W tabeli poniżej opisano atrybuty <AssignTo>:

Atrybut Opis Wymagany? Typ
createNew

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

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

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

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

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

  • Jeśli wartość tekstowa <AssignTo> prowadzi do wiadomości, przetwarzanie przechodzi do następnego kroku.
  • Jeśli nie można rozpoznać wartości tekstowej <AssignTo> lub jeśli jest ona innego typu niż wiadomość, tworzona jest nowa zmienna typu określonego w type.
Opcjonalny Wartość logiczna
transport

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

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

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

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

Opcjonalny Ciąg znaków

<AssignVariable>

Przypisuje wartość do zmiennej przepływu. Jeśli zmienna przepływu nie istnieje, <AssignVariable> ją utworzy.

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

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

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

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

Składnias17

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

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

Przykład 1s18

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

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

Przykład 2s19

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

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

Jeśli którekolwiek przypisanie się nie powiedzie, Edge przypisze do zmiennej przepływu docelowego wartość „ErrorOnCopy”.

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

Przykład 3s20

W przykładzie poniżej użyto elementu podrzędnego <Template>, aby połączyć 2 zmienne kontekstowe z ciągiem znaków (łącznikiem):

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

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

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

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

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

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

Składnias21

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

Przykład 1s22

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

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

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

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

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

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

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

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

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

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

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

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

Składnia

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

Przykład 1s23

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

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

W tym przykładzie w przypadku żadnego przypisania nie określono domyślnej wartości (ani wartości rezerwowej).

Przykład 2s23

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

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

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

Przykład 3s24

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Składnias25

<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 1s26

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

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

Przykład 2s27

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

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

Przykład 3s28

W tym przykładzie określono zmienną przepływu i wartość tekstową. W takim przypadku, jeśli zmienna, do której się odwołujesz, nie ma wartości null, jest ona używana jako szablon. Jeśli odwołująca się wartość jest pusta, jako szablon używana jest wartość tekstowa (w tym przypadku {system.uuid}-{messageid}). Ten wzorzec przydaje się do podawania wartości „zastępującej”, gdy w niektórych przypadkach chcesz zastąpić domyślny szablon (część tekstową) wartościami ustawianymi dynamicznie. Na przykład instrukcja warunkowa może pobrać wartość z mapy par klucz-wartość i ustawić zmienną, do której się odwołuje, na tę wartość:

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

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

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

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

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

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

Składnias29

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

Przykład 1

W tym przykładzie ustawiamy wartość zmiennej przepływu miejsca docelowego myvar na wartość literału „42”:

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

Przykład 2

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

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

Jeśli którekolwiek przypisanie się nie powiedzie, funkcja <AssignVariable> przypisze do zmiennej przepływu docelowego wartość „ErrorOnCopy”.

<Copy>

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

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

Jeśli nie określisz żadnych elementów podrzędnych pod elementem <Copy>, skopiowane zostaną wszystkie części wyznaczonego wiadomości źródłowej.

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

Składnias30

<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 1s31

W tym przykładzie nagłówek, 3 parametry formularza, ścieżka i wszystkie parametry zapytania z wiadomości request są kopiowane do nowego żądania niestandardowego o nazwie newRequest:

<AssignMessage name="AM-copy-1">
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1"/>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1"/>
      <FormParam name="Form_Param_Name_2"/>
      <FormParam name="Form_Param_Name_3"/>
    </FormParams>
    <Path>true</Path>
    <QueryParams/>
  </Copy>
</AssignMessage>

Ponieważ elementy takie jak <Payload><Verb> nie są obecne, zasady nie kopiują tych części wiadomości.

Przykład 2s32

W tym przykładzie najpierw usuwamy wszystko z istniejącej wiadomości response, a potem kopiujemy wszystkie wartości z innej wiadomości o nazwie secondResponse do wiadomości response:

<AssignMessage name='AM-Copy-Response'>
  <AssignTo createNew="false" transport="http" type="response">response</AssignTo>
  <!-- first remove any existing values -->
  <Remove/>
  <!-- then copy everything from the designated message -->
  <Copy source="secondResponse"/>
</AssignMessage>

Element <Copy> ma jeden atrybut:

Atrybut Opis Wymagany? Typ
źródło

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

  • Jeśli nie podasz właściwości source, domyślnie używana jest wartość message, która przyjmuje inną wartość w zależności od przepływu, w którym jest wykonywana zasada. Jeśli zasada jest wykonywana w ramach przepływu żądania, zmienna message odnosi się do obiektu request. Jeśli zasada jest wykonywana w ramach przepływu odpowiedzi, zmienna message odnosi się do obiektu response.
  • Jeśli zmienna źródłowa nie może zostać rozpoznana lub zostanie rozpoznana jako typ inny niż wiadomość, <Copy> nie odpowie.
Opcjonalny Ciąg znaków

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

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

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

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

Składnias33

<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 1s34

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

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

Przykład 2s35

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

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

Przykład 3s36

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

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

Przykład 4s37

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

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

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

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

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

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

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

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

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

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

Składnias38

<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 1s39

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

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

Przykład 2s40

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

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

Przykład 3s41

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

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

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

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

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

Jeśli wartość to „true”, ta zasada kopiuje ścieżkę z wiadomości z żądaniem określonej przez atrybut source elementu <Copy> do wiadomości z żądaniem określonej przez element <AssignTo>.

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

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

Składnia

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

Przykład 1s42

Poniższy przykład pokazuje, że zasada AssignMessage powinna skopiować ścieżkę z żądania źródłowego do nowego, niestandardowego obiektu żądania:

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

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

  • Typ wiadomości: żądanie

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

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

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

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

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

Składnias43

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

Przykład 1s44

W tym przykładzie ustawiamy wartość <Payload> na „true”, aby ładunek żądania został skopiowany z żądania do odpowiedzi:

<AssignMessage name="AM-copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

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

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

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

Składnias45

<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 1s46

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

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

Przykład 2s47

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

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

Przykład 3s48

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

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

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

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

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

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

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

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

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

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

Składnias49

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

Przykład 1s50

W tym przykładzie ustawiamy wartość <ReasonPhrase> na true. Przy określonym elemencie źródłowym i <AssignTo> powoduje to skopiowanie przez <Copy> frazy przyczyny z nazwanego komunikatu odpowiedzi do obiektu response:

<AssignMessage name="AM-copy-reasonphrase-1">
  <Copy source="serviceCalloutResponse">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo>response</AssignTo>
</AssignMessage>

Możesz używać funkcji <ReasonPhrase> tylko wtedy, gdy wiadomości źródłowe i docelowe są typu Response.

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

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

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

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

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

Składnias52

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

Przykład 1s53

W tym przykładzie wartość parametru <StatusCode> jest ustawiona na „true”, co powoduje skopiowanie kodu stanu z domyślnego obiektu odpowiedzi do nowego, niestandardowego obiektu odpowiedzi:

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

Możesz używać funkcji <StatusCode> tylko wtedy, gdy wiadomości źródłowe i docelowe są typu Response.

Częstym zastosowaniem <StatusCode> jest ustawienie kodu stanu odpowiedzi serwera proxy na wartość inną niż ta otrzymana z serwera docelowego.

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

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

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

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

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

Składnias54

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

Przykład 1s55

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

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

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

  • Typ wiadomości: żądanie

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

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

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

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

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

Składnias56

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

Przykład 1s57

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

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

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

  • Typ wiadomości: żądanie

<DisplayName>

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

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

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

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

Składnia

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

Przykład

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

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

<IgnoreUnresolvedVariables>

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

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

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

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

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

Składnias58

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

Przykład 1s59

W tym przykładzie wartość parametru <IgnoreUnresolvedVariables> jest ustawiona na „true”:

<AssignMessage name="AM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
</AssignMessage>

Ponieważ zasada <IgnoreUnresolvedVariables> ma wartość true, jeśli zmienna possibly-defined-variable nie jest zdefiniowana, ta zasada nie spowoduje błędu.

<Remove>

Usuwa z wiadomości nagłówki, parametry zapytania, parametry formularza lub ładunek wiadomości. Wiadomość może być prośbą lub odpowiedzią. Określasz, na którą wiadomość <Remove> ma wpływ, za pomocą elementu <AssignTo>.

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

Typowym zastosowaniem <Remove> jest usuwanie z obiektu żądania przychodzącego parametru zapytania lub nagłówka zawierającego informacje poufne, aby uniknąć przekazywania go na serwer backendu.

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

Składnias60

<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 1s61

Poniższy przykład usuwa treść wiadomości z odpowiedzi:

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

W przypadku przepływu odpowiedzi ta zasada usuwa treść odpowiedzi i zwraca do klienta tylko nagłówki HTTP.

Przykład 2s62

W tym przykładzie z obiektu request usuwane są wszystkie parametry formularza i parametr zapytania:

<AssignMessage name="AM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 3s63

Poniższy przykład usuwa wszystko z obiektu wiadomości:

<AssignMessage name="AM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</AssignMessage>

Zwykle robisz to tylko wtedy, gdy zamierzasz użyć elementu <Set> lub <Copy>, aby ustawić w wiadomości wartości zastępcze.

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

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

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

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

Składnias64

<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 1s65

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

<AssignMessage name="AM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 2s66

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

<AssignMessage name="AM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 3s67

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

<AssignMessage name="AM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

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

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

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

Składnia

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

Przykład 1s68

Ten przykład usuwa z żądania nagłówek user-agent:

<AssignMessage name="AM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 2s69

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

<AssignMessage name="AM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 3s70

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

<AssignMessage name="AM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

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

Składnia

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

Przykład 1s71

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

<AssignMessage name="AM-remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

Składnias72

<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 1s73

W tym przykładzie z żądania usuwany jest jeden parametr zapytania:

<AssignMessage name="AM-remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 2s74

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

<AssignMessage name="AM-remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 3s75

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

<AssignMessage name="AM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

Przykład 4s76

Ten przykład usuwa z żądania parametr zapytania apikey:

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

<Set>

Ustawia informacje w wiadomości żądania lub odpowiedzi, które są określone przez element <AssignTo>. <Set> zastępuje nagłówki lub parametry zapytania albo formularza, które już istnieją w oryginalnej wiadomości. Nagłówki oraz parametry zapytań i formularzy w wiadomości HTTP mogą zawierać wiele wartości. Aby dodać kolejne wartości nagłówka lub parametru, użyj elementu <Add>.

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

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

Składnia

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

Przykład 1s77

W tym przykładzie ustawiamy konkretny nagłówek. Gdy ta zasada jest dołączona do przepływu żądania, system nadrzędny może otrzymać dodatkowy nagłówek, który nie był uwzględniony w  oryginalnym żądaniu przychodzącym.

<AssignMessage name="AM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 2s78

Poniższy przykład zastępuje ładunek odpowiedzi, a także nagłówek Content-Type.

<AssignMessage name="AM-Overwrite-Payload">
  <Set>
    <Payload contentType="application/json">{ "status" : 42 }</Payload>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

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

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

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

Składnias79

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

Przykład 1s80

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

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

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

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

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

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

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

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

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

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

Składnias81

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

Przykład 1s81

W tym przykładzie nagłówek x-ratelimit-remaining jest ustawiony na wartość zmiennej ratelimit.Quota-1.available.count:

<AssignMessage name="AM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

Jeśli w zasadach zdefiniujesz puste nagłówki (<Set><Headers/></Set>), zasady nie ustawią żadnych nagłówków. Będzie to miało taki sam efekt jak pominięcie <Headers>.

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

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

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

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

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

Składnias82

<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 1s83

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

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

Przykład 2s84

Poniższy przykład ustawia ładunek JSON:

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

Przykład 3s85

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

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

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

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

Ta starsza składnia nadal działa.

Przykład 4s86

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

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

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

W tabeli poniżej opisano atrybuty <Payload>:

Atrybut Opis Obecność Typ
contentType

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

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

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

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

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

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

Składnias87

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

Przykład 1s88

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

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

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

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

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

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

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

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

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

Składnias89

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

Przykład 1s90

W tym przykładzie zdefiniowano prosty tekst uzasadnienia:

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

Przykład 2s91

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

<AssignMessage name="AM-set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

  • Typ wiadomości: odpowiedź

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

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

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

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

Składnias92

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

Przykład 1

W tym przykładzie ustawiamy prosty kod stanu:

<AssignMessage name="AM-set-statuscode-404">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

Przykład 2

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

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

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

  • Typ wiadomości: odpowiedź

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

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

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

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

Składnia

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

Przykład 1s93

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

<AssignMessage name="AM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

Przykład 2s94

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

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

<AssignMessage name="AM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

  • Typ wiadomości: żądanie

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

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

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

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

Składnias95

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

Przykład 1s96

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

<AssignMessage name="AM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
 </AssignMessage>

Przykład 2

W przykładzie poniżej użyto zmiennej w nawiasach klamrowych do ustawienia numeru wersji:

<AssignMessage name="AM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

  • Typ wiadomości: żądanie

Tworzenie niestandardowych wiadomości z prośbą

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

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

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

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

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

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

Przykład 1s97

W tym przykładzie tworzymy niestandardowy obiekt żądania z przypisaniem wiadomości:

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

Przykład:

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

Przykład 2s98

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

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

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

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

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

Filmy

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

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

Kody błędów

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

Błędy w czasie wykonywania

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

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

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

Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowana aplikacja Edge Zmienne przepływu request, response i message są typem komunikatu. Aby dowiedzieć się więcej, o zmiennych wiadomości znajdziesz w dokumentacji zmiennych.

steps.assignmessage.UnresolvedVariable 500

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

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

Błędy wdrażania

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

Nazwa błędu Przyczyna Napraw
InvalidIndex Jeśli indeks określony w elementach <Copy> i/lub <Remove> pliku Assign Message (Przypisywanie wiadomości) ma wartość 0 lub jest liczbą ujemną, wdrożenie serwera proxy interfejsu API się nie uda.
InvalidVariableName Jeśli element podrzędny <Name> jest pusty lub nie został określony w elemencie <AssignVariable>, wdrożenie serwera proxy interfejsu API nie powiedzie się, ponieważ brakuje prawidłowej nazwy zmiennej, aby przypisać wartość. Wymagana jest prawidłowa nazwa zmiennej.
InvalidPayload Ładunek określony w zasadzie jest nieprawidłowy.

Zmienne błędów

Te zmienne są ustawiane, gdy ta zasada wywołuje błąd w czasie działania. Aby dowiedzieć się więcej, zapoznaj się z artykułem Co musisz wiedzieć o błędach związanych z naruszeniem zasad.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu podana w tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. assignmessage.AM-SetResponse.failed = true

Przykładowa odpowiedź na błąd

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

Przykładowa reguła błędu

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

Schematy

Każdy typ zasad jest zdefiniowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.

Powiązane artykuły

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

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

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