Zasady wyodrębniania zmiennych

Wyświetlasz dokumentację Apigee Edge.
Otwórz 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. Działanie zasady polega na zastosowaniu wzorca tekstu do treści wiadomości i ustawieniu zmiennej z określoną treścią wiadomości po znalezieniu dopasowania.

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ębnij zmienne 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 żądaniem przychodzącym:

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

Załóżmy, że podstawowa ścieżka serwera proxy interfejsu API to /svc1. Gdy Apigee Edge zastosuje do tego żądania przychodzącego powyższy kod zasady ExtractVariables, ustawi zmienną urirequest.id na 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 znaków 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 żądaniem przychodzącym:

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

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

W proxy możesz teraz używać zmiennej queryinfo.dbncode. Na przykład ta zasada AssignMessage kopiuje go 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 żądaniem przychodzącym:

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 korzystać ze 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ć kodu zasady ExtractVariables powyżej.

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

W swoim serwerze proxy możesz teraz uzyskać dostęp do 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 swoim serwerze proxy możesz teraz uzyskać dostęp do 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>

Oto przykładowa odpowiedź w formacie 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.

Możesz teraz uzyskać dostęp do zmiennej directionresponse.travelmode w swoim serwerze proxy. Na przykład poniższa 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

Programiści interfejsów API tworzą proxy interfejsów API, które działają 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 zasada stosuje do treści wzorzec tekstu, a po znalezieniu dopasowania ustawia wartość wyznaczonej zmiennej z treścią. Inne zasady i kod mogą następnie wykorzystywać te zmienne, aby włączyć 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 interfejsu 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 i tworzenie zmiennych

Zasady ExtractVariables wyodrębniają informacje z żądania lub odpowiedzi i zapisują 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 działania 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 jeden 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 podstawowa 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 wykonuje żadnych 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 – 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ść przekazywana 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 literału 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 odnosi się do prawidłowego pola w pliku JSON lub XML, odpowiednia zmienna nie zostanie utworzona.

Poniższy przykład pokazuje 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. (Może to być to, czego szukasz).

Załóżmy na przykład, że chcesz wyodrębnić wartość tokena, którą można przekazać 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ć zasady tak, aby traktowały każdą nierozwiązywalną zmienną jako pusty ciąg znaków (null):

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

Odwołanie do elementu

Dokumentacja elementu zawiera opis elementów i atrybutów zasady 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 jest zależna od kontekstu. W przypadku przepływu żądania symbol message odnosi się do wiadomości z żądaniem. W przepływie odpowiedzi zmienna message jest rozpoznawana 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 zwróconych przez zasady wywołania usługi lub z obiektu XML lub JSON.

Jeśli nie można rozpoznać <Source> lub jeśli zostanie rozpoznany 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 <Pattern> lub elemencie <Variable>. 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 wartości <VariablePrefix>, wyodrębnione wartości zostaną przypisane do zmiennej o nazwie user.
  • Jeśli jako <VariablePrefix> podano myprefix, wyodrębnione wartości są przypisywane 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 zmiennej, do której się odwołuje.

<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 żądania. Ścieżka zastosowana do wzorca to proxy.pathsuffix, która nie zawiera ścieżki podstawowej proxy interfejsu API. Jeśli wiadomość źródłowa jest typu response, ten element nie ma żadnego działania.

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

  • tekst
  • 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 wykomentować 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:

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

Odwołanie 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