Zasady wyodrębniania zmiennych

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Co

Zasada ExtractVariables wyodrębnia treść z żądania lub odpowiedzi i ustawia dla tej treści wartość zmiennej. Możesz wyodrębnić dowolną część wiadomości, w tym nagłówki, ścieżki URI, ładunki JSON/XML, parametry formularzy i parametry zapytania. Zasada stosuje wzorzec tekstowy do treści wiadomości i po znalezieniu dopasowania ustawia zmienną z określoną treścią wiadomości.

Ta zasada jest często używana do wyodrębniania informacji z wiadomości w żądaniu lub odpowiedzi, ale możesz też używać jej 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 tej zmiennej w innych zasadach w ramach przetwarzania żądania i odpowiedzi.

Filmy

Obejrzyj poniższe filmy, aby 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ębnij zmienną.
Wyodrębnianie zmiennych z ładunku JSON Wyodrębnianie zmiennych z ładunku JSON za pomocą zasady Wyodrębnij zmienną.
Wyodrębnij zmienne 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 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ą klasycznego interfejsu użytkownika Edge.
Wyodrębnianie zmiennych z ładunku XML lub JSON (klasyczna wersja Edge) Wyodrębnianie zmiennych z ładunku XML lub JSON za pomocą klasycznego interfejsu użytkownika Edge.

Sample

Te przykładowe fragmenty kodu zasad pokazują, jak wyodrębniać zmienne z następujących typów artefaktów:

GitHub

Te linki wskazują działające przykładowe serwery proxy interfejsu API, które możesz wdrożyć i uruchomić w Edge. Korzystają one z metody ExtractZmienne i znajdują się w repozytorium api-platform-samples Apigee na GitHubie. Pliki README wyjaśniają, jak w każdym przypadku używane jest narzędzie ExtractZmienne oraz jak wdrażać i uruchamiać poszczególne przykłady.

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 zasady powyżej. Element <URIPath> informuje zasadę ExtractVariables, aby pobierać informacje ze ścieżki identyfikatora URI. Element <Pattern> określa wzór, który ma być stosowany do ścieżki identyfikatora URI. Wzorzec jest traktowany jako prosty szablon z nawiasami klamrowymi oznaczającymi różne części ścieżki identyfikatora URI.

Nazwa zmiennej do ustawienia zależy od wartości podanej w elemencie <VariablePrefix>, a także wartości ujętej w nawiasy klamrowe {} w elemencie <Pattern>. Dwie wartości są połączone kropką, co da nazwę zmiennej, np. urirequest.id. W przypadku braku elementu <VariablePrefix> nazwa zmiennej to tylko wartość ujęta w nawiasy klamrowe.

Rozważ użycie powyższego przykładowego kodu zasady do obsługi następującego żądania przychodzącego:

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 powyższy kod zasady ExtractVariables do tego przychodzącego żądania, ustawia zmienną urirequest.id na 12797282. Gdy Apigee Edge uruchomi 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 zawiera wartość tej zmiennej w ładunku 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>

Rozważ użycie powyższego przykładowego kodu zasady do obsługi następującego żądania przychodzącego:

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

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

Teraz masz dostęp do zmiennej queryinfo.dbncode przez serwer 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 Twój interfejs API umożliwia określenie wielu parametrów zapytania o tej samej nazwie. Za pomocą tej zasady możesz wyodrębniać wartość wielu wystąpień parametru zapytania „w”. Aby odwołać się do tych parametrów zapytania w zasadzie ExtractVariables, używasz indeksów, gdzie pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie w indeksie 2, trzeci w indeksie 3 itd.

Rozważ użycie powyższego przykładowego kodu zasady do obsługi następującego żądania przychodzącego:

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

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

Teraz możesz uzyskać dostęp do zmiennych queryinfo.firstWeather i queryinfo.secondWeather przez serwer 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">
    <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1>
    <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

nagłówków,

<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 v2.0. Przeanalizuj przykładowy kod zasady powyżej w celu pracy z żądaniem zawierającym token OAuth w wersji 2.0, który zawiera nagłówek podobny do tego: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

Załóżmy, że jako projektant interfejsu API chcesz użyć wartości tokena (ale nie całego nagłówka) jako klucza podczas wyszukiwania 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 TU08xptfFfeM7aS0xHqlxTgEAdAM.

Teraz masz dostęp do zmiennej clientrequest.oauthtoken przez serwer proxy. 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ż następujący ł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 stosuje powyższy kod zasady ExtractVariables do tej wiadomości JSON, ustawia 2 zmienne: geocoderesponse.latitude i geocoderesponse.longitude. Obie zmienne używają tego samego prefiksu zmiennej geocoderesponse. Sufiks tych zmiennych jest wyraźnie określony za pomocą atrybutu name elementu <Variable>.

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

Teraz masz dostęp do zmiennej geocoderesponse.latitude przez serwer proxy. Na przykład ta zasada AssignMessage kopiuje ją do nagłówka o nazwie „width” 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ż następujący ł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 stosuje powyższy kod zasady ExtractVariables do tej wiadomości XML, ustawia 3 zmienne: directionsresponse.travelmode, directionsresponse.duration i directionsresponse.timeunit. Wszystkie zmienne używają tego samego prefiksu zmiennej directionsresponse. Sufiks tych zmiennych jest wyraźnie określony za pomocą atrybutu name elementu <Variable>.

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

Teraz masz dostęp do zmiennej directionresponse.travelmode przez serwer 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 zasadzie ExtractVariables

Programiści interfejsów API tworzą serwery proxy API, które działają różnie w zależności od treści wiadomości, w tym nagłówków, ścieżek URI, ładunków i parametrów zapytań. Często serwer proxy wyodrębnia część tej treści i używa ich w instrukcji warunku. Aby to zrobić, użyj zasady ExtractVariables.

Podczas definiowania zasady ExtractVariables możesz wybrać:

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

Po jej uruchomieniu do treści zostaje zastosowany wzorzec tekstowy, a po znalezieniu dopasowania ustawiana jest wartość wyznaczonej zmiennej z treścią. Inne zasady i kod mogą korzystać z tych zmiennych, aby umożliwiać dynamiczne zachowanie lub wysyłać firmowe bazy danych do Edge API Analytics.

Aby dowiedzieć się, jak użyć obiektu ExtractVariables do tworzenia opartych na treści raportów Analytics, przeczytaj artykuł o analizowaniu treści wiadomości interfejsu API przy użyciu 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ć dostęp do tej zmiennej z dowolnej zasady lub kodu na dowolnym etapie procesu (wykonywanego po zasadzie ExtractVariables). Obejmuje to m.in.:

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

Dopasowywanie 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żna wyodrębnić, np. ścieżki identyfikatora URI czy danych XML, określasz wzorzec dopasowujący oraz nazwę zmiennej służącej do przechowywania tych informacji.

Jednak sposób działania dopasowywania do wzorca zależy od źródła wyodrębnienia. Sekcje poniżej opisują 2 podstawowe kategorie informacji, które możesz wyodrębnić.

Pasujące ścieżki identyfikatora 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 i zmiennych służy tag <Pattern> do określania co najmniej jednego wzorca do dopasowania. Na przykład ta zasada pokazuje jeden wzorzec pasujący do ścieżki 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 zmienna urirequest.pathSeg jest ustawiona na wartość, która pojawia się w polu proxy.pathsuffix po „/a/”. Załóżmy na przykład, że ścieżka bazowa serwera proxy interfejsu API to /basepath/v1 . W przypadku przychodzącego żądania na adres http://myCo.com/basepath/v1/a/b zmienna jest ustawiona na „b”.

Określanie wielu wzorców

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

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

W następnym przykładzie tworzysz zasadę zawierającą 3 wzorce pasujące do ścieżki identyfikatora 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ą bazową o wartości /basepath/v1 adres URL przychodzącego żądania do serwera proxy interfejsu API ma następującą 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 URL żądania to:

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

...to trzeci wzorzec pasuje, a zmienna urirequest.pathSeg ma wartość „d”.

Określanie wzorców z wieloma zmiennymi

W pasującym wzorcu możesz podać 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>

Ponownie zakładając , że serwer proxy interfejsu API ze ścieżką bazową /basepath/v1 dla adresu URL przychodzącego żądania:

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

...zmienna urirequest.pathSeg1 jest ustawiona na „b”, a zmienna urirequest.pathSeg2 na „d”.

Pasuje do wielu instancji we wzorcu

Możesz też dopasowywać wzorce, gdy istnieje wiele wystąpień elementu o tej samej nazwie. Możesz na przykład utworzyć żą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, używasz indeksów, gdzie pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie w indeksie 2, trzeci w indeksie 3 itd. Na przykład ta zasada wyodrębnia w żądaniu wartość drugiego parametru zapytania o nazwie „w:

<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 jest ustawiona na „2”. Jeśli w żądaniu pominięto drugi parametr zapytania, zmienna urirequest.secondW będzie pusta. Skorzystaj z indeksowania, gdy w prośbie znajduje się wiele elementów o tej samej nazwie.

Używanie znaków specjalnych we wzorcu

Dopasowując ścieżki identyfikatorów URI, możesz we wzorcu używać symboli wieloznacznych „*” i „**”, gdzie:

  • Znak „*” odpowiada dowolnemu fragmentowi ścieżki
  • „**” odpowiada wielu fragmentom ścieżki,

Możesz na przykład określić wzorce elementu <URIPath>, jak pokazano poniżej:

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

Pierwszy wzorzec dopasowuje żądania z uffiksami (w części ścieżki URI po ścieżce bazowej), np. „/a/b/c”, „/a/foo/bar” itp. Drugi wzorzec pasuje do dowolnej liczby segmentów ścieżki po „/a/”, takich jak „/a/foo/bar/baz/c” oraz „/a/b/c” i „/a/foo/bar”.

Przy określaniu wzorców zapytań, nagłówków i parametrów formularza znak „*” określa, że pasuje do dowolnej liczby znaków. Na przykład podczas dopasowywania nagłówka określ wzorzec jako:

*;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. Ten przykład zmienia znaczenie znaków „{" i "}" we wzorcu, ponieważ są one używane jako literał 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”.

Zgodność z kodami JSON i XML

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

Wszystkie tagi <Zmienna> w zasadzie są oceniane, więc z poziomu jednej zasady możesz wypełniać wiele zmiennych. Jeśli tag <Zmienne> nie określa 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 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>

Zapisywanie w tej samej zmiennej w wielu miejscach

Przy doborze nazw ustawionych zmiennych należy zachować ostrożność. Zasada jest uruchamiana sekwencyjnie od pierwszego do ostatniego wzorca wyodrębniania. Jeśli zasada zapisuje wartość w tej samej zmiennej z wielu miejsc, wartość zmiennej określa ostatni zapis w tej zasadzie. (może to być zgodne z Twoimi oczekiwaniami).

Na przykład 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 ma się stać, gdy nie ma dopasowań

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

Jedna z opcji to ustawienie zasady <IgnoreUnresolvedVariables> na „true” w zasadzie, która odwołuje się do zmiennej, aby skonfigurować zasadę traktującą każdą nierozwiązaną zmienną jako pusty ciąg znaków (wartość null):

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

Odwołanie do elementu

Dokumentacja elementu opisuje elementy i atrybuty 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 <ExtractVariables>

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

Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślne 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>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

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

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

false Wycofano

Element <DisplayName>

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

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

Nie dotyczy

Jeśli pominiesz ten element, zostanie użyta wartość atrybutu name zasady.

Obecność Opcjonalnie
Typ Ciąg znaków

Element <Source>

(Opcjonalnie) Określa zmienną do analizy. Wartość <Source> przyjmuje domyślnie wartość message. Wartość message zależy od kontekstu. W trakcie procesu żądania message wyświetla wiadomość z żądaniem. W procesie odpowiedzi message wyświetla komunikat z odpowiedzią.

Chociaż często używasz tej zasady do wyodrębniania informacji z wiadomości w żądaniu lub odpowiedzi, możesz jej używać do wyodrębniania informacji z dowolnej zmiennej. Za jego pomocą możesz na przykład wyodrębnić informacje z encji utworzonej przez zasady AccessEntity (z danych zwróconych przez zasadę objaśnienia usługi) lub z obiektu XML lub JSON.

Jeśli nie można znaleźć atrybutu <Source> lub przyjmuje on typ inny niż wiadomość, zasada nie odpowie.

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

Atrybuty

Atrybut Opis Domyślne Obecność Typ
clearPayload

Ustaw wartość true, jeśli po wyodrębnieniu danych chcesz usunąć ładunek określony w elemencie <Source>.

Opcji <clearPayload> używaj tylko wtedy, gdy komunikat źródłowy nie jest wymagany po wykonaniu metody ExtractVariables. Ustawienie wartości true (prawda) zwalnia pamięć używaną przez wiadomość.

false

Opcjonalnie Wartość logiczna

Element <ZmiennaPrefiks>

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

<VariablePrefix>myprefix</VariablePrefix>

Załóżmy np., że wartość pola „nazwa” to „użytkownik”.

  • Jeśli <VariablePrefix> nie jest określony, wyodrębnione wartości są przypisywane do zmiennej o nazwie user.
  • Jeśli jako mój przedrostek podasz <VariablePrefix>, wyodrębnione wartości zostaną przypisane do zmiennej o nazwie myprefix.user.
Domyślnie: Nie dotyczy
Obecność: Opcjonalnie
Typ: Ciąg znaków

Element <IgnorujNierozpoznane zmienne>

(Opcjonalnie) Ustaw wartość true, aby traktować każdą nierozwiązaną zmienną jako pusty ciąg znaków (wartość null). Ustaw wartość false, jeśli chcesz, aby zasada zgłaszała błąd, gdy jakakolwiek wskazana zmienna jest nierozwiązana.

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

Jeśli odwołanie do XPath nie zostanie rozwiązane w zasadzie <XMLPayload>, zasada zwróci ten błąd:

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

Element <uriPath>

(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z pola proxy.pathsuffix wiadomości źródłowej żądania. Ścieżka stosowana do wzorca to proxy.pathsuffix, która nie zawiera ścieżki bazowej serwera proxy interfejsu API. Jeśli komunikat źródłowy przejdzie do typu odpowiedzi, ten element nie spowoduje żadnych działań.

<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 uwzględnić co najmniej 1 z tych elementów: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślne Obecność Typ
ignoreCase Określa, że przy dopasowaniu do ojca wielkość liter ma być ignorowana.

false

Opcjonalnie Wartość logiczna

Element <QueryParam>

(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego parametru zapytania wiadomości źródłowej żądania. Jeśli komunikat źródłowy przejdzie do typu odpowiedzi, ten element nie podejmie żadnych działań.

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

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

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

Atrybuty

Atrybut Opis Domyślne Obecność Typ
nazwa Określa nazwę parametru zapytania. Jeśli wiele parametrów zapytania ma taką samą nazwę, użyj odwołań dotyczących indeksów, gdzie pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie – indeks 2, trzeci – indeks 3 itd.

Nie dotyczy

Wymagane Ciąg znaków

Element <Header>

(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego nagłówka HTTP w określonej wiadomości żądania lub odpowiedzi. Jeśli wiele nagłówków ma taką samą nazwę, 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 taką 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 wykonaj te czynności, 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 uwzględnić co najmniej 1 z tych elementów: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślne Obecność Typ
nazwa Określa nazwę nagłówka, z którego wyodrębniana jest wartość. Jeśli wiele nagłówków ma taką samą nazwę, użyj odniesienia zindeksowanego, w którym pierwsze wystąpienie nagłówka nie ma indeksu, drugie w indeksie 2, trzeci w indeksie 3 itd. Użyj parametru .values, aby pobrać wszystkie nagłówki w tablicy.

Nie dotyczy

Wymagane Ciąg znaków

Element <FormParam>

(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego parametru formularza w określonej wiadomości żądania lub odpowiedzi. Parametry formularzy 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 uwzględnić co najmniej 1 z tych elementów: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.
Typ: Nie dotyczy

Atrybuty

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

Nie dotyczy

Wymagane Ciąg znaków

Element <Zmienna>

(Opcjonalnie; 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ć ze zmiennej 2 wartości:

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

Atrybuty

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

Nie dotyczy

Wymagane Ciąg znaków

Element <JSONPayload>

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

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

Element <JSONPayload>/<Zmienna>

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

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

Atrybuty

Atrybut Opis Domyślne 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 Opcjonalnie

Ciąg tekstowy. Do wyboru masz te opcje:

  • ciąg znaków
  • boolean
  • Liczba całkowita
  • długi
  • float
  • liczba zmiennoprzecinkowa
  • nodeset (zwraca fragment JSON)

Element <JSONPayload>/<Zmienna>/<JSONPath>

(Wymagane w elemencie JSONPayload:Zmienna). Określa ścieżkę JSON używaną do wyodrębnienia 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; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Określa wiadomość w formacie XML, z której 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ślnie: Nie dotyczy
Obecność: Opcjonalnie. Musisz jednak uwzględnić co najmniej 1 z tych elementów: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślne Obecność Typ
stopPayloadProcessing

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

false

Opcjonalnie Wartość logiczna

Element <XMLPayload>/<Namespaces>

(Opcjonalnie) Określa przestrzeń nazw do użycia w ocenie XPath. Jeśli w wyrażeniach XPath używasz przestrzeni nazw, musisz je tutaj zadeklarować, tak jak 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ąć element <Namespaces> lub dodać do niego komentarz, jak pokazano w poniższym przykładzie:

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

Atrybuty

Atrybut Opis Domyślne Obecność Typ
prefix

Prefiks przestrzeni nazw.

Nie dotyczy

Wymagane Ciąg znaków

Element <XMLPayload>/<Zmienna>

(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ść: Opcjonalnie
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślne 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 Opcjonalnie

Ciąg tekstowy. Do wyboru masz te opcje:

  • ciąg znaków
  • boolean
  • Liczba całkowita
  • długi
  • float
  • liczba zmiennoprzecinkowa
  • nodeset (zwraca fragment XML),

Element <XMLPayload>/<Zmienna>/<XPath>

(Wymagane w elemencie XMLPayload:Zmienna). 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 je zadeklarować w sekcji <XMLPayload><Namespaces> tej zasady.

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

Informacje o błędach

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

Błędy w czasie wykonywania

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

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

Ten błąd występuje, gdy:

  • Ładunek wejściowy (JSON, XML) jest pusty.
  • Dane wejściowe (JSON, XML itp.) przekazane do zasady są nieprawidłowe lub źle sformułowane.
steps.extractvariables.ImmutableVariable 500 Zmienna używana w zasadzie jest stała. Zasadom nie udało się ustawić tej zmiennej.
steps.extractvariables.InvalidJSONPath 500 Ten błąd występuje, jeśli w elemencie JSONPath zasady użyto nieprawidłowej ścieżki JSON. Ten błąd wystąpi na przykład, jeśli ładunek JSON nie zawiera obiektu Name, ale podasz Name jako ścieżkę w zasadzie.
steps.extractvariables.JsonPathParsingFailure 500 Ten błąd występuje, gdy zasada nie może przeanalizować ścieżki JSON i wyodrębnić danych ze zmiennej przepływu określonej w elemencie Source. Zwykle dzieje się tak, jeśli zmiennej przepływu określonej w elemencie Source nie ma w bieżącym przepływie.
steps.extractvariables.SetVariableFailed 500 Ten błąd występuje, jeśli zasada nie może ustawić wartości zmiennej. Ten błąd zwykle występuje wtedy, gdy próbujesz przypisać wartości do wielu zmiennych, których nazwy zaczynają się takimi samymi słowami w zagnieżdżonym formacie z wartościami rozdzielanymi kropkami.
steps.extractvariables.SourceMessageNotAvailable 500 Ten błąd występuje, jeśli zmienna message podana w elemencie Source zasady ma wartość:
  • Poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada) lub
  • Nie można rozwiązać (nie określono)
steps.extractvariables.UnableToCast 500 Ten błąd występuje, jeśli zasadzie nie udało się rzutować wyodrębnionej wartości na zmienną. Zwykle dzieje się tak, gdy próbujesz ustawić wartość jednego typu danych na zmienną innego typu.

Błędy wdrażania

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

Nazwa błędu Przyczyna Napraw
NothingToExtract Jeśli zasada nie zawiera żadnych elementów URIPath, QueryParam, Header, FormParam, XMLPayload ani JSONPayload, wdrożenie serwera proxy interfejsu API nie powiedzie się, ponieważ nie ma czego wyodrębnić.
NONEmptyPrefixMappedToEmptyURI Ten błąd występuje, jeśli zasada ma zdefiniowany prefiks w elemencie Namespace w elemencie XMLPayload, ale nie zdefiniowano identyfikatora URI.
DuplicatePrefix Ten błąd występuje, jeśli zasada ma ten sam prefiks zdefiniowany więcej niż raz w elemencie Namespace w elemencie XMLPayload.
NoXPathsToEvaluate Jeśli zasada nie zawiera elementu XPath w elemencie XMLPayload, wdrożenie serwera proxy interfejsu API nie powiedzie się z tym błędem.
EmptyXPathExpression Jeśli zasada ma puste wyrażenie XPath w elemencie XMLPayload, wdrożenie serwera proxy interfejsu API się nie uda.
NoJSONPathsToEvaluate Jeśli zasada nie zawiera elementu JSONPath w elemencie JSONPayload, wdrożenie serwera proxy interfejsu API nie powiedzie się z tym błędem.
EmptyJSONPathExpression Jeśli zasada ma puste wyrażenie XPath w elemencie XMLPayload, wdrożenie serwera proxy interfejsu API się nie uda.
MissingName Jeśli zasada nie ma atrybutu name w żadnym z jej elementów, takich jak QueryParam, Header, FormParam czy Variable, gdy jest on wymagany, wdrożenie serwera proxy interfejsu API nie powiedzie się.
PatternWithoutVariable Jeśli zasada nie ma zmiennej określonej w elemencie Pattern, wdrożenie serwera proxy interfejsu API się nie uda. Element Pattern wymaga nazwy zmiennej, w której będą przechowywane wyodrębnione dane.
CannotBeConvertedToNodeset Jeśli zasada zawiera wyrażenie XPath, w którym typ Variable jest zdefiniowany jako węzeł, ale tego wyrażenia nie można przekonwertować na zbiór węzłów, wdrożenie serwera proxy interfejsu API się nie uda.
JSONPathCompilationFailed Zasada nie może skompilować podanej ścieżki JSON.
InstantiationFailed Nie udało się utworzyć instancji zasady.
XPathCompilationFailed Jeśli prefiks lub wartość używana w elemencie XPath nie należy do żadnej z zadeklarowanych przestrzeni nazw w zasadzie, wdrożenie serwera proxy interfejsu API się nie uda.
InvalidPattern Jeśli definicja elementu Pattern jest nieprawidłowa w którymkolwiek z elementów, takich jak URIPath, QueryParam, Header, FormParam, XMLPayload lub JSONPayload, nie uda się wdrożyć serwera proxy interfejsu API.

Zmienne błędów

Te zmienne są ustawiane, gdy zasada wywołuje błąd w czasie działania. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. fault.name = "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ą statystyk niestandardowych

Odniesienie do zmiennych