Zasada przypisywania wiadomości

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

Co

Zasada AssignMessage zmienia lub tworzy nowe żądania i odpowiedzi w procesie serwera proxy interfejsu API. Dzięki tej zasadzie możesz wykonywać na takich wiadomościach te czynności:

  • Dodawanie do wiadomości nowych parametrów formularzy, nagłówków i parametrów zapytania
  • Kopiowanie dotychczasowych właściwości z jednej wiadomości do drugiej
  • Usuń nagłówki, parametry zapytania, parametry formularza lub ładunki wiadomości z wiadomości
  • Ustawianie wartości dotychczasowych właściwości w wiadomości

Za pomocą zasady AssignMessage zwykle dodaje się, zmienia lub usuwa właściwości żądania lub odpowiedzi. Możesz jednak użyć zasady AssignMessage, aby utworzyć niestandardowe żądanie lub wiadomość z odpowiedzią i przekazać ją do alternatywnego miejsca docelowego, jak opisano w sekcji Tworzenie niestandardowych wiadomości z żądaniami.

Zasada AssignMessage może tworzyć i zmieniać zmienne przepływu z tymi elementami podrzędnymi:

<AssignMessage> element

Definiuje zasadę AssignMessage.

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

W elemencie <AssignMessage> używana jest taka składnia:

Składnia

W elemencie <AssignMessage> używana jest taka składnia:

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

Domyślna zasada

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

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

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

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

Atrybut Domyślnie Wymagany? Description
name Nie dotyczy Wymagane

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

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

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

W tej tabeli znajdziesz ogólny opis elementów podrzędnych obiektu <AssignMessage>:

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

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

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

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

Inne elementy podrzędne
<AssignTo> Opcjonalnie Określa, na której wiadomości działa zasada AssignMessage. Może to być standardowe żądanie lub odpowiedź albo nowy komunikat niestandardowy.
<AssignVariable> Opcjonalnie Przypisuje wartość do zmiennej przepływu. Jeśli zmienna nie istnieje, utworzy ją <AssignVariable>.
<IgnoreUnresolvedVariables> Opcjonalnie Określa, czy przetwarzanie zostaje zatrzymane w przypadku wystąpienia nierozstrzygniętej zmiennej.

Każdy z tych elementów podrzędnych został opisany w kolejnych sekcjach.

Przykłady

Poniższe przykłady pokazują sposoby użycia zasady AssignMessage:

1. Dodaj nagłówek

Ten przykład dodaje do żądania nagłówek z elementem <Add>:

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

2. Usuń ładunek

Podany niżej przykład usuwa ładunek z odpowiedzi z elementem <Remove>:

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

3. Zmień odpowiedź

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

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

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

W tym przykładzie pominięto nazwę zmiennej w elemencie <AssignTo> i określono type jako „response”, więc ta zasada modyfikuje obiekt odpowiedzi zwracany przez serwer docelowy.

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

4. Ustawianie zawartości dynamicznej

Za pomocą funkcji Przypisz wiadomość możesz osadzić zawartość dynamiczną w ładunku wiadomości z odpowiedziami i żądaniami.

Aby umieścić zmienne przepływu Edge w ładunku XML, umieść wyznaczoną zmienną w nawiasach klamrowych w ten sposób: {prefix.name}.

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

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

W przypadku ładunków JSON możesz 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 artykule o zmiennych przepływu.

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

5. Usuń parametr zapytania

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

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

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

6. Ustawianie/pobieranie zmiennych

W poniższym przykładzie zastosowano 3 zasady przypisywania wiadomości:

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

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

Druga zasada odczytuje wartości za pomocą elementu <AssignVariable> 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 dodać zasadę 1 przed zasadą nr 2.
  2. Dodaj trzecią zasadę w procesie odpowiedzi.
  3. Trzecia zasada używa elementu <Set>, aby dodawać zmienne do odpowiedzi. Ten przykład tworzy ładunek XML w odpowiedzi, którą Edge zwraca klientowi:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>
    

    Pamiętaj, że składnią dostępu do zmiennych przepływu w funkcji <Set> jest umieszczenie ich 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 utworzyć wyniki za pomocą potoku (takiego jak xmllint), aby kod XML wyświetlał się w elegancko sformatowanej strukturze:

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

    Treść odpowiedzi powinna wyglądać tak:

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

7. Pobieranie nagłówków odpowiedzi objaśnienia usługi

W poniższym przykładzie załóżmy, że zasada ServiceCallout znajduje się w żądaniu serwera proxy interfejsu API, 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 jest domyślną zmienną calloutResponse, druga zasada otrzymuje drugą wartość nagłówka Set-Cookie.

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

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

{calloutResponse.header.Set-Cookie.values}

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

Odniesienie do elementu podrzędnego

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

<Add>

Dodaje do żądania lub odpowiedzi informacje określone przez element <AssignTo>.

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

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

W elemencie <Add> używana jest taka składnia:

Składnia

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

Przykład 1

Poniższy przykład używa elementu <FormParams>, aby pobrać wartości 3 parametrów ciągu zapytania ze pierwotnego żądania i ustawić je jako parametry formularza w żądaniu w docelowym punkcie końcowym:

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

Przykład 2

W tym przykładzie użyto elementu <Headers> do dodania nagłówka User-Agent do żądania docelowego punktu końcowego:

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

Przykład 3

W tym przykładzie użyto elementu <QueryParams>, aby dodać do żądania pojedynczy parametr zapytania o statycznej wartości:

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

W tym przykładzie we wstępnym przepływie żądania użyto elementu <Add>. Jeśli spojrzysz na wyniki w narzędziu takim jak narzędzie do śledzenia, żądanie „http://http://httpbin.org/get” będzie wyglądać tak: „http://http://httpbin.org/get?myParam=42”.

Elementy podrzędne obiektu <Add> obsługują zastępowanie ciągów dynamicznych nazywane szablonami wiadomości.

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

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

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

W elemencie <FormParams> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład dodaje do żądania pojedynczy parametr formularza („answer”) i wartość statyczną („42”):

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

Przykład 2

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

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

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

Przykład 3

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

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

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

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

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

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

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

Na przykład:

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

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

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

Dodaje nowe nagłówki do określonego żądania lub odpowiedzi określonej przez element <AssignTo>.

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

W elemencie <Headers> używana jest taka składnia:

Składnia

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

Przykład 1

Poniższy przykład dodaje nagłówek user-agent do wiadomości żądania i przypisuje do niego wartość zmiennej przepływu request.user.agent.

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

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

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

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

W elemencie <QueryParams> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład dodaje do żądania parametr zapytania „myParam” i przypisuje mu wartość „42”:

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

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

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

Poza tym parametry zapytania możesz ustawiać tylko wtedy, gdy atrybut type elementu <AssignTo> jest wiadomością z żądaniem. Ustawienie ich w odpowiedzi nie ma żadnego efektu.

Jeśli zdefiniujesz w swojej zasadzie pustą tablicę parametrów zapytania (<Add><QueryParams/></Add>), zasada nie doda żadnych parametrów zapytania. Jest to odpowiednik pominięcia elementu <QueryParams>.

<AssignTo>

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

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

Pamiętaj, że w niektórych przypadkach nie możesz zmienić obiektu, na którym działa zasada AssignMessage. Nie możesz np. używać właściwości <Add> ani <Set>, aby dodawać lub zmieniać parametry zapytania (<QueryParams>) czy parametry formularza (<FormParams>) w odpowiedzi. W żądaniu możesz modyfikować tylko parametry zapytania i formularza.

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

Jeśli nie określisz <AssignTo>, zasada będzie działać na podstawie domyślnego żądania lub odpowiedzi, zależnie od miejsca wykonywania zasady. Jeśli zasada jest wykonywana w przepływie żądania, wpływa to na komunikat żądania. Jeśli zasada jest wykonywana w przepływie odpowiedzi, domyślnie ma na nią wpływ.

W elemencie <AssignTo> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład określa, że celem jest pierwotne żądanie, które zostanie wysłane do docelowego punktu końcowego:

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

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

Przykład 2

Ten przykład pokazuje utworzenie nowego obiektu żądania:

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

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

Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach na późniejszym etapie procesu lub wysłać nowy obiekt żądania do usługi zewnętrznej za pomocą zasady ServiceCallout.

Przykład 3

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

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

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

Możesz uzyskać dostęp do nowego obiektu żądania w innych zasadach na późniejszym etapie procesu lub wysłać nowy obiekt żądania do usługi zewnętrznej za pomocą zasady ServiceCallout.

Poniższa tabela zawiera opis atrybutów <AssignTo>:

Atrybut Opis Wymagana? Typ
createNew

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

Jeśli zasada ma wartość „prawda”, zasada tworzy nową zmienną o typie określonym w zasadzie type („żądanie” lub „odpowiedź”). Jeśli nie podasz nazwy nowej zmiennej, zasada utworzy nowy obiekt żądania lub odpowiedzi na podstawie wartości type.

W przypadku wartości „false” (fałsz) zasada odpowiada na 2 sposoby:

  • Jeśli <AssignTo> może przypisać nazwę zmiennej do żądania lub odpowiedzi, przetwarzanie będzie kontynuowane. Jeśli na przykład zasada jest w przepływie żądań, zmienna jest obiektem żądania. Jeśli zasada jest w odpowiedzi, zmienna jest obiektem odpowiedzi.
  • Jeśli nie można rozwiązać zasady <AssignTo> lub przyjmuje się typ pliku niebędący wiadomością, zasada zgłasza błąd.

Jeśli nie określisz createNew, zasada odpowiada na 2 sposoby:

  • Jeśli wyświetli się komunikat <AssignTo>, przetwarzanie spowoduje przejście do następnego kroku.
  • Jeśli nie można rozpoznać typu <AssignTo> lub przyjmuje on typ inny niż wiadomość, tworzona jest nowa zmienna typu określonego w type.
Opcjonalnie Wartość logiczna
transport

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

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

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

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

Opcjonalnie Ciąg znaków

<AssignVariable>

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

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

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

  • Ciąg literału: użyj elementu podrzędnego <Value>, aby podać literałową wartość ciągu znaków dla docelowej zmiennej przepływu.
  • Zmienna przepływu: użyj elementu podrzędnego <Ref>, aby podać wartość istniejącej zmiennej przepływu dla zmiennej przepływu docelowego. 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 dla zmiennej przepływu docelowego.

W elemencie <AssignVariable> używana jest taka składnia:

Składnia

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

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

Przykład 1

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

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

Przykład 2

Ten przykład przypisuje wartość zmiennej przepływu request.header.user-agent do zmiennej przepływu docelowego myvar, a wartość parametru zapytania country do zmiennej przepływu docelowego Country:

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

Jeśli któreś z przypisań się nie uda, Edge zamiast tego przypisze wartość „ErrorOnCopy” do zmiennej przepływu docelowego.

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

Przykład 3

W tym przykładzie użyto elementu podrzędnego <Template> do połączenia 2 zmiennych kontekstowych pomiędzy nimi, umieszczając między nimi literał (łącznik):

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

Częstym zastosowaniem funkcji <AssignVariable> jest ustawienie wartości domyślnej parametru zapytania, nagłówka lub innej wartości, którą można przekazać z żądaniem. Służą do tego kombinacje elementów podrzędnych <Ref> i <Value>. Aby dowiedzieć się więcej, zapoznaj się z przykładami użycia funkcji <Ref>.

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

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

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

W elemencie <Name> używana jest taka składnia:

Składnia

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

Przykład 1

Poniższy przykład określa zmienną docelową jako myvar i ustawia ją na wartość literału „42”:

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

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

<Ref> (podrzędny wobec <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 (zgodnie z opisem 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ć jako wartości ciągu literału. Aby przypisać literałową wartość ciągu znaków, użyj elementu <Value>.

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

Przy określaniu zmiennej przepływu za pomocą <Ref> pomiń nawiasy zamykające „{}”, których normalnie używa się do odwoływania się do zmiennej przepływu. Aby np. ustawić wartość nowej zmiennej na wartość zmiennej przepływu client.host:

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

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

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

W elemencie <Ref> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład przypisuje wartość zmiennej przepływu request.header.user-agent do zmiennej przepływu docelowego 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 wartości domyślnej (ani wartości zastępczej) dla żadnego przypisania.

Przykład 2

Ten przykład przypisuje wartość zmiennej przepływu request.header.user-agent do zmiennej przepływu docelowego 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>

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

Przykład 3

Częstym przypadkiem użycia właściwości <AssignVariable> jest ustawienie wartości domyślnej parametru zapytania, nagłówka lub innej wartości, którą można przekazać z żądaniem. Możesz na przykład utworzyć serwer proxy interfejsu API pogody, w którym żądanie pobiera pojedynczy parametr zapytania o nazwie „w”. Ten parametr zawiera identyfikator miasta, dla którego ma być wyświetlana prognoza pogody. URL żądania ma postać:

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

Aby określić domyślną wartość „w”, utwórz zasadę AssignMessage taką jak poniżej:

<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ą sobie. 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>. Możesz więc wysłać żądanie do tego serwera proxy interfejsu API, które pomija parametr zapytania „w”:

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

...ale serwer proxy interfejsu API nadal powinien zwracać prawidłowy wynik.

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

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

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

Określa szablon wiadomości. Szablon wiadomości umożliwia zastępowanie ciągów zmiennych podczas działania zasady oraz łączenie ciągów literałów z nazwami zmiennych w nawiasach klamrowych. Szablony wiadomości obsługują też funkcje takie jak zmiany znaczenia i konwersja wielkości liter.

Użyj atrybutu ref, aby określić zmienną przepływu, w której wartością zmiennej jest szablon wiadomości. Możesz na przykład zapisać szablon wiadomości jako atrybut niestandardowy w aplikacji dewelopera. Gdy Edge rozpozna aplikację dewelopera po zweryfikowaniu klucza interfejsu API lub tokena zabezpieczeń (za pomocą dodatkowej zasady), element <AssignVariable> może korzystać z szablonu wiadomości z atrybutu niestandardowego aplikacji, który jest dostępny jako zmienna przepływu w zasadach zabezpieczeń. W przykładzie poniżej założono, że szablon wiadomości jest dostępny w atrybucie klienta o nazwie message_template w aplikacji dewelopera wywołującej interfejs API, gdzie do weryfikacji klucza interfejsu API aplikacji użyto zasadyVerifyAPIKey:

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

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

W elemencie <Template> używana jest taka składnia:

Składnia

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

Przykład 1

W tym przykładzie zastosowano składnię szablonów wiadomości do połączenia 2 zmiennych kontekstowych z literałem (łącznikiem) między nimi:

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

Przykład 2

Poniższy przykład określa zmienną przepływu, w której wartość zmiennej jest wstępnie zdefiniowanym szablonem wiadomości. Użyj tej opcji, jeśli chcesz wstrzyknąć wstępnie zdefiniowany szablon w środowisku wykonawczym bez konieczności modyfikowania zasady:

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

  </AssignVariable>
</AssignMessage>

Przykład 3

W przykładzie poniżej określono zmienną przepływu i wartość tekstową. W tym przypadku, jeśli wymieniona zmienna nie ma wartości null, ta wartość jest używana jako szablon. Jeśli przywołana wartość jest ustawiona na null, jako szablon jest używana wartość tekstowa (w tym przypadku {system.uuid}-{messageid}). Ten wzorzec przydaje się do podawania wartości „zastąp”, gdy w niektórych przypadkach chcesz zastąpić domyślny szablon (część tekstową) wartościami ustawianymi dynamicznie. Instrukcja warunkowa może na przykład pobrać wartość z mapy klucz-wartość i ustawić przywołaną zmienną na tę wartość:

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

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

Określa wartość zmiennej przepływu docelowego ustawionej w <AssignVariable>. Wartość jest zawsze interpretowana jako ciąg literału. Nie możesz używać zmiennej przepływu jako wartości, nawet jeśli umieszczasz ją w nawiasach kwadratowych („{}”). Aby użyć zmiennej przepływu, użyj funkcji <Ref>.

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

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

W elemencie <Value> używana jest taka składnia:

Składnia

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

Przykład 1

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

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

Przykład 2

Ten przykład przypisuje wartość zmiennej przepływu request.header.user-agent 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óreś z przypisań się nie uda, <AssignVariable> przypisze wartość „ErrorOnCopy” do zmiennej przepływu docelowego.

<Copy>

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

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

W elemencie <Copy> używana jest taka składnia:

Składnia

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

Przykład 1

Poniższy przykład powoduje skopiowanie nagłówka, 3 parametrów formularza, ścieżki i wszystkich parametrów zapytania z żądania do nowego, niestandardowego żądania:

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

Element <Copy> ma te atrybuty:

Atrybut Opis Wymagana? Typ
source

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

  • Jeśli source nie zostanie określony, będzie on traktowany jako prosta wiadomość. Jeśli na przykład zasada jest w przepływie żądań, źródłem domyślnie jest obiekt request. Jeśli zasada jest w przepływie odpowiedzi, domyślnie przyjmuje się obiekt response. Jeśli pominiesz właściwość source, jako źródła kopii możesz użyć odwołania bezwzględnego do zmiennej przepływu. Możesz na przykład określić wartość {request.header.user-agent}.
  • Jeśli nie można rozpoznać zmiennej źródłowej lub przyjąć typ danych inny niż komunikat, <Copy> nie odpowie.
Opcjonalnie Ciąg znaków

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

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

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

W elemencie <FormParams> używana jest taka składnia:

Składnia

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

Przykład 1

Poniższy przykład pokazuje kopiowanie z żądania pojedynczego parametru formularza do żądania niestandardowego „MyCustomRequest”:

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

Przykład 2

Ten przykład powoduje skopiowanie wszystkich parametrów 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 3

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

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

Przykład 4

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

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

W tym przykładzie kopiujesz „f1”, „f2” i drugą wartość „f3”. Jeśli „f3” ma tylko jedną wartość, nie jest kopiowana.

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

  • Czasownik HTTP: POST
  • Typ wiadomości: odpowiedź
  • Jeden z tych dokumentów (lub oba):
    • Dane formularza: ustaw jakąś wartość lub „” (pusty ciąg znaków). Na przykład polecenie curl dodaj do żądania polecenie -d "".
    • Nagłówek Content-Length: ustaw wartość 0 (jeśli pierwotne żądanie nie zawiera żadnych danych; w przeciwnym razie obecna długość). Na przykład polecenie curl dodaj do żądania element -H "Content-Length: 0".

Podczas kopiowania <FormParams> <Copy> ustawia wartość Content-Type wiadomości na „application/x-www-form-urlencoded” przed jej wysłaniem do usługi docelowej.

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

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

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

W elemencie <Headers> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład powoduje skopiowanie nagłówka 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 2

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

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

Przykład 3

Jeśli kilka nagłówków ma taką samą nazwę, 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 kopiujemy „h1”, „h2” oraz drugą wartość „h3”. Jeśli parametr „h3” ma tylko 1 wartość, nie jest kopiowana.

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

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

Jeśli zasada ma wartość „true” (prawda), ta zasada kopiuje ścieżkę z komunikatu żądania określonego w atrybucie source elementu <Copy> do komunikatu żądania określonego przez element <AssignTo>.

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

W elemencie <Path> używana jest taka składnia:

Składnia

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

Przykład 1

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

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

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

  • Typ wiadomości: prośba

<Payload> (podrzędny wobec <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 zasada ma wartość „true” (prawda), ta zasada kopiuje ładunek z komunikatu określonego przez atrybut source elementu <Copy> do wiadomości określonej przez element <AssignTo>.

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

W elemencie <Payload> używana jest taka składnia:

Składnia

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

Przykład 1

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

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

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

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

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

W elemencie <QueryParams> używana jest taka składnia:

Składnia

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

Przykład 1

Poniższy przykład kopiuje parametr zapytania „my_param” 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 2

Poniższy przykład powoduje skopiowanie wszystkich parametrów zapytania z żądania do nowego, niestandardowego obiektu żądania:

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

Przykład 3

Jeśli istnieje wiele 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 kopiujesz „qp1”, „qp2” i drugą wartość „qp3”. Jeśli „qp3” ma tylko 1 wartość, nie jest kopiowana.

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

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

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

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

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

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

W elemencie <ReasonPhrase> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład ustawia <ReasonPhrase> na „true”, co powoduje, że <Copy> kopiuje wyrażenie będące powodem z domyślnej odpowiedzi do niestandardowego obiektu odpowiedzi:

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

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

  • Typ wiadomości: odpowiedź

<StatusCode> (podrzędny wobec <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 zasada ma wartość „true” (prawda), ta zasada kopiuje kod stanu z komunikatu odpowiedzi określonego w atrybucie source elementu <Copy> do komunikatu z odpowiedzią określonego przez element <AssignTo>.

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

W elemencie <StatusCode> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład ustawia <StatusCode> na „true”, co powoduje skopiowanie kodu stanu z domyślnego obiektu odpowiedzi do nowego, niestandardowego obiektu odpowiedzi:

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

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

  • Typ wiadomości: odpowiedź

Typowym zastosowaniem właściwości <StatusCode> jest zapewnienie, że odpowiedź serwera proxy ma taki sam stan jak odpowiedź otrzymana ze środowiska docelowego, gdy atrybut createNew w <AssignTo> ma wartość „true” (prawda).

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

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

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

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

W elemencie <Verb> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład ustawia <Verb> na „true”, co powoduje skopiowanie czasownika z domyślnego żądania do nowego, niestandardowego:

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

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

  • Typ wiadomości: prośba

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

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

Jeśli ustawisz wartość „true”, wersja HTTP z atrybutu source elementu <Copy> zostanie skopiowana do obiektu określonego przez element <AssignTo>.

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

W elemencie <Version> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład ustawia w żądaniu ustawienie <Version> na „true”, 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>

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

  • Typ wiadomości: prośba

<DisplayName>

Użyj oprócz atrybutu name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną, bardziej naturalną nazwą.

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

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

W elemencie <DisplayName> używana jest taka składnia:

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 zostaje zatrzymane w przypadku wystąpienia nierozstrzygniętej zmiennej.

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

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

Ustawienie dla właściwości <IgnoreUnresolvedVariables> wartości true różni się od ustawienia właściwości continueOnError elementu <AssignMessage> na true tym, że dotyczy ono ustawień i pobierania wartości zmiennych. Jeśli ustawisz continueOnError na true, Edge ignoruje wszystkie błędy, a nie tylko błędy napotkane podczas używania zmiennych.

W elemencie <IgnoreUnresolvedVariables> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład ustawia <IgnoreUnresolvedVariables> na „true”:

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

<Remove>

Usuwa z wiadomości nagłówki, parametry zapytania, parametry formularza lub ładunek wiadomości. Komunikatem może być żądanie lub odpowiedź. Za pomocą elementu <AssignTo> możesz określić, w przypadku której wiadomości <Remove> ma działać.

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

Częstym przypadkiem użycia właściwości <Remove> jest usuwanie parametru zapytania zawierającego informacje poufne z obiektu przychodzącego żądania, aby uniknąć przekazania go na serwer backendu.

W elemencie <Remove> używana jest taka składnia:

Składnia

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

Przykład 1

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

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

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

Przykład 2

Ten przykład usuwa wszystkie parametry formularza i parametr zapytania z przychodzącego żądania:

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

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

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

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

W elemencie <FormParams> używana jest taka składnia:

Składnia

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

Przykład 1

Poniższy przykład usuwa z żądania 3 parametry formularza:

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

Przykład 2

Poniższy przykład usuwa z żądania wszystkie parametry formularza:

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

Przykład 3

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

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

W tym przykładzie usunięto „f1”, „f2” i drugą wartość „f3”. Jeśli „f3” ma tylko jedną wartość, nie jest usuwana.

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

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

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

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

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

W elemencie <Headers> używana jest taka składnia:

Składnia

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

Przykład 1

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

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

Przykład 2

Ten przykład usuwa z żądania wszystkie nagłówki:

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

Przykład 3

Jeśli kilka nagłówków ma taką samą nazwę, użyj tej składni:

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

Ten przykład usuwa z żądania „h1”, „h2” oraz drugą wartość „h3”. Jeśli „h3” ma tylko 1 wartość, nie jest usuwana.

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

Określa, czy <Remove> usuwa ładunek w żądaniu lub w odpowiedzi, który jest określony 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
Wymagany? Opcjonalnie
Typ Wartość logiczna
Element nadrzędny <Remove>
Elementy podrzędne Brak

W elemencie <Payload> używana jest taka składnia:

Składnia

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

Przykład 1

W tym przykładzie ustawiona wartość <Payload> ma wartość „true”, aby ładunek żądania został wyczyszczony:

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

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

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

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

W elemencie <QueryParams> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład powoduje usunięcie z żądania pojedynczego parametru zapytania:

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

Przykład 2

Poniższy przykład usuwa z żądania wszystkie parametry zapytania:

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

Przykład 3

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

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

W tym przykładzie usunięto z żądania „qp1”, „qp2” i drugą wartość „qp3”. Jeśli „qp3” ma tylko 1 wartość, nie jest usuwana.

Przykład 4

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

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

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

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

<Set>

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

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

W elemencie <Set> używana jest taka składnia:

Składnia

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

Przykład 1

Oto przykład elementu <Set>:

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

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

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

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

W elemencie <FormParams> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład ustawia parametr formularza o nazwie „myparam” na wartość zmiennej request.header.myparam w nowym żądaniu niestandardowym:

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

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

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

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

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

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

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

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

W elemencie <Headers> używana jest taka składnia:

Składnia

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

Przykład 1

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

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

Jeśli zdefiniujesz w swojej zasadzie (<Add><Headers/></Add>) puste nagłówki, nie będzie ona dodawać żadnych nagłówków. Jest to odpowiednik pominięcia elementu <Headers>.

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

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

Określa treść wiadomości żądania lub odpowiedzi, która jest określona przez element <AssignTo>. Ładunek może być dowolnym prawidłowym typem treści, takim jak zwykły tekst, JSON lub XML.

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

W elemencie <Payload> używana jest taka składnia:

Składnia

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

Przykład 1

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

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

Przykład 2

Ten przykład ustawia ładunek JSON:

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

Przykład 3

W tym przykładzie wstawiasz do ładunku wartości zmiennych, ujmując ich nazwy w nawiasy klamrowe:

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

W starszych wersjach Apigee Edge, na przykład przed wersją 16.08.17, nie można 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 do określania znaków separatora i używania ich do pakowania nazw zmiennych w taki sposób:

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

Ta starsza składnia nadal działa.

Przykład 4

Zawartość pola <Payload> jest traktowana jako szablon wiadomości. Oznacza to, że zasada AssignMessage w czasie działania zastępuje zmienne w nawiasach klamrowych wartością zmiennych, do których odwołuje się zasada.

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

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

Poniższa tabela zawiera opis atrybutów <Payload>:

Atrybut Opis Obecność Typ
contentType

Jeśli podasz wartość contentType, do nagłówka HTTP Content-Type zostanie przypisana wartość.

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

<QueryParams> (podrzędny wobec <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
Wymagany? Opcjonalnie
Typ Tablica elementów <QueryParam>
Element nadrzędny <Set>
Elementy podrzędne <QueryParam>

W elemencie <QueryParams> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład ustawia parametr zapytania „address” na wartość zmiennej request.header.address:

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

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

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

Jeśli zdefiniujesz w swojej zasadzie puste parametry zapytania (<Set><QueryParams/></Set>), zasada nie ustawi żadnych parametrów zapytania. Jest to odpowiednik pominięcia elementu <QueryParams>.

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

Określa powód w odpowiedzi. Zwykle robi się to w przypadku debugowania w połączeniu z narzędziem <StatusCode>. Ten element nie ma wpływu na żądanie.

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

W elemencie <ReasonPhrase> używana jest taka składnia:

Składnia

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

Przykład 1

W tym przykładzie zdefiniowano proste wyrażenie uzasadniające:

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

Przykład 2

Zawartość pola <ReasonPhrase> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe w czasie działania jest zastępowana wartością zmiennej, do której prowadzi odwołanie, jak pokazano w poniższym przykładzie:

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

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

  • Typ wiadomości: odpowiedź

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

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

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

W elemencie <StatusCode> używana jest taka składnia:

Składnia

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

Przykład 1

W tym przykładzie ustawiono prosty kod stanu:

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

Przykład 2

Zawartość pola <StatusCode> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe w czasie działania jest zastępowana wartością zmiennej, do której prowadzi odwołanie, jak pokazano w poniższym przykładzie:

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

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

  • Typ wiadomości: odpowiedź

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

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

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

W elemencie <Verb> używana jest taka składnia:

Składnia

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

Przykład 1

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

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

Przykład 2

Zawartość pola <Verb> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe jest zastępowana w czasie działania wartością zmiennej, do której prowadzi odwołanie.

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

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

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

  • Typ wiadomości: prośba

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

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

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

W elemencie <Version> używana jest taka składnia:

Składnia

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

Przykład 1

Ten przykład ustawia numer wersji na „1.1”:

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

Przykład 2

W ten sposób określono numer wersji, używając zmiennej w nawiasach klamrowych:

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

Zawartość pola <Version> jest traktowana jako szablon wiadomości. Oznacza to, że nazwa zmiennej ujęta w nawiasy klamrowe jest zastępowana w czasie działania wartością zmiennej, do której prowadzi odwołanie.

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

  • Typ wiadomości: prośba

Tworzenie niestandardowych wiadomości z prośbami

Za pomocą zasady AssignMessage możesz utworzyć niestandardową wiadomość żądania. Po utworzeniu żądania niestandardowego możesz go użyć na te sposoby:

  • Dostęp do zmiennych w pozostałych zasadach
  • Przekaż go do usługi zewnętrznej

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

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

Domyślnie Edge nie wykonuje żadnego działania z niestandardowym komunikatem żądania. Po jego utworzeniu Edge będzie kontynuować proces zgodnie z oryginalnym żądaniem. Aby używać żądania niestandardowego, dodaj do serwera proxy zasadę taką jak zasada ServiceCallout, która może przekazywać niestandardowe żądanie do usługi zewnętrznej.

Te przykłady pozwalają utworzyć niestandardowe komunikaty żądań:

Przykład 1

Poniższy przykład pokazuje utworzenie niestandardowego obiektu żądania z funkcją Assign Message (Przypisz wiadomość):

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

Oto przykład:

  • Tworzy nowy obiekt wiadomości z żądaniem o nazwie „MyCustomRequest”.
  • W MyCustomRequest ta zasada:
    • Kopiuje wartość nagłówka HTTP user-agent z żądania przychodzącego do nowej wiadomości. Jako że <Copy> używa bezwzględnego odwołania do zmiennej przepływu user-agent, nie musisz określać atrybutu source dla <Copy>.
    • Ustawia parametr zapytania address w wiadomości niestandardowej na wartość parametru zapytania addy przychodzącego żądania.
    • Ustawia czasownik HTTP na GET.
  • Ustawia wartość <IgnoreUnresolvedVariables> na „false” (fałsz). Gdy <IgnoreUnresolvedVariables> ma wartość „false”, a jedna ze zmiennych, którą próbuje dodać, nie istnieje, Edge przestanie przetwarzać przetwarzanie w przepływie interfejsu API.

Przykład 2

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

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

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

Niestandardowy komunikat z żądaniem możesz uzyskać w innej zasadzie AssignMessage, która wystąpi później w procesie. Ten przykład pobiera wartość nagłówka user-agent wiadomości niestandardowego żądania:

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

Filmy

Obejrzyj te filmy, by dowiedzieć się więcej o zasadach AssignMessage.

Wideo Opis
Dlaczego warto przypisać zasadę wiadomości? Poznaj korzyści płynące z użycia zasady AssignMessage do modyfikowania żądania lub odpowiedzi interfejsu API bez modyfikowania kodu backendu.
Kopiowanie elementów interfejsu API za pomocą zasady AssignMessage Skopiuj elementy z żądania lub odpowiedzi interfejsu API i utwórz nowy obiekt żądania lub odpowiedzi za pomocą zasady AssignMessage.
Usuń elementy interfejsu API za pomocą zasady AssignMessage Usuń elementy interfejsu API i zmodyfikuj interfejs API, zanim dotrze on do docelowego backendu za pomocą zasady AssignMessage.
Dodawanie i ustawianie elementów interfejsu API za pomocą zasady AssignMessage Zmień żądanie lub odpowiedź interfejsu API, dodając parametry zapytania, nagłówki, parametry formularza lub ładunki za pomocą zasady AssignMessage.
Utwórz zmienne niestandardowe za pomocą zasady AssignMessage Ustaw niestandardowe zmienne przepływu za pomocą zasady AssignMessage i użyj zmiennych w innych zasadach przez serwer proxy interfejsu API.
Utwórz nowe obiekty żądań lub odpowiedzi za pomocą zasady AssignMessage Utwórz nowe obiekty żądań lub odpowiedzi interfejsu API za pomocą zasady AssignMessage w środowisku wykonawczym API.
Utwórz próbny interfejs API z użyciem zasady AssignMessage Utwórz prosty interfejs API typu REST, dodając zasadę AssignMessage do przepływu odpowiedzi.
Ustawianie lub modyfikowanie ładunku za pomocą zasady AssignMessage Przekonwertuj żądanie REST na żądanie SOAP, ustawiając ładunek SOAP za pomocą zasady AssignMessage w środowisku wykonawczym interfejsu API.

Kody błędów

W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.

Błędy w czasie wykonywania

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

Kod błędu Stan HTTP Przyczyna Napraw
steps.assignmessage.SetVariableFailed 500 Zasadom nie udało się ustawić zmiennej. W ciągu znaków błędu znajdziesz nazwę nierozstrzygniętej zmiennej.
steps.assignmessage.VariableOfNonMsgType 500

Ten błąd występuje, jeśli atrybut source w elemencie <Copy> jest ustawiony na zmienną innego typu niż message.

Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Edge request, response i message mają typ komunikatu. Więcej informacji 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 ma postać:

  • poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada)
  • lub
  • Nie można rozwiązać (nie określono)

Błędy wdrażania

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

Nazwa błędu Przyczyna Napraw
InvalidIndex Jeśli indeks określony w elementach <Copy> lub <Remove> w zasadzie przypisywania wiadomości wynosi 0 lub jest liczbą ujemną, wdrożenie serwera proxy interfejsu API się nie uda.
InvalidVariableName Jeśli element podrzędny <Name> jest pusty lub nie został określony w elemencie <AssignVariable>, wdrożenie serwera proxy interfejsu API nie powiedzie się, ponieważ nie ma prawidłowej nazwy zmiennej, do której można 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 zasada wywołuje błąd w czasie działania. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami.

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

Przykładowa odpowiedź na błąd

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

Przykładowa reguła błędu

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

Schematy

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

Powiązane artykuły

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

Bardziej zaawansowany przykład zastąpienia parametru target.url z punktu końcowego ProxyEndpoint znajdziesz w tym artykule na temat społeczności Apigee.

Aby zobaczyć, jak działa „ustawiona ścieżka” w zasadzie ServiceCallout, zapoznaj się z tym przykładem z przykładem dotyczącym wykonywania czynności (w języku angielskim) dostępnym w przykładach dotyczących Apigee na GitHubie. Wystarczy skopiować repozytorium i wykonać instrukcje podane w tym temacie. W przykładzie użyto zasady AssignMessage, by ustawić ścieżkę żądania, a potem używamy zasady objaśnienia usługi, by wysłać żądanie do usługi zewnętrznej.