Zasada przypisywania wiadomości

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

Co

Zasada AssignMessage zmienia lub tworzy nowe komunikaty żądań i odpowiedzi podczas przepływu proxy interfejsu API. Zasady umożliwiają wykonywanie na tych wiadomościach tych działań:

  • dodawać do wiadomości nowe parametry formularza, nagłówki lub parametry zapytania;
  • Kopiowanie istniejących właściwości z jednej wiadomości do drugiej.
  • Usuwanie nagłówków, parametrów zapytania, parametrów formularza lub ładunków wiadomości z wiadomości.
  • ustawić wartość istniejących właściwości w wiadomości,

Zasada AssignMessage zwykle służy do dodawania, zmieniania lub usuwania właściwości żądania lub odpowiedzi. Możesz jednak użyć zasady AssignMessage, aby utworzyć niestandardowy komunikat żądania lub odpowiedzi i przekazać go do alternatywnego celu, jak opisano w artykule Tworzenie niestandardowych komunikatów żądania.

Zasada AssignMessage może tworzyć lub zmieniać wiadomości lub zmienne przepływu. Użyj tej zasady, aby zmodyfikować komunikaty żądań przed wysłaniem ich przez serwer proxy do systemów nadrzędnych lub komunikaty odpowiedzi przed przekazaniem ich do aplikacji konsumenckich interfejsu API.

Element <AssignMessage>

Definiuje zasadę AssignMessage.

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

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

Składnia

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

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

Zasada domyślna

Ten przykład pokazuje domyślne ustawienia, gdy dodajesz zasadę 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 nową zasadę AssignMessage w interfejsie Edge, szablon będzie zawierać kody dla wszystkich możliwych operacji. Zwykle wybierasz operacje, które chcesz wykonać za pomocą tej zasady, i usuwasz pozostałe elementy podrzędne. Jeśli na przykład chcesz wykonać operację kopiowania, użyj elementu <Copy> i usuń elementy <Add>, <Remove> i inne elementy podrzędne z zasady, aby była bardziej czytelna.

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.

Tabela poniżej zawiera ogólny opis elementów podrzędnych <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 istnieją 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 określonej w elemencie <AssignTo>.
<Set> Opcjonalny Zastępuje wartości istniejących właściwości w żądaniu lub odpowiedzi, które są określone przez element <AssignTo>.

<Set> zastępuje nagłówki lub parametry, które już istnieją w pierwotnej 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ć standardowe żądanie 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 zostać zatrzymane, gdy zostanie napotkana nierozwiązana zmienna.

Każdy z tych elementów podrzędnych jest opisany w sekcjach poniżej.

Przykłady

Oto kilka przykładów użycia zasady AssignMessage:

1. Dodaj nagłówek

Ten przykład dodaje nagłówek do żądania za pomocą elementu <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

W tym przykładzie ładunek jest usuwany 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ź

W tym przykładzie modyfikujemy 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>

W tym przykładzie nie jest tworzona nowa wiadomość. Zamiast tego modyfikuje istniejącą wiadomość odpowiedzi, dodając nagłówek HTTP.

Ponieważ w tym przykładzie w elemencie <AssignTo> jako nazwę zmiennej podano response, ta zasada modyfikuje obiekt odpowiedzi, który został pierwotnie ustawiony z danymi zwróconymi przez serwer docelowy.

Nagłówek HTTP dodany do komunikatu odpowiedzi przez tę zasadę pochodzi ze zmiennej wypełnionej przez zasadę LookupCache. Dlatego komunikat odpowiedzi zmodyfikowany przez tę zasadę przypisywania komunikatów 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ą zasady przypisania komunikatu możesz umieszczać dynamiczną zawartość w ładunku wiadomości odpowiedzi i żądania.

Aby umieścić zmienne przepływu Edge w ładunku XML, ujmij wyznaczoną zmienną w nawiasy klamrowe, na przykład: {prefix.name}.

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

<AssignMessage name="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 variablePrefix i variableSuffix ze znakami separatora, jak w tym przykładzie:

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

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

Od wersji Cloud 16.08.17 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 parametru zapytania apikey z wiadomości żądania. W ten sposób zapobiegasz przekazywaniu poufnych informacji o kluczu do docelowego backendu.

6. Ustawianie i pobieranie zmiennych

W tym przykładzie użyto 3 zasad przypisywania komunikatów:

  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 pierwszej zasadzie element <AssignVariable> tworzy i ustawia 3 zmienne w żądaniu. Każdy element <Name> określa nazwę zmiennej, a <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 zasady 1 i 2 do przepływu żądań. Pamiętaj, aby umieścić zasadę 1 przed zasadą 2.
  2. Dodaj trzecią zasadę w przepływie odpowiedzi.
  3. Trzecia zasada używa elementu <Set>, aby dodać zmienne do odpowiedzi. Poniższy przykład tworzy ładunek XML w odpowiedzi, którą Edge zwraca klientowi:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true
      </IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>

    Pamiętaj, że aby uzyskać dostęp do zmiennych przepływu w <Set>, musisz umieścić je w nawiasach klamrowych.

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

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

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

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

    Treść odpowiedzi powinna wyglądać mniej więcej tak:

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

7. Pobieranie nagłówków 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 wiele nagłówków o tej samej nazwie (Set-Cookie). Zakładając, że zmienna odpowiedzi wywołania usługi to domyślna zmienna 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ć listę wszystkich wartości nagłówka, użyj tej zmiennej:

{calloutResponse.header.Set-Cookie.values}

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

Dokumentacja elementu podrzędnego

W tej sekcji opisano 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 istnieją w oryginalnej wiadomości. Aby zmienić wartości istniejących właściwości, użyj elementu <Set>.

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

Element <Add> używa tej 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 użyto elementu <FormParams>, aby pobrać wartości 3 parametrów ciągu zapytania z początkowego żądania i ustawić je jako parametry formularza w żądaniu docelowego punktu końcowego:

<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 użyto elementu <Headers>, aby dodać nagłówek 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 użyto elementu <QueryParams>, aby dodać do żądania pojedynczy parametr 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 używamy <Add> w preflow żądania. Jeśli przyjrzysz się wynikom w narzędziu takim jak narzędzie do śledzenia, zobaczysz, że żądanie do https://example-target.com/get staje się żądaniem do https://example-target.com/get?myParam=42.

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

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

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

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

Element <FormParams> używa tej 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 dodawany jest pojedynczy parametr formularza („answer”) i wartość statyczna („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>

Zwróć uwagę, że w tym przykładzie nie określono celu za pomocą <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>

Ten przykład pobiera parametry ciągu zapytania z żądania źródłowego i dodaje je jako parametry formularza o różnych nazwach. Następnie usuwa pierwotne parametry zapytania. Apigee wyśle zmodyfikowane żądanie do docelowego punktu końcowego.

Aby sprawdzić przepływ, możesz użyć narzędzia do śledzenia. Zobaczysz, że treść żądania zawiera dane formularza zakodowane na potrzeby adresu URL, które pierwotnie zostały przekazane 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: prośba
  • Jedna z tych opcji (lub obie):
    • Dane formularza: ustaw na jakąś wartość lub „” (pusty ciąg znaków). Jeśli na przykład używasz curl, dodaj do żądania -d "".
    • Nagłówek Content-Length: ustaw na 0 (jeśli w pierwotnym żądaniu nie ma danych; w przeciwnym razie ustaw bieżącą długość w bajtach). Na przykład w przypadku curl dodaj do żądania -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 elementu <Add>)

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

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

Element <Headers> używa tej 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 elementu <Add>)

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

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

Element <QueryParams> używa tej 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” i przypisywana jest mu 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: prośba

Dodatkowo parametry zapytania możesz ustawić tylko wtedy, gdy atrybut type elementu <AssignTo> jest komunikatem żądania. Ustawienie ich w odpowiedzi nie ma żadnego efektu.

Jeśli w zasadzie zdefiniujesz pustą tablicę parametrów zapytania (<Add><QueryParams/></Add>), zasada nie doda żadnych parametrów zapytania. To samo co pominięcie <QueryParams>.

<AssignTo>

Określa obiekt, na którym działa zasada AssignMessage. Dostępne są te opcje:

  • Komunikat żądania: request odebrany przez serwer proxy interfejsu API.
  • Response message (Komunikat 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. Na przykład nie możesz użyć <Add> ani <Set>, aby dodać lub zmienić parametry zapytania (<QueryParams>) lub parametry formularza (<FormParams>) w odpowiedzi. W żądaniu możesz manipulować tylko parametrami zapytania i parametrami formularza.

Wartość domyślna nie dotyczy
Wymagane? 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ślnym żądaniu lub odpowiedzi, w zależności od tego, gdzie jest wykonywana. Jeśli zasada jest wykonywana w przepływie żądania, wpływa na komunikat żądania. Jeśli zasada jest wykonywana w przepływie odpowiedzi, domyślnie wpływa na odpowiedź.

Element <AssignTo> używa tej 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 tym przykładzie określono, że elementem docelowym jest pierwotne żądanie, które zostanie wysłane do docelowego 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 tworzony jest nowy obiekt żądania:

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

Gdy utworzysz nowy obiekt żądania lub odpowiedzi, inne elementy zasady AssignMessage (takie jak <Add>, <Set> i <Copy>) będą działać na tym nowym obiekcie żądania.

Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach w dalszej części przepływu lub wysłać nowy obiekt żądania do usługi zewnętrznej za pomocą zasady ServiceCallout.

Przykład 3s16

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

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

Gdy utworzysz nowy obiekt żądania lub odpowiedzi, inne elementy zasady AssignMessage (takie jak <Add>, <Set> i <Copy>) będą działać na tym nowym obiekcie żądania.

Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach na dalszym etapie przepływu lub wysłać nowy obiekt żądania do usługi zewnętrznej za pomocą zasady 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 ustawiona zostanie wartość „true”, zasada utworzy nową zmienną typu określonego przez type („request” lub „response”). Jeśli nie podasz nazwy nowej zmiennej, zasada utworzy nowy obiekt żądania lub odpowiedzi na podstawie wartości type.

Jeśli wartość to „false”, zasada reaguje na jeden z 2 sposobów:

  • Jeśli <AssignTo> może rozpoznać nazwę zmiennej jako żądanie lub odpowiedź, kontynuuje przetwarzanie. Jeśli na przykład zasada znajduje się w przepływie żądania, zmienna jest obiektem żądania. Jeśli zasada jest w odpowiedzi, zmienna jest obiektem odpowiedzi.
  • Jeśli nie można rozpoznać zmiennej <AssignTo> lub jest ona rozpoznawana jako typ inny niż wiadomość, zasada zgłasza błąd.

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

  • Jeśli wartość tekstowa <AssignTo> jest rozpoznawana jako wiadomość, przetwarzanie przechodzi do następnego kroku.
  • Jeśli nie można rozpoznać wartości tekstowej <AssignTo> lub jest ona rozpoznawana jako typ inny 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 parametr createNew ma wartość „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, gdzie w przepływie jest wykonywana 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
Wymagane? Opcjonalny
Typ Typ złożony
Element nadrzędny <AssignMessage>
Elementy podrzędne <Name> (wymagane)
<Ref>
<Template>
<Value>

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

  • Ciąg znaków: użyj elementu podrzędnego <Value>, aby określić wartość ciągu znaków 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órych można używać jako źródła, znajdziesz w dokumentacji zmiennych przepływu.
  • Szablon wiadomości: użyj elementu podrzędnego <Template>, aby określić szablon wiadomości do interpolacji, aby uzyskać wartość do umieszczenia w docelowej zmiennej przepływu.

Element <AssignVariable> używa tej 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>

Aby określić zmienną źródłową, użyj elementu <Ref>. Jeśli zmienna, do której odwołuje się <Ref>, jest niedostępna, Edge używa wartości okreś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 docelowej zmiennej przepływu myvar, a wartość parametru zapytania country do docelowej zmiennej przepływu Country:

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

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

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

Przykład 3s20

W przykładzie poniżej użyto elementu podrzędnego <Template> do połączenia 2 zmiennych kontekstowych z ciągiem znaków (myślnikiem) 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>

Typowym zastosowaniem <AssignVariable> jest ustawienie wartości domyślnej parametru zapytania, nagłówka lub innej wartości, którą można przekazać w żądaniu. Możesz to zrobić za pomocą kombinacji elementów podrzędnych <Ref> i <Value>. Więcej informacji znajdziesz w przykładach dotyczących <Ref>.

<Name> (element podrzędny elementu <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, zasada utworzy zmienną o tej nazwie.

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

Element <Name> używa tej 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 jest określona jako myvar i ma ustawiony literał „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 elementu <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ć ciągu znaków jako wartości. Aby przypisać wartość ciągu znaków, użyj elementu <Value>.

Wartość domyślna nie dotyczy
Wymagane? 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 przepływu client.host:

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

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

Aby zdefiniować domyślną wartość zmiennej przepływu docelowego, użyj <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> używa tej składni:

Składnia

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

Przykład 1s23

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

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

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

Przykład 2s23

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

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

Jeśli w tym przykładzie 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 przypadkiem użycia <AssignVariable> jest ustawienie domyślnej wartości parametru zapytania, nagłówka lub innej wartości, którą można przekazać w żądaniu. Możesz na przykład utworzyć proxy interfejsu API Weather API, w którym żądanie przyjmuje pojedynczy parametr zapytania o nazwie „w”. Ten parametr zawiera identyfikator miasta, dla którego chcesz sprawdzić pogodę. Adres URL żądania ma postać:

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

Aby zdefiniować wartość domyślną dla „w”, utwórz zasadę AssignMessage w ten sposób:

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

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

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

…i nadal otrzymywać prawidłowy wynik z serwera proxy interfejsu API.

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

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

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

Określa szablon wiadomości. Szablon wiadomości umożliwia zastępowanie zmiennych ciągów znaków podczas wykonywania zasady i może łączyć ciągi znaków z nazwami zmiennych w nawiasach klamrowych. Dodatkowo szablony wiadomości obsługują funkcje takie jak zmiana wielkości liter czy znaki ucieczki.

Użyj atrybutu ref, aby określić zmienną przepływu, której wartością jest szablon 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 zabezpieczeń (za pomocą dodatkowej zasady), element <AssignVariable> może użyć szablonu wiadomości z atrybutu niestandardowego aplikacji, który jest dostępny jako zmienna przepływu z zasady zabezpieczeń.

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

Element <Template> używa tej 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 tym przykładzie użyto składni szablonu wiadomości, aby połączyć 2 zmienne kontekstowe z ciągiem znaków (łą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 wstrzyknąć 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 jest pusta, jej wartość jest używana jako szablon. Jeśli wartość, do której odwołuje się zmienna, jest pusta, jako szablon zostanie użyta wartość tekstowa (w tym przypadku {system.uuid}-{messageid}). Ten wzorzec jest przydatny 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 klucz-wartość i ustawić zmienną referencyjną 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 elementu <AssignVariable>)

Określa wartość zmiennej przepływu docelowego ustawionej za pomocą <AssignVariable>. Wartość jest zawsze interpretowana jako ciąg znaków. 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 elementu <Ref>.

Wartość domyślna nie dotyczy
Wymagane? 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> używa tej 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 wartość zmiennej przepływu docelowego myvar jest ustawiona 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 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, <AssignVariable> przypisze wartość „ErrorOnCopy” do docelowej zmiennej przepływu.

<Copy>

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

Wartość domyślna nie dotyczy
Wymagane? 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>, skopiuje on wszystkie części wyznaczonej wiadomości źródłowej.

Element <Copy> używa tej 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, niestandardowego żądania 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> i <Verb> nie występują, zasada nie kopiuje tych części wiadomości.

Przykład 2s32

W tym przykładzie najpierw usuwane są wszystkie dane z istniejącej wiadomości response, a następnie kopiowane są 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 określono właściwości source, domyślnie przyjmuje ona wartość message, która różni się w zależności od przepływu, w którym zasada jest wykonywana. Jeśli zasada jest wykonywana w przepływie żądania, zmienna message odnosi się do obiektu request. Jeśli zasada jest wykonywana w przepływie odpowiedzi, zmienna message odnosi się do obiektu response.
  • Jeśli nie można rozpoznać zmiennej źródłowej lub jest ona rozpoznawana jako typ inny niż wiadomość, <Copy> nie odpowiada.
Opcjonalny Ciąg znaków

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

Element <FormParams> używa tej 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 kopiowany jest pojedynczy parametr formularza z żądania do żądania niestandardowego „MyCustomRequest”:

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

Przykład 2s35

Poniższy przykład kopiuje wszystkie parametry formularza do żądania niestandardowego „MyCustomRequest”:

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

Przykład 3s36

Poniższy przykład kopiuje 3 parametry formularza do niestandardowego żądania „MyCustomRequest”:

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

Przykład: 4s37

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

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

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

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

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

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

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

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

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

Element <Headers> używa tej 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

Ten przykład kopiuje nagłówek user-agent z żądania do nowego, niestandardowego obiektu żądania:

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

Przykład 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ą wartości „h1”, „h2” i druga wartość „h3”. Jeśli „h3” ma tylko jedną wartość, nie jest kopiowana.

<Path> (element podrzędny elementu <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 ustawiona zostanie wartość „true”, ta zasada kopiuje ścieżkę z komunikatu żądania określonego przez atrybut source elementu <Copy> do komunikatu żądania określonego przez element <AssignTo>.

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

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

Składnia

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

Przykład 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: prośba

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

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

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

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

Element <Payload> używa tej 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 parametr <Payload> ma wartość „true”, więc ładunek żądania jest kopiowany 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 elementu <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
Wymagane? Opcjonalny
Typ Tablica elementów <QueryParam> lub pusta tablica
Element nadrzędny <QueryParam>
Elementy podrzędne Brak

Element <QueryParams> używa tej 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” jest kopiowany z żądania do nowego, niestandardowego obiektu żądania:

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

Przykład 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 istnieje 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 „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: prośba

<ReasonPhrase> (element podrzędny elementu <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 ustawiona zostanie wartość „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
Wymagane? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <Copy>
Elementy podrzędne Brak

Element <ReasonPhrase> używa tej 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 parametr <ReasonPhrase> na wartość true. Przy określonym źródle i elemencie <AssignTo> powoduje to, że <Copy> kopiuje tekst przyczyny z nazwanej wiadomości odpowiedzi do obiektu response:

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

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

<StatusCode> (element podrzędny elementu <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 ustawiona zostanie wartość „true”, ta zasada kopiuje kod stanu z komunikatu odpowiedzi określonego przez atrybut source elementu <Copy> do komunikatu odpowiedzi określonego przez element <AssignTo>.

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

Element <StatusCode> używa tej 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 parametr <StatusCode> ma wartość „true”, co powoduje skopiowanie kodu stanu z domyślnego obiektu odpowiedzi do nowego, niestandardowego obiektu odpowiedzi:

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

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

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

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

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

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

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

Element <Verb> używa tej 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 parametr <Verb> ma wartość „true”, co powoduje skopiowanie czasownika z żądania domyślnego do nowego żądania niestandardowego:

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

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

  • Typ wiadomości: prośba

<Version> (element podrzędny elementu <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 ma wartość „true”, kopiuje wersję HTTP znalezioną w atrybucie source elementu <Copy> do obiektu określonego przez element <AssignTo>.

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

Element <Version> używa tej 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 parametr <Version> jest ustawiony 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: prośba

<DisplayName>

Używaj go razem z atrybutem name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną, bardziej naturalnie brzmiącą nazwą.

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

Wartość domyślna nie dotyczy
Wymagane? Opcjonalnie: Jeśli pominiesz parametr <DisplayName>, używana jest 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 zostać zatrzymane, gdy zostanie napotkana nierozwiązana zmienna.

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

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

Ustawienie <IgnoreUnresolvedVariables> na true różni się od ustawienia continueOnError obiektu <AssignMessage> na true tym, że dotyczy ustawiania i pobierania wartości zmiennych. Jeśli ustawisz continueOnError na true, Edge będzie ignorować wszystkie błędy, nie tylko te, które wystąpiły podczas używania zmiennych.

Element <IgnoreUnresolvedVariables> używa tej 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 parametr <IgnoreUnresolvedVariables> ma wartość „true”:

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

Zmienna <IgnoreUnresolvedVariables> ma wartość true, więc jeśli zmienna possibly-defined-variable nie jest zdefiniowana, ta zasada nie zgłosi błędu.

<Remove>

Usuwa z wiadomości nagłówki, parametry zapytania, parametry formularza lub ładunek wiadomości. Wiadomość może być żądaniem lub odpowiedzią. Wiadomość, na której ma działać <Remove>, określasz za pomocą elementu <AssignTo>.

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

Typowym przypadkiem użycia <Remove> jest usunięcie parametru zapytania lub nagłówka zawierającego informacje poufne z przychodzącego obiektu żądania, aby uniknąć przekazania go do serwera backendu.

Element <Remove> używa tej 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 przepływie odpowiedzi ta zasada usuwa treść odpowiedzi, zwracając klientowi tylko nagłówki HTTP.

Przykład 2s62

Ten przykład usuwa z obiektu request 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>

Zazwyczaj robi się to tylko wtedy, gdy chcesz użyć elementu <Set> lub <Copy>, aby ustawić w wiadomości pewne wartości zastępcze.

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

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

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

Element <FormParams> używa tej 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

Ten przykład usuwa z żądania 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 kilka 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ą „f1”, „f2” i druga wartość „f3”. Jeśli „f3” ma tylko jedną wartość, nie zostanie usunięta.

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

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

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

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

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

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

Składnia

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

Przykład 1s68

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

<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ą nagłówki „h1”, „h2” i druga wartość nagłówka „h3”. Jeśli „h3” ma tylko jedną wartość, nie zostanie usunięty.

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

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

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

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

Składnia

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

Przykład 1s71

W tym przykładzie parametr <Payload> ma wartość „true”, co powoduje wyczyszczenie ładunku żądania:

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

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

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

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

Element <QueryParams> używa tej 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 pojedynczy 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 istnieje 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 zostanie usunięty.

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: prośba

<Set>

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

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

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

Składnia

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

Przykład 1s77

W przykładzie poniżej ustawiono konkretny nagłówek. Gdy ta zasada jest dołączona do przepływu żądania, umożliwia systemowi nadrzędnemu odbieranie dodatkowego nagłówka, który nie został uwzględniony w pierwotnym żą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 oraz 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 elementu <Set>)

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

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

Element <FormParams> używa tej 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” jest ustawiany na 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: prośba

Jeśli w zasadzie zdefiniujesz puste parametry formularza (<Add><FormParams/></Add>), zasada nie doda żadnych parametrów formularza. To samo co pominięcie <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 elementu <Set>)

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

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

Element <Headers> używa tej 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 zasadzie zdefiniujesz puste nagłówki (<Set><Headers/></Set>), zasada nie ustawi żadnych nagłówków. Będzie to miało taki sam efekt jak pominięcie <Headers>.

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

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

Definiuje treść wiadomości dla żądania lub odpowiedzi, która jest określona przez element <AssignTo>. Ładunek może być dowolnym prawidłowym typem treści, np. zwykłym tekstem, JSON lub XML.

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

Element <Payload> używa tej 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

Poniższy przykład ustawia ładunek w formie zwykłego tekstu:

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

Przykład 2s84

W tym przykładzie ustawiono ładunek JSON:

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

Przykład 3s85

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

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

W 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 trzeba było używać atrybutów variablePrefix i variableSuffix, aby określić znaki separatora i używać ich do zawijania nazw zmiennych, na przykład:

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

W tym przykładzie 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 wartość contentType jest określona, jest przypisywana do nagłówka HTTP Content-Type.

Opcjonalny Ciąg znaków
variablePrefix Opcjonalnie określa początkowy separator zmiennej przepływu. Wartość domyślna to „{”. Więcej informacji znajdziesz w artykule Informacje o zmiennych przepływu. Opcjonalny Char
variableSuffix Opcjonalnie określa separator końcowy w zmiennej przepływu. Wartość domyślna to „}”. Więcej informacji znajdziesz w artykule Dokumentacja zmiennych przepływu. Opcjonalny Char

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

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

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

Element <QueryParams> używa tej 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: prośba

Jeśli w zasadzie zdefiniujesz puste parametry zapytania (<Set><QueryParams/></Set>), zasada nie ustawi żadnych parametrów zapytania. To samo co pominięcie <QueryParams>.

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

Ustawia tekst przyczyny w odpowiedzi. 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
Wymagane? Opcjonalny
Typ Ciąg znaków
Element nadrzędny <Set>
Elementy podrzędne Brak

Element <ReasonPhrase> używa tej 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

Poniższy przykład definiuje prosty komunikat o przyczynie:

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

Przykład 2s91

Treść pliku <ReasonPhrase> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe zostanie zastąpiona w czasie działania wartością zmiennej, do której się odwołuje, jak 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 elementu <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”)
Wymagane? Opcjonalny
Typ Ciąg znaków lub variable
Element nadrzędny <Set>
Elementy podrzędne Brak

Element <StatusCode> używa tej 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

Poniższy przykład ustawia prosty kod stanu:

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

Przykład 2

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

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

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

  • Typ wiadomości: odpowiedź

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

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

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

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

Składnia

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

Przykład 1s93

W tym przykładzie w żądaniu ustawiono prosty czasownik:

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

Przykład 2s94

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

W przykładzie poniżej użyto zmiennej do uzupeł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: prośba

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

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

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

Element <Version> używa tej 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 poniższym przykładzie do ustawienia numeru wersji użyto zmiennej w nawiasach klamrowych:

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

Treść pliku <Version> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe zostanie zastąpiona w czasie działania 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: prośba

Tworzenie niestandardowych wiadomości z prośbą o zgodę

Możesz użyć zasady AssignMessage, aby utworzyć niestandardowy komunikat żądania. Po utworzeniu żądania niestandardowego możesz go używać na te sposoby:

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

Aby utworzyć niestandardowy komunikat żądania, użyj elementu <AssignTo> w zasadzie AssignMessage. Ustaw wartość createNew na „true” i podaj nazwę nowej wiadomości w treści elementu, jak 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ń w przypadku niestandardowego komunikatu żądania. Po utworzeniu Edge będzie kontynuować proces z pierwotnym żądaniem. Aby użyć żądania niestandardowego, dodaj do serwera proxy zasadę, np. zasadę ServiceCallout, która może przekazywać żądanie niestandardowe do usługi zewnętrznej.

Poniższe przykłady pokazują, jak utworzyć niestandardowe komunikaty z prośbą:

Przykład 1s97

Poniższy przykład tworzy niestandardowy obiekt żądania za pomocą zasady Assign Message:

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

W tym przykładzie:

  • Tworzy nowy obiekt komunikatu żądania 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 trzeba określać atrybutu source dla <Copy>.
    • Ustawia parametr zapytania address w komunikacie niestandardowym na wartość parametru zapytania addy żądania przychodzącego.
    • Ustawia czasownik HTTP na GET.
  • Ustawia wartość <IgnoreUnresolvedVariables> na „false”. Jeśli zasada <IgnoreUnresolvedVariables> ma wartość „false”, a jedna ze zmiennych, które 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ą zasady Assign Message:

<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 tworzone jest nowe żądanie niestandardowe o nazwie „partner.request”. Następnie ustawia <Verb> i <Payload> w nowym żądaniu.

Możesz uzyskać dostęp do niestandardowego komunikatu żądania w innej zasadzie AssignMessage, która występuje później w przepływie. Ten przykład pobiera 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 zasadzie AssignMessage, obejrzyj te filmy.

Wideo Opis
Dlaczego warto przypisać zasadę dotyczącą wiadomości? Poznaj korzyści płynące z używania zasady AssignMessage do modyfikowania żądania lub odpowiedzi interfejsu API bez modyfikowania kodu backendu.
Kopiowanie elementów interfejsu API za pomocą zasady AssignMessage Kopiowanie elementów z żądania do interfejsu API lub odpowiedzi i tworzenie nowego obiektu żądania lub odpowiedzi za pomocą zasady AssignMessage.
Usuwanie elementów interfejsu API za pomocą zasady AssignMessage Usuń elementy interfejsu API i zmodyfikuj interfejs API, zanim dotrze do docelowego backendu, za pomocą zasady AssignMessage.
Dodawanie i ustawianie elementów interfejsu API za pomocą zasady AssignMessage Zmień żądanie do interfejsu API lub odpowiedź, 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 serwerze proxy interfejsu API.
Tworzenie nowych obiektów żądania lub odpowiedzi za pomocą zasady AssignMessage Tworzenie nowych obiektów żądań lub odpowiedzi do interfejsu API za pomocą zasady AssignMessage w czasie działania interfejsu API.
Tworzenie makiety interfejsu API przy użyciu zasady AssignMessage Utworzenie prostego interfejsu REST API przez dodanie zasady AssignMessage w przepływie odpowiedzi.
Ustawianie lub modyfikowanie ładunku za pomocą zasady AssignMessage Konwertowanie żądania REST na żądanie SOAP przez ustawienie ładunku 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 zasady jest definiowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.

Powiązane artykuły

Przykłady zasad AssignMessage są dostępne w przykładach platformy API.

Bardziej zaawansowany przykład zastępowania target.url z punktu końcowego serwera proxy znajdziesz w tym artykule w społeczności Apigee.

Aby zobaczyć, jak działa „ustawiona ścieżka” w zasadzie ServiceCallout, zapoznaj się z tym praktycznym przykładem w przykładowych kodach Apigee na GitHubie. Wystarczy sklonować repozytorium i postępować zgodnie z instrukcjami podanymi 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.