Zasady wyodrębniania zmiennych

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Co

Zasada Extractvariables wyodrębnia treść z żądania lub odpowiedzi i ustawia wartość zmienną dla tej treści. Możesz wyodrębnić dowolną część wiadomości, w tym nagłówki, ścieżki URI, ładunki JSON/XML, formularz i parametry zapytania. Zasada działa przez zastosowanie wzorca tekstu do wiadomości i po znalezieniu dopasowania ustawia zmienną z określoną treścią wiadomości.

Chociaż często używasz tej zasady do wyodrębniania informacji z wiadomości z prośbą lub odpowiedzią, może również użyć go do wyodrębnienia informacji z innych źródeł, w tym z jednostek utworzonych przez Zasady AccessEntity, obiekty XML lub obiekty JSON.

Po wyodrębnieniu określonej treści wiadomości możesz odwołać się do zmiennej w innym miejscu zasad przetwarzania żądań i odpowiedzi.

Filmy

Obejrzyj poniższe filmy, by dowiedzieć się więcej o zasadzie Extractvariables.

Wideo Opis
Wyodrębnianie zmiennych z ładunku XML Wyodrębnianie zmiennych z ładunku XML za pomocą zasady Wyodrębnianie zmiennej.
Wyodrębnianie zmiennych z ładunku JSON Wyodrębnianie zmiennych z ładunku JSON za pomocą zasady wyodrębniania zmiennej.
Wyodrębnianie zmiennych z parametrów Wyodrębnianie zmiennych z parametrów, takich jak zapytanie, nagłówek, formularz lub identyfikator URI.
Wyodrębnianie zmiennych na podstawie parametrów wielowartościowych Wyodrębnianie zmiennych z parametrów wielowartościowych.
Wyodrębnianie zmiennych z parametru zapytania (Classic Edge) Wyodrębnianie zmiennych z parametru zapytania za pomocą interfejsu użytkownika klasycznej wersji Edge.
Wyodrębnianie zmiennych z ładunku XML lub JSON (Classic Edge) Wyodrębnianie zmiennych z ładunku XML lub JSON za pomocą interfejsu użytkownika klasycznej wersji Edge.

Przykłady

Poniższe przykłady kodu zasad pokazują, jak wyodrębniać zmienne z następujących typów artefakty:

GitHub

Te linki wskazują przykłady działającego serwera proxy interfejsu API, które możesz wdrożyć i uruchomić w Edge. Ta korzystają z metody ExtractZmienne i znajdują się one w repozytorium interfejsu API platformy api-platform-samples w Apigee GitHub. W plikach README wyjaśnia się, jak w poszczególnych przypadkach jest używany obiekt Extractvariables oraz jak wdrażać i uruchomić każdą próbkę.

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>

Przeanalizuj przykładowy kod zasad powyżej. Element <URIPath> informuje Zasada ExtractZmienne do wyodrębniania informacji ze ścieżki identyfikatora URI. Element <Pattern> określa wzorzec stosowany do ścieżki identyfikatora URI. jest traktowany jako prosty szablon, w którym nawiasy klamrowe wskazują różne części ścieżki identyfikatora URI.

Nazwa zmiennej, która ma zostać ustawiona, zależy od wartości określonej w kolumnie <VariablePrefix> oraz wartość w nawiasach klamrowych {}. w elemencie <Pattern>. Dwie wartości są połączone kropką w wyniku czego nazwa zmiennej to urirequest.id. W przypadku braku <VariablePrefix>, nazwa zmiennej jest tylko wartością w nawiasach klamrowych.

Przykładowy kod zasad powyżej współpracuje z tym żądaniem przychodzącym:

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

Załóżmy, że ścieżka bazowa serwera proxy interfejsu API to /svc1. Gdy Apigee Edge stosuje Wyodrębnić podany wyżej kod zasady Extractvariables na to przychodzące żądanie, ponieważ ustawia on zmienną urirequest.id do 12797282. Gdy Apigee Edge uruchomi zasadę, kolejne zasady lub kod w procesie przetwarzania mogą odnosić się do zmiennej o nazwie urirequest.id, aby pobrać wartość ciągu znaków 12797282.

Na przykład następująca zasada AssignMessage osadza wartość tej zmiennej w funkcji ładunek nowej wiadomości żądania:

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

Przykładowy kod zasad powyżej współpracuje z tym żądaniem przychodzącym:

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

Gdy Apigee Edge zastosuje powyższy kod zasady ExtractZmienne do tego żądania przychodzącego, ustawia zmienną queryinfo.dbncode na 88271. Po Apigee Edge uruchamia zasadę, kolejne zasady lub kod w procesie przetwarzania mogą odnosić się o nazwie queryinfo.dbncode, aby otrzymać wartość ciągu znaków 88271.

Możesz teraz uzyskać dostęp do zmiennej queryinfo.dbncode w serwerze proxy. 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ślenie wielu parametrów zapytania z takim samym imię i nazwisko. Za pomocą tej zasady możesz wyodrębniać wartość wielu instancji zapytania „w”. Aby odwołać się do tych parametrów zapytania w zasadzie Extractvariables, musisz: używa indeksów, gdzie pierwsze wystąpienie parametru zapytania nie ma indeksu, a drugie jest indeks 2, trzeci w indeksie 3 itd.

Przykładowy kod zasad powyżej współpracuje z tym żądaniem przychodzącym:

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

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

Masz teraz dostęp do zmiennej queryinfo.firstWeather queryinfo.secondWeather w Twój serwer proxy. Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądanie:

<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. Zobacz przykładowy kod zasad powyżej pracy z żądaniem z tokenem OAuth w wersji 2.0 z nagłówkiem podobnym do tego: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

Jako projektant interfejsu API załóżmy, że chcesz użyć wartości tokena (a nie całej wartości nagłówek) jako klucz przy wyszukiwaniu pamięci podręcznej. Możesz użyć powyższego kodu zasady Extractvariables, i wyodrębnij token.

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

Dostęp do zmiennej clientrequest.oauthtoken możesz teraz uzyskać w serwera proxy. Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądanie:

<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ż taki ł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, ustawia dwie zmienne: geocoderesponse.latitude oraz geocoderesponse.longitude Obie zmienne używają tego samego prefiksu zmiennej geocoderesponse Sufiks tych zmiennych jest określany przez tag Atrybut name elementu <Variable>.

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

Dostęp do zmiennej geocoderesponse.latitude możesz teraz uzyskać w serwera proxy. Na przykład następująca zasada AssignMessage skopiuje 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>

Przeanalizujmy ten ł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, ustawia trzy zmienne: directionsresponse.travelmode, directionsresponse.duration i directionsresponse.timeunit. Wszystkie korzystają z tego samego prefiksu zmiennej directionsresponse. Sufiks dla argumentu te zmienne są wyraźnie określone przez tag elementu <Variable> name.

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

Dostęp do zmiennej directionresponse.travelmode możesz teraz uzyskać w Twój serwer proxy. Na przykład ta zasada AssignMessage skopiuje 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 zasadzie Extractvariables

Programiści API tworzą serwery proxy interfejsów API, które działają różnie w zależności od treści wiadomości łącznie z nagłówkami, ścieżkami URI, ładunkami i parametrami zapytania. Serwer proxy często wyodrębnia część fragmentu tej treści do wykorzystania w instrukcji warunku. Użyj do tego zasady Extractvariables to osiągnąć.

Definiując zasadę Extractvariables, możesz wybrać:

  • Nazwy zmiennych, które mają zostać ustawione
  • Źródło zmiennych
  • Liczba zmiennych do wyodrębnienia i ustawienia

Gdy zasada jest uruchamiana, stosuje do treści wzorzec tekstowy, a po znalezieniu dopasowania ustawia wartość wyznaczonej zmiennej z treścią. Inne zasady i kod, które mogą być następnie wykorzystywane tych zmiennych, aby umożliwić dynamiczne zachowanie lub wysyłać firmowe bazy danych do Edge API Analytics.

Aby dowiedzieć się, jak użyć metody ExtractZmienne do tworzenia raportów Analytics opartych na treści: Analizuj treść komunikatu dotyczącego interfejsu API za pomocą niestandardowych statystyk.

Zakres

Zmienne ustawione za pomocą zasady Extractvariables mają zakres globalny. Oznacza to, że po Zasada Extractvariables definiuje nową zmienną. Dostęp do tej zmiennej możesz uzyskać z dowolnej zasady lub na dowolnym etapie przepływu (wykonywanym po zastosowaniu zasady Extractvariables). Ten zawiera:

  • PreFlow: ProxyEndpoint i TargetEndpoint (żądanie i odpowiedź)
  • PostFlow: ProxyEndpoint i TargetEndpoint (żądanie i odpowiedź)
  • PostClientFlow: ProxyEndpoint (tylko odpowiedź, korzystając z parametru zasady logowania wiadomości)
  • Przepływy błędów
.

Dopasowywanie i tworzenie zmiennych

Zasada Extractvariables wyodrębnia informacje z żądania lub odpowiedzi i zapisuje, do zmiennej. W przypadku każdego typu informacji, który można wyodrębnić, takich jak ścieżka identyfikatora URI czy XML, musisz określić wzorzec do dopasowania oraz nazwę zmiennej używanej do przechowywania danych wyodrębnionych informacji.

Sposób dopasowywania wzorców zależy jednak od źródła wyodrębnienia. Poniżej w sekcjach opisują 2 podstawowe kategorie informacji, które można wyodrębnić.

Pasujące ścieżki URI, parametry zapytania, nagłówki, parametry formularza i zmienne

Podczas wyodrębniania informacji ze ścieżki identyfikatora URI, parametrów zapytania, nagłówków, parametrów formularza za pomocą tagu &lt;Pattern&gt;, aby określić jedną lub więcej zmiennych, wzorcem. Na przykład w poniższym przykładzie zasady widać jeden wzorzec dopasowania dla ścieżkę identyfikatora 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 ustawiona została zmienna urirequest.pathSeg do dowolnego tekstu znajdującego się w pliku proxy.pathsuffix po „/a/”. Na przykład załóżmy, że ścieżka podstawowa dla argumentu Serwer proxy interfejsu API to /basepath/v1 . W przypadku żądania przychodzącego na http://myCo.com/basepath/v1/a/b jest ustawiona na „b”.

Określanie wielu wzorców

Możesz określić wiele wzorców do dopasowania odpowiadających tagom &lt;Pattern&gt;, gdzie:

  • Wszystkie wzorce są testowane pod kątem dopasowania.
  • Jeśli żaden z wzorców nie pasuje do wzorca, zasada nie wykonuje żadnych działań, a zmienne nie są zgodne. Utworzono.
  • Jeśli pasuje więcej niż jeden wzorzec, dla parametru wyodrębniania.
  • Jeśli dwa dopasowane wzorce mają takie same najdłuższe segmenty ścieżki, to wzorzec określony jako pierwszy w która jest używana do wyodrębniania.

W następnym przykładzie utworzysz zasadę zawierającą 3 wzorce pasujące do identyfikatora URI ścieżka:

<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ą bazową /basepath/v1 adresem URL żądania przychodzącego do serwera proxy interfejsu API ma postać:

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

W tym przykładzie pierwszy wzorzec pasuje do identyfikatora URI, a zmienna urirequest.pathSeg to ustawionym na „b”.

Jeśli URL żądania to:

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

...dopasowany jest trzeci wzorzec, a zmienna urirequest.pathSeg jest ustawionym na „d”.

Określanie wzorców z wieloma zmiennymi

Możesz podać wiele zmiennych dla pasującego wzorca. Na przykład możesz podać pasującego do wzorca 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>

Ponownie załóżmy , że dla żądania przychodzącego użyto serwera proxy interfejsu API ze ścieżką podstawową /basepath/v1 Adres URL:

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

...zmienna urirequest.pathSeg1 jest ustaw na „b” a zmienna urirequest.pathSeg2 to ustawionym na „d”.

Dopasowywanie wielu wystąpień we wzorcu

Wzorce możesz też dopasowywać, gdy istnieje wiele wystąpień 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 zasadzie Extractvariables, musisz użyć indeksów, przy czym pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie jest w indeksie 2, a trzecie na poziomie indeks 3 itd. Na przykład ta zasada wyodrębnia 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 to ustaw wartość „2”. Jeśli drugi parametr zapytania zostanie pominięty w żądaniu, zmienna urirequest.secondW będzie: puste. Używaj indeksowania, gdy w żądaniu jest wiele elementów o tej samej nazwie.

Używanie znaków specjalnych we wzorze

Dopasowując ścieżki identyfikatorów URI, możesz użyć znaku „*” i „**” symbole wieloznaczne we wzorcu, gdzie:

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

Możesz na przykład określić wzorce elementu &lt;URIPath&gt; w następujący sposób: poniżej:

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

Pierwszy wzorzec dopasowuje żądania ze ścieżką ułamkową (część ścieżki URI następujące po ścieżki podstawowej), takie jak „/a/b/c”, „/a/foo/bar” itd. Drugi wzorzec pasuje do dowolnej liczby ścieżek po „/a/”, np. „/a/foo/bar/baz/c” czy „/a/b/c”. i „/a/foo/bar”.

Przy określaniu wzorców zapytań, nagłówków i parametrów formularza znak „*” oznacza dopasowanie dowolnej liczby znaków. Na przykład podczas dopasowywania nagłówka podaj parametr jako:

*;charset={encoding}

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

Jeśli wartość przekazywana do zasady Extractvariables zawiera znak specjalny, taki jak „{”, użyj funkcji „%” aby go zmienić. W poniższym przykładzie zmienia się znaczenie znaku „{” i "}" znaki we wzorcu, ponieważ są one używane jako znaki w wartości zapytania :

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

W tym przykładzie wzorzec pasuje do wartości „{user} Steve” , ale nie z wartością „użytkownik Stefana”.

Pasujące formaty JSON i XML

Podczas wyodrębniania danych z kodów JSON i XML musisz określić w zasadzie co najmniej 1 tag &lt;Variable&gt;. Tag &lt;Variable&gt; określa parametr nazwa zmiennej docelowej, w której przechowywane są wyodrębnione informacje, oraz ścieżka JsonPath (JSON) lub XPATH (XML) do wyodrębnionych informacji.

wszystkie tagi &lt;Variable&gt; w zasadach; są oceniane, dzięki czemu można uzupełnić wiele zmiennych w jednej zasadzie. Jeśli tag &lt;Variable&gt; nie będzie do prawidłowego pola w formacie JSON lub XML, odpowiednia zmienna nie jest Utworzono.

Poniższy przykład pokazuje zasadę Extractvariables, która wypełnia 2 zmienne z parametru Treść JSON odpowiedzi:

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

Pisanie do ta sama zmienna w wielu miejscach,

Zachowaj ostrożność podczas wybierania nazw zmiennych, które chcesz ustawić. Zasada jest wykonywana sekwencyjnie z od pierwszego wzorca wyodrębniania do ostatniego. Jeśli zasada zapisuje wartość w tej samej zmiennej z poziomu w wielu miejscach, ostatni zapis w zasadzie określa wartość zmiennej. (Może to być w dowolnym momencie).

Załóżmy np., że chcesz wyodrębnić wartość tokena, która może być przekazywana w parametrze zapytania lub w nagłówku, jak 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>

Kontrola nad tym, co się dzieje, gdy nie występuje dopasowanie

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

Jedną z opcji jest ustawienie atrybutu <IgnoreUnresolvedVariables> na true (prawda) w zasadzie, która odwołuje się do zmiennej, aby skonfigurować zasadę traktowania wszelkie niemożliwe do rozwiązania zmienne w postaci pustego ciągu (null):

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

Odwołanie do elementu

Dokumentacja elementu opisuje elementy i atrybuty zmiennych ExtractZmienne .

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

&lt;ExtractVariables&gt; atrybuty

<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

&lt;Source&gt; element

(Opcjonalnie) Określa zmienną do analizy. Wartość <Source> ma domyślną wartość message. Wartość message jest zależny od kontekstu. W ramach procesu żądania message przechodzi do komunikatu z żądaniem. W w ramach procesu odpowiedzi, message przejdzie do komunikatu z odpowiedzią.

Chociaż często używasz tej zasady do wyodrębniania informacji z wiadomości z prośbą lub odpowiedzią, może go użyć do wyodrębnienia informacji z dowolnej zmiennej. Możesz na przykład użyć go do wyodrębnienia informacje z jednostki utworzonej przez zasadę AccessEntity, na podstawie danych zwracanych przez usługę Usługa zasady objaśnień albo wyodrębnij informacje z obiektu XML lub JSON.

Jeśli nie można znaleźć wartości <Source> lub zmienić typ na inny niż wiadomość, zasady nie odpowiadają.

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

Atrybuty

Atrybut Opis Domyślny Obecność Typ
clearPayload

Ustaw jako true, jeśli chcesz wyczyścić ładunek określony w &lt;Source&gt; po wyodrębnieniu z niego danych.

Opcji <clearPayload> używaj tylko wtedy, gdy komunikat źródłowy nie jest wymagane po wykonaniu metody Extractvariables. Ustawienie bezpłatnych licencji jako true (prawda) ilość pamięci wykorzystywanej przez wiadomość.

fałsz

Opcjonalnie Wartość logiczna

&lt;VariablePrefix&gt; element

(Opcjonalnie) Pełna nazwa zmiennej tworzy się, łącząc funkcję <VariablePrefix>, kropkę oraz nazwę zdefiniowaną w {nawiasach klamrowych} w <Pattern> lub &lt;Variable&gt;. Na przykład: myprefix.id, myprefix.dbncode lub myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

Załóżmy na przykład, że wartością nazwy jest „użytkownik”.

  • Jeśli <VariablePrefix> nie jest określony, wyodrębnione wartości są przypisane do zmiennej o nazwie user.
  • Jeśli <VariablePrefix> jest określony jako moj prefiks, wyodrębniony wartości są przypisane do zmiennej o nazwie myprefix.user.
Domyślne: Nie dotyczy
Obecność: Opcjonalnie
Typ: Ciąg znaków

&lt;IgnoreUnresolvedVariables&gt; element

(Opcjonalnie) Ustaw wartość true, aby traktować każdą zmienną, której nie można rozstrzygnąć jako pusty ciąg znaków. (null). Ustaw jako false, jeśli zasada ma powodować błąd w przypadku odwołania jest nierozpoznawalna.

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

Jeśli odwołanie XPath jest nierozstrzygnięte w elemencie <XMLPayload>, zasada zgłasza ten błąd:

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

&lt;URIPath&gt; element

(Opcjonalnie, więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z serwera proxy.pathsuffix wiadomości źródłowej żądania. Ścieżka zastosowana do wzorzec to proxy.pathsuffix, który nie zawiera ścieżki bazowej serwera proxy interfejsu API. Jeśli komunikat źródłowy przechodzi do typu odpowiedzi, to ten element nie wykonuje żadnego działania.

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

Można użyć wielu elementów &lt;Pattern&gt;:

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>
Domyślne: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak uwzględnić co najmniej jeden z następujących elementów: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> lub <XMLPayload>.
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
ignoreCase Określa, że wielkość liter ma być ignorowana podczas dopasowywania do ojca.

fałsz

Opcjonalnie Wartość logiczna

&lt;QueryParam&gt; element

(Opcjonalnie, 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 przechodzi do wiadomości typu odpowiedź, to ten element nic.

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

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

<QueryParam name="w.2">
   <Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
Domyślne: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak uwzględnić co najmniej jeden z następujących elementó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 parametr tej samej nazwy, użyj odwołania do zindeksowanego, gdzie pierwsze wystąpienie parametru zapytania nie ma indeksu, druga jest w indeksie 2, trzecia w indeksie 3 itd.

Nie dotyczy

Wymagane Ciąg znaków

&lt;Header&gt; element

(Opcjonalnie, więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego nagłówka HTTP określonego komunikatu żądania lub odpowiedzi. Jeśli wiele nagłówków zawiera o tej samej nazwie, ich wartości są przechowywane w tablicy.

<!-- 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 wiele nagłówków ma tę samą nazwę, użyj indeksów, aby odwołać się do poszczególnych nagłówków w sekcji tablica:

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

Możesz też wykonać to polecenie, aby wyświetlić wszystkie nagłówki w tablicy:

<Header name="myHeader.values">
   <Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>
Domyślne: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak uwzględnić co najmniej jeden z następujących elementó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 pochodzi wartość. Jeśli kilka nagłówki mają taką samą nazwę, użyj odniesienia do zindeksowania, gdzie pierwsze wystąpienie ciągu nagłówek nie ma indeksu, drugi jest w indeksie 2, trzeci w indeksie 3 itd. Użyj funkcji .values, aby pobrać wszystkie nagłówki w tablicy.

Nie dotyczy

Wymagane Ciąg znaków

&lt;FormParam&gt; element

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

<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>
Domyślne: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak uwzględnić co najmniej jeden z następujących elementó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 pochodzi wartość.

Nie dotyczy

Wymagane Ciąg znaków

&lt;Variable&gt; element

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

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

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

<Variable name="myVar">
   <Pattern>hello {firstName} {lastName}</Pattern>
</Variable>
Domyślne: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak uwzględnić co najmniej jeden z następujących elementó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ć pobrana wartość.

Nie dotyczy

Wymagane Ciąg znaków

&lt;JSONPayload&gt; element

(Opcjonalnie, 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. JSON wyodrębnianie 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ślne: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak uwzględnić co najmniej jeden z następujących elementów: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> lub <XMLPayload>.
Typ: Nie dotyczy

&lt;JSONPayload&gt;/&lt;Variable&gt; element

(Wymagane w elemencie JSONPayload). Określa zmienną, w której wyodrębniona wartość jest przypisano. W elemencie &lt;Variable&gt; możesz umieścić w nim wiele tagów &lt;Variable&gt;, aby wypełnić element. wiele zmiennych.

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

Atrybuty

Atrybut Opis Domyślny Obecność Typ
nazwa

Określa nazwę zmiennej, której będzie dotyczyć wyodrębniona wartość przypisano.

nazwa

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

Ciąg tekstowy. Do wyboru masz te opcje:

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

&lt;JSONPayload&gt;/&lt;Variable&gt;/&lt;JSONPath&gt; element

(Wymagane w elemencie JSONPayload:variable). Określa ścieżkę JSON używaną do wyodrębnienia z wiadomości w formacie JSON.

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

&lt;XMLPayload&gt; element

(Opcjonalnie, 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 to 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ślne: Nie dotyczy
Obecność: Opcjonalnie: Musisz jednak uwzględnić co najmniej jeden z następujących elementów: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> lub <XMLPayload>.
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność Typ
stopPayloadProcessing

Ustaw jako true, aby zatrzymać ocenę XPath po uzupełnieniu jednej zmiennej. Oznacza to, że zasada wypełnia tylko jedną zmienną.

fałsz

Opcjonalnie Wartość logiczna

&lt;XMLPayload&gt;/&lt;Namespaces&gt; element

(Opcjonalnie) Określa przestrzeń nazw, która ma być używana podczas oceny XPath. Jeśli używasz przestrzeni nazw w wyrażeniach XPath, musisz tutaj zadeklarować przestrzenie nazw, tak jak pokazano to w z tego przykładu.

<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 uwzględnić w komentarzu <Namespaces>, jak widać w tym przykładzie:

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

Atrybuty

Atrybut Opis Domyślny Obecność Typ
prefix

Prefiks przestrzeni nazw.

Nie dotyczy

Wymagane Ciąg znaków

&lt;XMLPayload&gt;/&lt;Variable&gt; element

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

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

Atrybuty

Atrybut Opis Domyślny Obecność Typ
nazwa

Określa nazwę zmiennej, której będzie dotyczyć wyodrębniona wartość przypisano.

nazwa

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

Ciąg tekstowy. Do wyboru masz te opcje:

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

&lt;XMLPayload&gt;/&lt;Variable&gt;/&lt;XPath&gt; element

(Wymagane w elemencie XMLPayload:variable). Określa ścieżkę XPath zdefiniowaną dla atrybutu . 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ć przestrzenie nazw w sekcji <XMLPayload><Namespaces> zasad.

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

Informacje o błędzie

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

Interfejs API analiz treść wiadomości za pomocą niestandardowych statystyk.

Informacje o zmiennych