Zasady wyodrębniania zmiennych

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

Co

Zasada ExtractVariables wyodrębnia treść z żądania lub odpowiedzi i ustawia wartość zmiennej na tę treść. Możesz wyodrębnić dowolną część wiadomości, w tym nagłówki, ścieżki URI, ładunki JSON/XML, parametry formularza i parametry zapytania. Zasady działają w ten sposób, że stosują wzorzec tekstu do treści wiadomości, a po znalezieniu dopasowania ustawiają zmienną z określoną treścią wiadomości.

Chociaż ta zasada jest często używana do wyodrębniania informacji z wiadomości żądania lub odpowiedzi, możesz jej też używać do wyodrębniania informacji z innych źródeł, w tym z encji utworzonych przez zasadę AccessEntity, obiektów XML lub obiektów JSON.

Po wyodrębnieniu określonej treści wiadomości możesz odwoływać się do zmiennej w innych zasadach w ramach przetwarzania żądania i odpowiedzi.

Filmy

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

Wideo Opis
Wyodrębnianie zmiennych z ładunku XML Wyodrębnij zmienne z ładunku XML za pomocą zasady Extract Variable.
Wyodrębnianie zmiennych z ładunku JSON Wyodrębnij zmienne z ładunku JSON za pomocą zasady Extract Variable.
Wyodrębnianie zmiennych z parametrów Wyodrębnianie zmiennych z parametrów, takich jak parametry zapytania, nagłówka, formularza lub identyfikatora URI.
Wyodrębnianie zmiennych z parametrów z wieloma wartościami Wyodrębnianie zmiennych z parametrów o wielu wartościach.
Wyodrębnianie zmiennych z parametru zapytania (Classic Edge) Wyodrębnianie zmiennych z parametru zapytania za pomocą klasycznego interfejsu Edge.
Wyodrębnianie zmiennych z ładunku XML lub JSON (Classic Edge) Wyodrębnianie zmiennych z ładunku XML lub JSON za pomocą klasycznego interfejsu Edge.

Przykłady

Te przykłady kodu zasad pokazują, jak wyodrębniać zmienne z tych typów artefaktów:

GitHub

Te linki prowadzą do działających przykładów serwerów proxy interfejsu API, które możesz wdrożyć i uruchomić w Edge. Korzystają one z zasady ExtractVariables i znajdują się w repozytorium api-platform-samples Apigee w serwisie GitHub. Pliki README wyjaśniają, jak w każdym przypadku używana jest zasada ExtractVariables, oraz jak wdrożyć i uruchomić każdy przykład.

Identyfikatory URI

<ExtractVariables name="ExtractVariables-1">
   <DisplayName>Extract a portion of the url path</DisplayName>
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/accounts/{id}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Przyjrzyj się przykładowemu kodowi zasad powyżej. Element <URIPath> informuje zasadę ExtractVariables, że ma wyodrębnić informacje ze ścieżki URI. Element <Pattern> określa wzorzec, który ma być zastosowany do ścieżki URI. Wzorzec jest traktowany jako prosty szablon, a nawiasy klamrowe oznaczają zmienną część ścieżki URI.

Nazwa zmiennej, która ma zostać ustawiona, jest określana przez wartość podaną w elemencie <VariablePrefix> oraz wartość ujętą w nawiasy klamrowe {} w elemencie <Pattern>. Obie wartości są połączone kropką, co daje nazwę zmiennej, np. urirequest.id. Jeśli nie ma elementu <VariablePrefix>, nazwa zmiennej to po prostu wartość ujęta w nawiasy klamrowe.

Załóżmy, że powyższy przykładowy kod zasady działa z tym przychodzącym żądaniem:

GET http://org1-test.apigee.net/svc1/accounts/12797282

Załóżmy, że podstawowa ścieżka serwera proxy API to /svc1. Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego żądania przychodzącego, ustawi zmienną urirequest.id na wartość 12797282. Gdy Apigee Edge wykona zasadę, kolejne zasady lub kod w procesie przetwarzania mogą odwoływać się do zmiennej o nazwie urirequest.id, aby uzyskać wartość ciągu 12797282.

Na przykład ta zasada AssignMessage osadza wartość tej zmiennej w ładunku nowej wiadomości z żądaniem:

<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignPayload">
 <DisplayName>AssignPayload</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <IdExtractedFromURI>{urirequest.id}</IdExtractedFromURI>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
</AssignMessage>

Parametry zapytania

<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="code">
      <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Załóżmy, że powyższy przykładowy kod zasady działa z tym przychodzącym żądaniem:

GET http://org1-test.apigee.net/accounts/12797282?code=DBN88271

Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego żądania przychodzącego, ustawi zmienną queryinfo.dbncode na 88271. Gdy Apigee Edge wykona zasadę, kolejne zasady lub kod w procesie przetwarzania mogą odwoływać się do zmiennej o nazwie queryinfo.dbncode, aby uzyskać wartość ciągu 88271.

W serwerze proxy możesz teraz używać zmiennej queryinfo.dbncode. Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądania:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetQP</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractQP>{queryinfo.dbncode}</ExtractQP>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Wiele parametrów

<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="w">
      <Pattern ignoreCase="true">{firstWeather}</Pattern>
   </QueryParam>
   <QueryParam name="w.2">
     <Pattern ignoreCase="true">{secondWeather}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Załóżmy, że projekt interfejsu API umożliwia określanie wielu parametrów zapytania o tej samej nazwie. Za pomocą tej zasady możesz wyodrębnić wartość wielu wystąpień parametru zapytania „w”. Aby odwołać się do tych parametrów zapytania w zasadach ExtractVariables, użyj indeksów. Pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie ma indeks 2, trzecie – indeks 3 itd.

Załóżmy, że powyższy przykładowy kod zasady działa z tym przychodzącym żądaniem:

GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago

Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego przychodzącego żądania, ustawi zmienną queryinfo.firstWeather na Boston, a zmienną queryInfo.secondWeather na Chicago.

W serwerze proxy możesz teraz uzyskać dostęp do zmiennej queryinfo.firstWeatherqueryinfo.secondWeather. Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądania:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetQP</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1>
    <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Nagłówki

<ExtractVariables name='ExtractVariable-OauthToken'>
  <Source>request</Source>
  <Header name="Authorization">
    <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
  </Header>
  <VariablePrefix>clientrequest</VariablePrefix>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Załóżmy, że Twój interfejs API używa tokenów okaziciela OAuth 2.0. Rozważmy przykładowy kod zasad powyżej, który działa z żądaniem zawierającym token OAuth 2.0 z nagłówkiem takim jak ten:Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

Załóżmy, że jako projektant interfejsu API chcesz użyć wartości tokena (ale nie całego nagłówka) jako klucza w wyszukiwaniu w pamięci podręcznej. Aby wyodrębnić token, możesz użyć powyższego kodu zasady ExtractVariables.

Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego nagłówka, ustawi zmienną clientrequest.oauthtoken na wartość TU08xptfFfeM7aS0xHqlxTgEAdAM.

W proxy możesz teraz używać zmiennej clientrequest.oauthtoken. Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądania:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetHeader</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractHeader>{clientrequest.oauthtoken}</ExtractHeader>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

JSON

<ExtractVariables name="ExtractVariables-3">
   <Source>response</Source>
   <JSONPayload>
      <Variable name="latitude" type="float">
         <JSONPath>$.results[0].geometry.location.lat</JSONPath>
      </Variable>
      <Variable name="longitude" type="float">
         <JSONPath>$.results[0].geometry.location.lng</JSONPath>
      </Variable>
   </JSONPayload>
   <VariablePrefix>geocoderesponse</VariablePrefix>
</ExtractVariables>
<JSONPayload>$

Rozważmy ten ładunek odpowiedzi JSON:

{
  "results": [{
    "geometry": {
      "location": {
        "lat": 37.42291810,
        "lng": -122.08542120
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "northeast": {
          "lat": 37.42426708029149,
          "lng": -122.0840722197085
        },
        "southwest": {
          "lat": 37.42156911970850,
          "lng": -122.0867701802915
        }
      }
    }
  }]
}

Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tej wiadomości JSON, ustawi 2 zmienne: geocoderesponse.latitudegeocoderesponse.longitude. Obie zmienne używają tego samego prefiksu zmiennej: geocoderesponse. Sufiks tych zmiennych jest określony jednoznacznie przez atrybut name elementu <Variable>.

Zmienna geocoderesponse.latitude przyjmuje wartość 37.42291810. Zmienna geocoderesponse.longitude przyjmuje wartość -122.08542120.

W proxy możesz teraz używać zmiennej geocoderesponse.latitude. Na przykład ta zasada AssignMessage kopiuje ją do nagłówka o nazwie „latitude” w odpowiedzi:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
  <DisplayName>GetJSONVar</DisplayName>
  <Add>
    <Headers>
      <Header name="latitude">{geocoderesponse.latitude}</Header>
    </Headers>
  </Add>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

XML

<ExtractVariables name="ExtractVariables-4">
   <Source>response</Source>
   <XMLPayload>
      <Namespaces>
         <Namespace prefix="dir">urn:43BFF88D-D204-4427-B6BA-140AF393142F</Namespace>
      </Namespaces>
      <Variable name="travelmode" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/@mode</XPath>
      </Variable>
      <Variable name="duration" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:value</XPath>
      </Variable>
      <Variable name="timeunit" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:text</XPath>
      </Variable>
   </XMLPayload>
   <VariablePrefix>directionsresponse</VariablePrefix>
</ExtractVariables>
<XMLPayload>

Rozważmy ten przykładowy ładunek odpowiedzi XML:

<Directions xmlns="urn:43BFF88D-D204-4427-B6BA-140AF393142F">
   <status>OK</status>
   <route>
      <summary>I-40 W</summary>
      <leg>
         <step mode="DRIVING">
            <start_location>
               <lat>41.8507300</lat>
               <lng>-87.6512600</lng>
            </start_location>
            <end_location>
               <lat>41.8525800</lat>
               <lng>-87.6514100</lng>
            </end_location>
            <duration>
                <value>19</value>
                <text>minutes</text>
            </duration>
         </step>
      </leg>
   </route>
</Directions>

Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego komunikatu XML, ustawi 3 zmienne: directionsresponse.travelmode,, directionsresponse.durationdirectionsresponse.timeunit. Wszystkie zmienne mają ten sam prefiks directionsresponse. Sufiks tych zmiennych jest określony jednoznacznie przez atrybut name elementu <Variable>.

Zmienna directionsresponse.travelmode przyjmuje wartość DRIVING. Zmienna directionsresponse.duration przyjmuje wartość 19. Zmienna directionsresponse.timeunit przyjmuje wartość minutes.

Teraz możesz uzyskać dostęp do zmiennej directionresponse.travelmode w swoim serwerze proxy. Na przykład ta zasada AssignMessage kopiuje ją do nagłówka o nazwie „tmode” w odpowiedzi:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
  <DisplayName>GetXMLVar</DisplayName>
  <Add>
    <Headers>
      <Header name="tmode">{directionsresponse.travelmode}</Header>
    </Headers>
  </Add>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Informacje o zasadach ExtractVariables

Deweloperzy interfejsów API tworzą proxy interfejsów API, które zachowują się inaczej w zależności od treści wiadomości, w tym nagłówków, ścieżek URI, ładunków i parametrów zapytania. Często serwer proxy wyodrębnia część tych treści do użycia w instrukcji warunkowej. W tym celu użyj zasady ExtractVariables.

Podczas definiowania zasady ExtractVariables możesz wybrać:

  • Nazwy zmiennych do ustawienia.
  • Źródło zmiennych
  • Liczba zmiennych do wyodrębnienia i ustawienia

Po wykonaniu zasady stosują wzorzec tekstu do treści i po znalezieniu dopasowania ustawiają wartość wyznaczonej zmiennej na treść. Inne zasady i kod mogą następnie wykorzystywać te zmienne, aby włączać dynamiczne działanie lub wysyłać dane biznesowe do Edge API Analytics.

Aby dowiedzieć się, jak za pomocą funkcji ExtractVariables tworzyć raporty Analytics oparte na treściach, przeczytaj artykuł Analizowanie treści wiadomości API za pomocą niestandardowych statystyk.

Zakres

Zmienne ustawione za pomocą zasady ExtractVariables mają zakres globalny. Oznacza to, że po zdefiniowaniu nowej zmiennej przez zasadę ExtractVariables możesz uzyskać do niej dostęp z dowolnej zasady lub kodu na dowolnym etapie przepływu (który jest wykonywany po zasadzie ExtractVariables). Obejmuje to:

  • PreFlow: ProxyEndpoint i TargetEndpoint (żądanie i odpowiedź)
  • PostFlow: ProxyEndpoint i TargetEndpoint (żądanie i odpowiedź)
  • PostClientFlow: ProxyEndpoint (tylko odpowiedź, z użyciem zasad rejestrowania wiadomości)
  • Przepływy błędów

Łączenie danych i tworzenie zmiennych

Zasada ExtractVariables wyodrębnia informacje z żądania lub odpowiedzi i zapisuje je w zmiennej. W przypadku każdego typu informacji, które możesz wyodrębnić, np. ścieżki URI lub danych XML, określ wzorzec do dopasowania i nazwę zmiennej używanej do przechowywania wyodrębnionych informacji.

Sposób dopasowywania wzorców zależy jednak od źródła wyodrębniania. W sekcjach poniżej opisujemy 2 podstawowe kategorie informacji, które możesz wyodrębnić.

Dopasowywanie ścieżek URI, parametrów zapytania, nagłówków, parametrów formularza i zmiennych

Podczas wyodrębniania informacji ze ścieżki URI, parametrów zapytania, nagłówków, parametrów formularza i zmiennych używasz tagu <Pattern>, aby określić co najmniej 1 wzorzec do dopasowania. Na przykład w tym przykładzie zasad pokazano pojedynczy pasujący wzorzec ścieżki URI:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

W tym przykładzie zmienna urirequest.pathSeg jest ustawiona na wartość, która pojawia się w proxy.pathsuffix po „/a/”. Załóżmy na przykład, że ścieżka bazowa serwera proxy interfejsu API to /basepath/v1 . W przypadku żądania przychodzącego do http://myCo.com/basepath/v1/a/b zmienna przyjmuje wartość „b”.

Określanie wielu wzorców

Możesz określić wiele wzorców do dopasowania, które odpowiadają tagom <Pattern>, gdzie:

  • Wszystkie wzorce są testowane pod kątem dopasowania.
  • Jeśli żaden wzorzec nie pasuje, zasada nie działa, a zmienne nie są tworzone.
  • Jeśli pasuje więcej niż jeden wzorzec, do wyodrębniania używany jest wzorzec z najdłuższymi segmentami ścieżki.
  • Jeśli 2 dopasowane wzorce mają takie same najdłuższe segmenty ścieżki, do wyodrębniania używany jest wzorzec określony jako pierwszy w zasadach.

W następnym przykładzie utworzysz zasadę zawierającą 3 wzorce dopasowania ścieżki URI:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Załóżmy, że w przypadku serwera proxy interfejsu API ze ścieżką podstawową /basepath/v1 przychodzący adres URL żądania do serwera proxy interfejsu API ma taką postać:

http://myCo.com/basepath/v1/a/b

W tym przykładzie pierwszy wzorzec pasuje do identyfikatora URI, a zmienna urirequest.pathSeg ma wartość „b”.

Jeśli adres URL żądania to:

http://myCo.com/basepath/v1/a/b/c/d

...wtedy pasuje trzeci wzorzec, a zmienna urirequest.pathSeg przyjmuje wartość „d”.

Określanie wzorców z wieloma zmiennymi

W wzorcu dopasowania możesz określić wiele zmiennych. Możesz na przykład określić wzorzec dopasowania z 2 zmiennymi:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/{pathSeg1}/c/{pathSeg2}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Załóżmy , że serwer proxy interfejsu API ma ścieżkę podstawową /basepath/v1. W przypadku adresu URL żądania przychodzącego:

http://myCo.com/basepath/v1/a/b/c/d

...zmienna urirequest.pathSeg1 ma wartość „b”, a zmienna urirequest.pathSeg2 ma wartość „d”.

Dopasowywanie wielu wystąpień we wzorcu

Możesz też dopasowywać wzorce, gdy występuje wiele instancji elementu o tej samej nazwie. Możesz na przykład wysłać żądanie zawierające wiele parametrów zapytania lub wiele nagłówków o tej samej nazwie. To żądanie zawiera 2 parametry zapytania o nazwie „w”:

http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2

Aby odwołać się do tych parametrów zapytania w zasadach ExtractVariables, użyj indeksów. Pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie ma indeks 2, trzecie – indeks 3 itd. Na przykład te zasady wyodrębniają wartość drugiego parametru zapytania o nazwie „w” w żądaniu:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <QueryParam name="w.2">
      <Pattern ignoreCase="true">{secondW}</Pattern>
   </QueryParam>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Zmienna urirequest.secondW ma wartość „2”. Jeśli w żądaniu brakuje drugiego parametru zapytania, zmienna urirequest.secondW jest pusta. Indeksowania używaj zawsze, gdy w żądaniu występuje wiele elementów o tej samej nazwie.

Używanie znaków specjalnych w wzorcu

Podczas dopasowywania ścieżek URI we wzorcu możesz używać symboli wieloznacznych „*” i „**”, gdzie:

  • „*” pasuje do dowolnego segmentu ścieżki.
  • „**” pasuje do wielu segmentów ścieżki.

Na przykład określasz wzorce dla elementu <URIPath> w sposób pokazany poniżej:

<URIPath>
  <Pattern ignoreCase="true">/a/*/{id}</Pattern>
  <Pattern ignoreCase="true">/a/**/{id}</Pattern>
</URIPath>

Pierwszy wzorzec pasuje do żądań z sufiksami ścieżki (część ścieżki URI po ścieżce podstawowej), takimi jak „/a/b/c”, „/a/foo/bar” itp. Drugi wzorzec pasuje do dowolnej liczby segmentów ścieżki po „/a/”, np. „/a/foo/bar/baz/c”, a także „/a/b/c” i „/a/foo/bar”.

Podczas określania wzorców dla parametrów zapytania, nagłówków i parametrów formularza znak „*” oznacza dopasowanie dowolnej liczby znaków. Na przykład podczas dopasowywania nagłówka określ wzorzec w ten sposób:

*;charset={encoding}

Ten wzorzec pasuje do wartości „text/xml;charset=UTF-16” i „application/xml;charset=ASCII”.

Jeśli wartość przekazana do zasady ExtractVariables zawiera znak specjalny, np. „{”, użyj znaku „%”, aby zmienić jego znaczenie. W tym przykładzie znaki „{” i „}” w wzorcu są poprzedzone znakiem zmiany znaczenia, ponieważ są używane jako znaki dosłowne w wartości parametru zapytania:

<QueryParam>
  <Pattern ignoreCase="true">%{user%} {name}</Pattern>
</QueryParam>

W tym przykładzie wzorzec pasuje do wartości „{user} Steve”, ale nie do wartości „user Steve”.

Dopasowywanie plików JSON i XML

Podczas wyodrębniania danych z plików JSON i XML w zasadach określasz co najmniej 1 tag <Variable>. Tag <Variable> określa nazwę zmiennej docelowej, w której są przechowywane wyodrębnione informacje, oraz ścieżkę JsonPath (JSON) lub XPATH (XML) do wyodrębnionych informacji.

Wszystkie tagi <Variable> w zasadach są oceniane, dzięki czemu możesz wypełniać wiele zmiennych na podstawie pojedynczych zasad. Jeśli tag <Variable> nie zostanie przekształcony w prawidłowe pole w pliku JSON lub XML, odpowiednia zmienna nie zostanie utworzona.

Poniższy przykład przedstawia zasadę ExtractVariables, która wypełnia 2 zmienne z treści odpowiedzi w formacie JSON:

<ExtractVariables name="ExtractVariables-3">
   <Source>response</Source>
   <JSONPayload>
      <Variable name="latitude" type="float">
         <JSONPath>$.results[0].geometry.location.lat</JSONPath>
      </Variable>
      <Variable name="longitude" type="float">
         <JSONPath>$.results[0].geometry.location.lng</JSONPath>
      </Variable>
   </JSONPayload>
   <VariablePrefix>geocoderesponse</VariablePrefix>
</ExtractVariables>

Zapisywanie tej samej zmiennej w wielu miejscach

Zachowaj ostrożność podczas wybierania nazw zmiennych do ustawienia. Zasada jest wykonywana sekwencyjnie od pierwszego do ostatniego wzorca wyodrębniania. Jeśli zasada zapisuje wartość w tej samej zmiennej w kilku miejscach, wartość zmiennej jest określana przez ostatni zapis w zasadzie. (Być może o to Ci chodzi).

Załóżmy na przykład, że chcesz wyodrębnić wartość tokena, która może być przekazywana w parametrze zapytania lub w nagłówku, jak pokazano poniżej:

<!-- If token only in query param, the query param determines the value.
     If token is found in both the query param and header, header sets value. -->
<QueryParam name="token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</QueryParam>

<!-- Overwrite tokenValue even if it was found in query parameter. -->
<Header name="Token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</Header>

Określanie, co się stanie, gdy nie będzie dopasowania

Jeśli wzorzec nie pasuje, odpowiednia zmienna nie zostanie utworzona. Dlatego jeśli inna zasada odwołuje się do zmiennej, może to spowodować błąd.

Jedną z opcji jest ustawienie wartości <IgnoreUnresolvedVariables> na „true” w zasadach, które odwołują się do zmiennej, aby skonfigurować zasadę tak, aby traktowała każdą nierozwiązywalną zmienną jako pusty ciąg znaków (null):

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

Odwołanie do elementu

Odwołanie do elementu opisuje elementy i atrybuty zasad ExtractVariables.

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
   <DisplayName>Extract Variables 1</DisplayName>
   <Source clearPayload="true|false">request</Source>
   <VariablePrefix>myprefix</VariablePrefix>
   <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
   <URIPath>
      <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   </URIPath>
   <QueryParam name="code">
      <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
   </QueryParam>
   <Header name="Authorization">
      <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
   </Header>
   <FormParam name="greeting">
      <Pattern>hello {user}</Pattern>
   </FormParam>
   <Variable name="request.content">
       <Pattern>hello {user}</Pattern>
   </Variable>
   <JSONPayload>
      <Variable name="name">
         <JSONPath>{example}</JSONPath>
      </Variable>
   </JSONPayload>
   <XMLPayload stopPayloadProcessing="false">
      <Namespaces/>
      <Variable name="name" type="boolean">
         <XPath>/test/example</XPath>
      </Variable>
   </XMLPayload>
</ExtractVariables>

Atrybuty elementu <ExtractVariables>

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">

W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślny Obecność
name

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 możesz użyć elementu <DisplayName> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po zastosowaniu zasady niepowodzenie.

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; element

Używaj oprócz atrybutu name do oznaczania zasady w edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

<DisplayName>Policy Display Name</DisplayName>
Domyślny

Nie dotyczy

Jeśli pominiesz ten element, atrybut name zasady otrzyma wartość .

Obecność Opcjonalnie
Typ Ciąg znaków

Element <Source>

(Opcjonalnie) Określa zmienną, która ma zostać przeanalizowana. Wartość <Source> jest domyślnie ustawiona na message. Wartość message zależy od kontekstu. W przypadku przepływu żądania wartość message jest rozpoznawana jako wiadomość z żądaniem. W przepływie odpowiedzi wartość message jest rozwiązywana jako wiadomość z odpowiedzią.

Zasady te są często używane do wyodrębniania informacji z wiadomości z prośbą lub odpowiedzią, ale można ich używać do wyodrębniania informacji z dowolnej zmiennej. Możesz go na przykład użyć do wyodrębniania informacji z elementu utworzonego przez zasady AccessEntity, z danych zwracanych przez zasady wywołania usługi lub z obiektu XML lub JSON.

Jeśli nie można rozpoznać <Source> lub rozpoznano go jako typ inny niż wiadomość, zasada nie odpowie.

<Source clearPayload="true|false">request</Source>
Domyślnie: wiadomość
Obecność: Opcjonalny
Typ: Ciąg znaków

Atrybuty

Atrybut Opis Domyślny Obecność Typ
clearPayload

Ustaw wartość true, jeśli po wyodrębnieniu danych z ładunku określonego w elemencie <Source> chcesz go wyczyścić.

Opcji <clearPayload> używaj tylko wtedy, gdy wiadomość źródłowa nie jest wymagana po wykonaniu funkcji ExtractVariables. Ustawienie wartości true zwalnia pamięć używaną przez wiadomość.

fałsz

Opcjonalny Wartość logiczna

Element <VariablePrefix>

(Opcjonalnie) Pełna nazwa zmiennej powstaje przez połączenie <VariablePrefix>, kropki i nazwy zdefiniowanej w {nawiasach klamrowych} w elemencie <VariablePrefix> lub elemencie <Variable>.<Pattern> Na przykład:myprefix.id, myprefix.dbncode lub myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

Załóżmy na przykład, że wartość parametru name to „user”.

  • Jeśli nie podasz właściwości <VariablePrefix>, wyodrębnione wartości zostaną przypisane do zmiennej o nazwie user.
  • Jeśli jako prefiks podasz <VariablePrefix>, wyodrębnione wartości zostaną przypisane do zmiennej o nazwie myprefix.user.
Domyślnie: Nie dotyczy
Obecność: Opcjonalny
Typ: Ciąg znaków

Element <IgnoreUnresolvedVariables>

(Opcjonalnie) Ustaw na true, aby traktować każdą nierozwiązywalną zmienną jako pusty ciąg znaków (wartość null). Ustaw wartość false, jeśli chcesz, aby zasada zgłaszała błąd, gdy nie można rozpoznać żadnej z odwoływanych zmiennych.

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
Domyślnie: Fałsz
Obecność: Opcjonalny
Typ: Wartość logiczna

Jeśli odwołanie XPath w <XMLPayload> nie zostanie rozwiązane, zasada zgłosi następujący błąd:

{
   "fault":{
      "faultstring":"Unresolved xpath path in policy policy_name.",
      "detail":{
         "errorcode":"steps.extractvariables.InvalidXPath"
      }
   }
}

Element <URIPath>

(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z elementu proxy.pathsuffix źródłowej wiadomości request. Ścieżka zastosowana do wzorca to proxy.pathsuffix, która nie zawiera ścieżki podstawowej serwera proxy interfejsu API. Jeśli wiadomość źródłowa zostanie rozpoznana jako typ wiadomości response, ten element nie wykonuje żadnej czynności.

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
</URIPath>

Można użyć wielu elementów <Pattern>:

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>
Domyślnie: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>..
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
ignoreCase Określa, czy podczas dopasowywania wzorca ma być ignorowana wielkość liter.

fałsz

Opcjonalny Wartość logiczna

Element <QueryParam>

(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego parametru zapytania w wiadomości źródłowej żądania. Jeśli wiadomość źródłowa jest typu odpowiedź, ten element nie robi nic.

<QueryParam name="code">
   <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>

Jeśli kilka parametrów zapytania ma tę samą nazwę, użyj indeksów, aby się do nich odwoływać:

<QueryParam name="w.2">
   <Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
Domyślnie: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>..
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
nazwa Określa nazwę parametru zapytania. Jeśli kilka parametrów zapytania ma tę samą nazwę, użyj odwoływania indeksowanego, w którym pierwsza instancja parametru zapytania nie ma indeksu, druga ma indeks 2, trzecia – indeks 3 itd.

Nie dotyczy

Wymagane Ciąg znaków

Element <Header>

(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego nagłówka HTTP w określonym żądaniu lub odpowiedzi. Jeśli kilka nagłówków ma taką samą nazwę, ich wartości są przechowywane w tabeli.

<!-- The name is the actual header name. -->
<Header name="Authorization">
<!-- Provide a name for your new custom variable here. -->
   <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
</Header>

Jeśli kilka nagłówków ma tę samą nazwę, użyj indeksów, aby odwoływać się do poszczególnych nagłówków w tablicy:

<Header name="myHeader.2">
   <Pattern ignoreCase="true">{secondHeader}</Pattern>
</Header>

lub to polecenie, aby wyświetlić listę wszystkich nagłówków w tablicy:

<Header name="myHeader.values">
   <Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>
Domyślnie: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>..
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
nazwa Określa nazwę nagłówka, z którego wyodrębniana jest wartość. Jeśli kilka nagłówków ma tę samą nazwę, użyj odwoływania indeksowanego, w którym pierwsza instancja nagłówka nie ma indeksu, druga ma indeks 2, trzecia 3 itd. Aby uzyskać wszystkie nagłówki w tablicy, użyj .values.

Nie dotyczy

Wymagane Ciąg znaków

Element <FormParam>

(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego parametru formularza w określonym żądaniu lub odpowiedzi. Parametry formularza można wyodrębnić tylko wtedy, gdy nagłówek Content-Type określonej wiadomości ma wartość application/x-www-form-urlencoded.

<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>
Domyślnie: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>..
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
nazwa Nazwa parametru formularza, z którego wyodrębniasz wartość.

Nie dotyczy

Wymagane Ciąg znaków

Element <Variable>

(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Określa nazwę zmiennej, z której ma zostać wyodrębniona wartość.

<Variable name="myVar">
    <Pattern>hello {user}</Pattern>
</Variable>

Aby wyodrębnić z zmiennej 2 wartości:

<Variable name="myVar">
   <Pattern>hello {firstName} {lastName}</Pattern>
</Variable>
Domyślnie: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>..
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
nazwa Nazwa zmiennej, z której ma zostać wyodrębniona wartość.

Nie dotyczy

Wymagane Ciąg znaków

Element <JSONPayload>

(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Określa wiadomość w formacie JSON, z której zostanie wyodrębniona wartość zmiennej. Wyodrębnianie danych w formacie JSON jest wykonywane tylko wtedy, gdy nagłówek Content-Type wiadomości ma wartość application/json.

<JSONPayload>
   <Variable name="name" type="string">
      <JSONPath>{example}</JSONPath>
   </Variable>
</JSONPayload>
Domyślnie: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>..
Typ: Nie dotyczy

Element <JSONPayload>/<Variable>

(Wymagany w elemencie JSONPayload). Określa zmienną, do której przypisywana jest wyodrębniona wartość. W elemencie <JSONPayload> możesz umieścić wiele tagów <Variable>, aby wypełnić wiele zmiennych.

<Variable name="name" type="string">
   <JSONPath>{example}</JSONPath>
</Variable>
Domyślnie: Nie dotyczy
Obecność: Wymagany w elemencie JSONPayload.
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
nazwa

Określa nazwę zmiennej, do której zostanie przypisana wyodrębniona wartość.

nazwa

Wymagane Ciąg znaków
typ Określa typ danych wartości zmiennej. Nie dotyczy Opcjonalny

Ciąg tekstowy. Do wyboru masz te opcje:

  • ciąg znaków
  • Wartość logiczna
  • liczba całkowita
  • Liczba długa
  • liczba zmiennoprzecinkowa
  • podwójny
  • zbiór węzłów (zwraca fragment JSON)

Element <JSONPayload>/<Variable>/<JSONPath>

(Wymagany w elemencie JSONPayload:Variable). Określa ścieżkę JSON używaną do wyodrębniania wartości z wiadomości w formacie JSON.

<Variable name="name">
   <JSONPath>$.rss.channel.title</JSONPath>
</Variable>
Domyślnie: Nie dotyczy
Obecność: Wymagane
Typ: Ciąg znaków

Element <XMLPayload>

(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Określa komunikat w formacie XML, z którego zostanie wyodrębniona wartość zmiennej. Ładunki XML są wyodrębniane tylko wtedy, gdy nagłówek Content-Type wiadomości ma wartość text/xml, application/xml lub application/*+xml.

<XMLPayload stopPayloadProcessing="false">
  <Namespaces>
     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     <Namespace prefix="gmail">http://mail.google.com</Namespace>
  </Namespaces>
  <Variable name="name" type="boolean">
     <XPath>/apigee:test/apigee:example</XPath>
  </Variable>
</XMLPayload>
Domyślnie: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>..
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
stopPayloadProcessing

Ustaw wartość true, aby zatrzymać ocenę XPath po wypełnieniu jednej zmiennej. Oznacza to, że zasady wypełniają tylko jedną zmienną.

fałsz

Opcjonalny Wartość logiczna

Element <XMLPayload>/<Namespaces>

(Opcjonalnie) Określa przestrzeń nazw, która ma być używana podczas obliczania wyrażenia XPath. Jeśli w wyrażeniach XPath używasz przestrzeni nazw, musisz je zadeklarować w tym miejscu, jak pokazano w przykładzie poniżej.

<XMLPayload stopPayloadProcessing="false">
  <Namespaces>
     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     <Namespace prefix="gmail">http://mail.google.com</Namespace>
  </Namespaces>
  <Variable name="legName" type="string">
    <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
  </Variable>
</XMLPayload>

Jeśli w wyrażeniach XPath nie używasz przestrzeni nazw, możesz pominąć lub zakomentować element <Namespaces>, jak pokazano w tym przykładzie:

<XMLPayload stopPayloadProcessing="false">
  <!-- <Namespaces/> -->
  <Variable name="legName" type="string">
    <XPath>/Directions/route/leg/name</XPath>
  </Variable>
</XMLPayload>
Domyślnie: Nie dotyczy
Obecność: Opcjonalny
Typ: Ciąg znaków

Atrybuty

Atrybut Opis Domyślny Obecność Typ
prefix

Prefiks przestrzeni nazw.

Nie dotyczy

Wymagane Ciąg znaków

Element <XMLPayload>/<Variable>

(Opcjonalnie) Określa zmienną, do której zostanie przypisana wyodrębniona wartość.

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>
Domyślnie: Nie dotyczy
Obecność: Opcjonalny
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
nazwa

Określa nazwę zmiennej, do której zostanie przypisana wyodrębniona wartość.

nazwa

Wymagane Ciąg znaków
typ Określa typ danych wartości zmiennej. Wartość logiczna Opcjonalny

Ciąg tekstowy. Do wyboru masz te opcje:

  • ciąg znaków
  • Wartość logiczna
  • liczba całkowita
  • Liczba długa
  • liczba zmiennoprzecinkowa
  • podwójny
  • zbiór węzłów (zwraca fragment XML)

Element <XMLPayload>/<Variable>/<XPath>

(Wymagany w elemencie XMLPayload:Variable). Określa ścieżkę XPath zdefiniowaną dla zmiennej. Obsługiwane są tylko wyrażenia XPath 1.0.

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>

Przykład z przestrzenią nazw. Jeśli w wyrażeniach XPath używasz przestrzeni nazw, musisz zadeklarować je w sekcji <XMLPayload><Namespaces> zasad.

<Variable name="name" type="boolean">
   <XPath>/foo:test/foo:example</XPath>
</Variable>
Domyślnie: Nie dotyczy
Obecność: Wymagane
Typ: Ciąg znaków

Odniesienie do błędu

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

Błędy w czasie wykonywania

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

Kod błędu Stan HTTP Przyczyna Napraw
steps.extractvariables.ExecutionFailed 500

Ten błąd występuje, gdy:

  • Ładunek wejściowy (JSON, XML) jest pusty.
  • Dane wejściowe (JSON, XML itp.) przekazywane do zasady są nieprawidłowe lub źle sformułowane.
steps.extractvariables.ImmutableVariable 500 Zmiennej używanej w zasadzie nie można zmienić. Zasada nie mogła tego ustawić .
steps.extractvariables.InvalidJSONPath 500 Ten błąd występuje, jeśli w elemencie JSONPath metody JSON używana jest nieprawidłowa ścieżka JSON . Jeśli na przykład ładunek JSON nie ma obiektu Name, ale podasz w zasadzie Name, to ten błąd występuje.
steps.extractvariables.JsonPathParsingFailure 500 Ten błąd występuje, gdy zasada nie może przeanalizować ścieżki JSON i wyodrębnienia danych ze zmiennej przepływu określonej w elemencie Source. Zwykle to dzieje się, jeśli zmienna przepływu podana w elemencie Source nie istnieje w bieżącej przepływu danych.
steps.extractvariables.SetVariableFailed 500 Ten błąd występuje, jeśli zasada nie może ustawić wartości zmiennej. Błąd ten występuje zazwyczaj przy próbie przypisania wartości do wielu zmiennych, których nazwy zaczynają się z tymi samymi słowami w zagnieżdżonym formacie oddzielonych kropkami.
steps.extractvariables.SourceMessageNotAvailable 500 Ten błąd występuje, jeśli komunikat zmienna określona w elemencie Source zasady jest:
  • poza zakresem (niedostępne w ramach konkretnego procesu, w którym są realizowane zasady) lub
  • Nie można go rozwiązać (nie jest zdefiniowany)
steps.extractvariables.UnableToCast 500 Ten błąd występuje, jeśli zasada nie może rzutować wyodrębnionych elementów do zmiennej. Zwykle dzieje się tak, gdy próbujesz ustawić wartość z jednego typu danych na zmienną innego typu danych.

Błędy wdrażania

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

Nazwa błędu Przyczyna Napraw
NothingToExtract Jeśli zasada nie zawiera żadnego elementu URIPath, QueryParam, Header, FormParam, XMLPayload lub JSONPayload, wdrożenie serwera proxy interfejsu API się nie uda, ponieważ nie ma niczego do wyodrębnienia.
NONEmptyPrefixMappedToEmptyURI Ten błąd występuje, jeśli zasada ma prefiks zdefiniowany w Namespace w elemencie XMLPayload, ale żaden identyfikator URI nie jest zdefiniowano jego definicję.
DuplicatePrefix Ten błąd występuje, jeśli zasada ma ten sam prefiks zdefiniowany więcej niż tylko raz w elemencie Namespace w elemencie XMLPayload.
NoXPathsToEvaluate Jeśli zasada nie ma elementu XPath w parametrze XMLPayload, wdrożenie serwera proxy interfejsu API kończy się niepowodzeniem i wyświetlany jest ten błąd.
EmptyXPathExpression Jeśli zasada ma puste wyrażenie XPath w elemencie XMLPayload , nie uda się wdrożyć serwera proxy interfejsu API.
NoJSONPathsToEvaluate Jeśli zasada nie ma elementu JSONPath w parametrze JSONPayload, wdrożenie serwera proxy interfejsu API kończy się niepowodzeniem i wyświetlany jest ten błąd.
EmptyJSONPathExpression Jeśli zasada ma puste wyrażenie XPath w parametrze XMLPayload, nie udało się wdrożyć serwera proxy interfejsu API.
MissingName Jeśli zasada nie ma atrybutu name w żadnej zasadzie elementy takie jak QueryParam, Header, FormParam lub Variable, jeśli jest to wymagane, nie uda się wdrożyć serwera proxy interfejsu API.
PatternWithoutVariable Jeśli zasada nie ma określonej zmiennej w elemencie Pattern, wdrożenie serwera proxy interfejsu API się nie uda. Element Pattern wymaga nazwy zmienną, w której będą przechowywane wyodrębnione dane.
CannotBeConvertedToNodeset Jeśli zasada zawiera wyrażenie XPath, w którym typ Variable jest zdefiniowana jako nodeset, ale wyrażenia nie można przekonwertować na zbiór węzłów, wdrożenie serwera proxy interfejsu API się nie uda.
JSONPathCompilationFailed Zasada nie mogła skompilować określonej ścieżki JSON.
InstantiationFailed Nie udało się utworzyć wystąpienia zasady.
XPathCompilationFailed Jeśli prefiks lub wartość w elemencie XPath nie są częścią żadnej zadeklarowanych w zasadach przestrzeni nazw, a następnie wdrożenie serwera proxy interfejsu API niepowodzenie.
InvalidPattern Jeśli definicja elementu Pattern jest nieprawidłowa w którymkolwiek z elementów, takich jak URIPath, QueryParam, Header, FormParam, XMLPayload lub JSONPayload, wdrożenie Błąd serwera proxy interfejsu API.

Zmienne błędów

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

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

Przykładowa odpowiedź na błąd

{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse"
   }
}

Przykładowa reguła błędu

<FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name = "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition>
</FaultRule>

Schematy

Powiązane artykuły

Analizowanie treści wiadomości interfejsu API za pomocą niestandardowych statystyk

Informacje o zmiennych