Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. info
Co
Zasada ExtractVariables wyodrębnia treść z żądania lub odpowiedzi i ustawia wartość zmiennej na tę treść. Możesz wyodrębnić dowolną część wiadomości, w tym nagłówki, ścieżki URI, ładunki JSON/XML, parametry formularza i parametry zapytania. Zasady działają w ten sposób, że stosują wzorzec tekstu do treści wiadomości, a po znalezieniu dopasowania ustawiają zmienną z określoną treścią wiadomości.
Chociaż ta zasada jest często używana do wyodrębniania informacji z wiadomości żądania lub odpowiedzi, możesz jej też używać do wyodrębniania informacji z innych źródeł, w tym z encji utworzonych przez zasadę AccessEntity, obiektów XML lub obiektów JSON.
Po wyodrębnieniu określonej treści wiadomości możesz odwoływać się do zmiennej w innych zasadach w ramach przetwarzania żądania i odpowiedzi.
Filmy
Aby dowiedzieć się więcej o zasadach ExtractVariables, obejrzyj te filmy.
| Wideo | Opis |
|---|---|
| Wyodrębnianie zmiennych z ładunku XML | Wyodrębnij zmienne z ładunku XML za pomocą zasady Extract Variable. |
| Wyodrębnianie zmiennych z ładunku JSON | Wyodrębnij zmienne z ładunku JSON za pomocą zasady Extract Variable. |
| Wyodrębnianie zmiennych z parametrów | Wyodrębnianie zmiennych z parametrów, takich jak parametry zapytania, nagłówka, formularza lub identyfikatora URI. |
| Wyodrębnianie zmiennych z parametrów z wieloma wartościami | Wyodrębnianie zmiennych z parametrów o wielu wartościach. |
| Wyodrębnianie zmiennych z parametru zapytania (Classic Edge) | Wyodrębnianie zmiennych z parametru zapytania za pomocą klasycznego interfejsu Edge. |
| Wyodrębnianie zmiennych z ładunku XML lub JSON (Classic Edge) | Wyodrębnianie zmiennych z ładunku XML lub JSON za pomocą klasycznego interfejsu Edge. |
Przykłady
Te przykłady kodu zasad pokazują, jak wyodrębniać zmienne z tych typów artefaktów:
GitHub
Te linki prowadzą do działających przykładów serwerów proxy interfejsu API, które możesz wdrożyć i uruchomić w Edge. Korzystają one z zasady ExtractVariables i znajdują się w repozytorium api-platform-samples Apigee w serwisie GitHub. Pliki README wyjaśniają, jak w każdym przypadku używana jest zasada ExtractVariables, oraz jak wdrożyć i uruchomić każdy przykład.
Identyfikatory URI
<ExtractVariables name="ExtractVariables-1">
<DisplayName>Extract a portion of the url path</DisplayName>
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/accounts/{id}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>Przyjrzyj się przykładowemu kodowi zasad powyżej. Element <URIPath> informuje zasadę ExtractVariables, że ma wyodrębnić informacje ze ścieżki URI. Element
<Pattern> określa wzorzec, który ma być zastosowany do ścieżki URI. Wzorzec jest traktowany jako prosty szablon, a nawiasy klamrowe oznaczają zmienną część ścieżki URI.
Nazwa zmiennej, która ma zostać ustawiona, jest określana przez wartość podaną w elemencie <VariablePrefix> oraz wartość ujętą w nawiasy klamrowe {} w elemencie <Pattern>. Obie wartości są połączone kropką, co daje nazwę zmiennej, np. urirequest.id. Jeśli nie ma elementu <VariablePrefix>, nazwa zmiennej to po prostu wartość ujęta w nawiasy klamrowe.
Załóżmy, że powyższy przykładowy kod zasady działa z tym przychodzącym żądaniem:
GET http://org1-test.apigee.net/svc1/accounts/12797282
Załóżmy, że podstawowa ścieżka serwera proxy API to /svc1. Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego żądania przychodzącego, ustawi zmienną urirequest.id na wartość 12797282. Gdy Apigee Edge wykona zasadę, kolejne zasady lub kod w procesie przetwarzania mogą odwoływać się do zmiennej o nazwie urirequest.id, aby uzyskać wartość ciągu 12797282.
Na przykład ta zasada AssignMessage osadza wartość tej zmiennej w ładunku nowej wiadomości z żądaniem:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignPayload"> <DisplayName>AssignPayload</DisplayName> <Set> <Payload contentType="text/xml"> <IdExtractedFromURI>{urirequest.id}</IdExtractedFromURI> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> </AssignMessage>
Parametry zapytania
<ExtractVariables name="ExtractVariables-2">
<DisplayName>Extract a value from a query parameter</DisplayName>
<Source>request</Source>
<QueryParam name="code">
<Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>
<VariablePrefix>queryinfo</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>Załóżmy, że powyższy przykładowy kod zasady działa z tym przychodzącym żądaniem:
GET http://org1-test.apigee.net/accounts/12797282?code=DBN88271
Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego żądania przychodzącego, ustawi zmienną queryinfo.dbncode na 88271. Gdy Apigee Edge wykona zasadę, kolejne zasady lub kod w procesie przetwarzania mogą odwoływać się do zmiennej o nazwie queryinfo.dbncode, aby uzyskać wartość ciągu 88271.
W serwerze proxy możesz teraz używać zmiennej queryinfo.dbncode.
Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądania:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP>{queryinfo.dbncode}</ExtractQP> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Wiele parametrów
<ExtractVariables name="ExtractVariables-2">
<DisplayName>Extract a value from a query parameter</DisplayName>
<Source>request</Source>
<QueryParam name="w">
<Pattern ignoreCase="true">{firstWeather}</Pattern>
</QueryParam>
<QueryParam name="w.2">
<Pattern ignoreCase="true">{secondWeather}</Pattern>
</QueryParam>
<VariablePrefix>queryinfo</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>Załóżmy, że projekt interfejsu API umożliwia określanie wielu parametrów zapytania o tej samej nazwie. Za pomocą tej zasady możesz wyodrębnić wartość wielu wystąpień parametru zapytania „w”. Aby odwołać się do tych parametrów zapytania w zasadach ExtractVariables, użyj indeksów. Pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie ma indeks 2, trzecie – indeks 3 itd.
Załóżmy, że powyższy przykładowy kod zasady działa z tym przychodzącym żądaniem:
GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago
Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego przychodzącego żądania, ustawi zmienną queryinfo.firstWeather na Boston, a zmienną queryInfo.secondWeather na Chicago.
W serwerze proxy możesz teraz uzyskać dostęp do zmiennej queryinfo.firstWeather i queryinfo.secondWeather. Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądania:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1> <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Nagłówki
<ExtractVariables name='ExtractVariable-OauthToken'>
<Source>request</Source>
<Header name="Authorization">
<Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
</Header>
<VariablePrefix>clientrequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>Załóżmy, że Twój interfejs API używa tokenów okaziciela OAuth 2.0. Rozważmy przykładowy kod zasad powyżej, który działa z żądaniem zawierającym token OAuth 2.0 z nagłówkiem takim jak ten:Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.
Załóżmy, że jako projektant interfejsu API chcesz użyć wartości tokena (ale nie całego nagłówka) jako klucza w wyszukiwaniu w pamięci podręcznej. Aby wyodrębnić token, możesz użyć powyższego kodu zasady ExtractVariables.
Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego nagłówka, ustawi zmienną clientrequest.oauthtoken na wartość TU08xptfFfeM7aS0xHqlxTgEAdAM.
W proxy możesz teraz używać zmiennej clientrequest.oauthtoken. Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądania:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetHeader</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractHeader>{clientrequest.oauthtoken}</ExtractHeader> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
JSON
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
<JSONPayload>$
Rozważmy ten ładunek odpowiedzi JSON:
{ "results": [{ "geometry": { "location": { "lat": 37.42291810, "lng": -122.08542120 }, "location_type": "ROOFTOP", "viewport": { "northeast": { "lat": 37.42426708029149, "lng": -122.0840722197085 }, "southwest": { "lat": 37.42156911970850, "lng": -122.0867701802915 } } } }] }
Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tej wiadomości JSON, ustawi 2 zmienne: geocoderesponse.latitude i geocoderesponse.longitude. Obie zmienne używają tego samego prefiksu zmiennej: geocoderesponse. Sufiks tych zmiennych jest określony jednoznacznie przez atrybut name elementu <Variable>.
Zmienna geocoderesponse.latitude przyjmuje wartość 37.42291810. Zmienna geocoderesponse.longitude przyjmuje wartość -122.08542120.
W proxy możesz teraz używać zmiennej geocoderesponse.latitude. Na przykład ta zasada AssignMessage kopiuje ją do nagłówka o nazwie „latitude” w odpowiedzi:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetJSONVar</DisplayName> <Add> <Headers> <Header name="latitude">{geocoderesponse.latitude}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
XML
<ExtractVariables name="ExtractVariables-4"> <Source>response</Source> <XMLPayload> <Namespaces> <Namespace prefix="dir">urn:43BFF88D-D204-4427-B6BA-140AF393142F</Namespace> </Namespaces> <Variable name="travelmode" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/@mode</XPath> </Variable> <Variable name="duration" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:value</XPath> </Variable> <Variable name="timeunit" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:text</XPath> </Variable> </XMLPayload> <VariablePrefix>directionsresponse</VariablePrefix> </ExtractVariables>
<XMLPayload>
Rozważmy ten przykładowy ładunek odpowiedzi XML:
<Directions xmlns="urn:43BFF88D-D204-4427-B6BA-140AF393142F">
<status>OK</status>
<route>
<summary>I-40 W</summary>
<leg>
<step mode="DRIVING">
<start_location>
<lat>41.8507300</lat>
<lng>-87.6512600</lng>
</start_location>
<end_location>
<lat>41.8525800</lat>
<lng>-87.6514100</lng>
</end_location>
<duration>
<value>19</value>
<text>minutes</text>
</duration>
</step>
</leg>
</route>
</Directions>Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego komunikatu XML, ustawi 3 zmienne: directionsresponse.travelmode,, directionsresponse.duration i directionsresponse.timeunit. Wszystkie zmienne mają ten sam prefiks directionsresponse. Sufiks tych zmiennych jest określony jednoznacznie przez atrybut name elementu <Variable>.
Zmienna directionsresponse.travelmode przyjmuje wartość DRIVING. Zmienna directionsresponse.duration przyjmuje wartość 19. Zmienna directionsresponse.timeunit przyjmuje wartość minutes.
Teraz możesz uzyskać dostęp do zmiennej directionresponse.travelmode w swoim serwerze proxy. Na przykład ta zasada AssignMessage kopiuje ją do nagłówka o nazwie „tmode” w odpowiedzi:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetXMLVar</DisplayName> <Add> <Headers> <Header name="tmode">{directionsresponse.travelmode}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Informacje o zasadach ExtractVariables
Deweloperzy interfejsów API tworzą proxy interfejsów API, które zachowują się inaczej w zależności od treści wiadomości, w tym nagłówków, ścieżek URI, ładunków i parametrów zapytania. Często serwer proxy wyodrębnia część tych treści do użycia w instrukcji warunkowej. W tym celu użyj zasady ExtractVariables.
Podczas definiowania zasady ExtractVariables możesz wybrać:
- Nazwy zmiennych do ustawienia.
- Źródło zmiennych
- Liczba zmiennych do wyodrębnienia i ustawienia
Po wykonaniu zasady stosują wzorzec tekstu do treści i po znalezieniu dopasowania ustawiają wartość wyznaczonej zmiennej na treść. Inne zasady i kod mogą następnie wykorzystywać te zmienne, aby włączać dynamiczne działanie lub wysyłać dane biznesowe do Edge API Analytics.
Aby dowiedzieć się, jak za pomocą funkcji ExtractVariables tworzyć raporty Analytics oparte na treściach, przeczytaj artykuł Analizowanie treści wiadomości API za pomocą niestandardowych statystyk.
Zakres
Zmienne ustawione za pomocą zasady ExtractVariables mają zakres globalny. Oznacza to, że po zdefiniowaniu nowej zmiennej przez zasadę ExtractVariables możesz uzyskać do niej dostęp z dowolnej zasady lub kodu na dowolnym etapie przepływu (który jest wykonywany po zasadzie ExtractVariables). Obejmuje to:
- PreFlow: ProxyEndpoint i TargetEndpoint (żądanie i odpowiedź)
- PostFlow: ProxyEndpoint i TargetEndpoint (żądanie i odpowiedź)
- PostClientFlow: ProxyEndpoint (tylko odpowiedź, z użyciem zasad rejestrowania wiadomości)
- Przepływy błędów
Łączenie danych i tworzenie zmiennych
Zasada ExtractVariables wyodrębnia informacje z żądania lub odpowiedzi i zapisuje je w zmiennej. W przypadku każdego typu informacji, które możesz wyodrębnić, np. ścieżki URI lub danych XML, określ wzorzec do dopasowania i nazwę zmiennej używanej do przechowywania wyodrębnionych informacji.
Sposób dopasowywania wzorców zależy jednak od źródła wyodrębniania. W sekcjach poniżej opisujemy 2 podstawowe kategorie informacji, które możesz wyodrębnić.
Dopasowywanie ścieżek URI, parametrów zapytania, nagłówków, parametrów formularza i zmiennych
Podczas wyodrębniania informacji ze ścieżki URI, parametrów zapytania, nagłówków, parametrów formularza i zmiennych używasz tagu <Pattern>, aby określić co najmniej 1 wzorzec do dopasowania. Na przykład w tym przykładzie zasad pokazano pojedynczy pasujący wzorzec ścieżki URI:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>W tym przykładzie zmienna urirequest.pathSeg jest ustawiona na wartość, która pojawia się w proxy.pathsuffix po „/a/”. Załóżmy na przykład, że ścieżka bazowa serwera proxy interfejsu API to /basepath/v1 . W przypadku żądania przychodzącego do http://myCo.com/basepath/v1/a/b zmienna przyjmuje wartość „b”.
Określanie wielu wzorców
Możesz określić wiele wzorców do dopasowania, które odpowiadają tagom <Pattern>, gdzie:
- Wszystkie wzorce są testowane pod kątem dopasowania.
- Jeśli żaden wzorzec nie pasuje, zasada nie działa, a zmienne nie są tworzone.
- Jeśli pasuje więcej niż jeden wzorzec, do wyodrębniania używany jest wzorzec z najdłuższymi segmentami ścieżki.
- Jeśli 2 dopasowane wzorce mają takie same najdłuższe segmenty ścieżki, do wyodrębniania używany jest wzorzec określony jako pierwszy w zasadach.
W następnym przykładzie utworzysz zasadę zawierającą 3 wzorce dopasowania ścieżki URI:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>Załóżmy, że w przypadku serwera proxy interfejsu API ze ścieżką podstawową /basepath/v1 przychodzący adres URL żądania do serwera proxy interfejsu API ma taką postać:
http://myCo.com/basepath/v1/a/b
W tym przykładzie pierwszy wzorzec pasuje do identyfikatora URI, a zmienna urirequest.pathSeg ma wartość „b”.
Jeśli adres URL żądania to:
http://myCo.com/basepath/v1/a/b/c/d
...wtedy pasuje trzeci wzorzec, a zmienna urirequest.pathSeg przyjmuje wartość „d”.
Określanie wzorców z wieloma zmiennymi
W wzorcu dopasowania możesz określić wiele zmiennych. Możesz na przykład określić wzorzec dopasowania z 2 zmiennymi:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/{pathSeg1}/c/{pathSeg2}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>Załóżmy , że serwer proxy interfejsu API ma ścieżkę podstawową /basepath/v1. W przypadku adresu URL żądania przychodzącego:
http://myCo.com/basepath/v1/a/b/c/d
...zmienna urirequest.pathSeg1 ma wartość „b”, a zmienna urirequest.pathSeg2 ma wartość „d”.
Dopasowywanie wielu wystąpień we wzorcu
Możesz też dopasowywać wzorce, gdy występuje wiele instancji elementu o tej samej nazwie. Możesz na przykład wysłać żądanie zawierające wiele parametrów zapytania lub wiele nagłówków o tej samej nazwie. To żądanie zawiera 2 parametry zapytania o nazwie „w”:
http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2
Aby odwołać się do tych parametrów zapytania w zasadach ExtractVariables, użyj indeksów. Pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie ma indeks 2, trzecie – indeks 3 itd. Na przykład te zasady wyodrębniają wartość drugiego parametru zapytania o nazwie „w” w żądaniu:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<QueryParam name="w.2">
<Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>Zmienna urirequest.secondW ma wartość „2”. Jeśli w żądaniu brakuje drugiego parametru zapytania, zmienna urirequest.secondW jest pusta. Indeksowania używaj zawsze, gdy w żądaniu występuje wiele elementów o tej samej nazwie.
Używanie znaków specjalnych w wzorcu
Podczas dopasowywania ścieżek URI we wzorcu możesz używać symboli wieloznacznych „*” i „**”, gdzie:
- „*” pasuje do dowolnego segmentu ścieżki.
- „**” pasuje do wielu segmentów ścieżki.
Na przykład określasz wzorce dla elementu <URIPath> w sposób pokazany poniżej:
<URIPath>
<Pattern ignoreCase="true">/a/*/{id}</Pattern>
<Pattern ignoreCase="true">/a/**/{id}</Pattern>
</URIPath>Pierwszy wzorzec pasuje do żądań z sufiksami ścieżki (część ścieżki URI po ścieżce podstawowej), takimi jak „/a/b/c”, „/a/foo/bar” itp. Drugi wzorzec pasuje do dowolnej liczby segmentów ścieżki po „/a/”, np. „/a/foo/bar/baz/c”, a także „/a/b/c” i „/a/foo/bar”.
Podczas określania wzorców dla parametrów zapytania, nagłówków i parametrów formularza znak „*” oznacza dopasowanie dowolnej liczby znaków. Na przykład podczas dopasowywania nagłówka określ wzorzec w ten sposób:
*;charset={encoding}
Ten wzorzec pasuje do wartości „text/xml;charset=UTF-16” i „application/xml;charset=ASCII”.
Jeśli wartość przekazana do zasady ExtractVariables zawiera znak specjalny, np. „{”, użyj znaku „%”, aby zmienić jego znaczenie. W tym przykładzie znaki „{” i „}” w wzorcu są poprzedzone znakiem zmiany znaczenia, ponieważ są używane jako znaki dosłowne w wartości parametru zapytania:
<QueryParam>
<Pattern ignoreCase="true">%{user%} {name}</Pattern>
</QueryParam>W tym przykładzie wzorzec pasuje do wartości „{user} Steve”, ale nie do wartości „user Steve”.
Dopasowywanie plików JSON i XML
Podczas wyodrębniania danych z plików JSON i XML w zasadach określasz co najmniej 1 tag <Variable>. Tag <Variable> określa nazwę zmiennej docelowej, w której są przechowywane wyodrębnione informacje, oraz ścieżkę JsonPath (JSON) lub XPATH (XML) do wyodrębnionych informacji.
Wszystkie tagi <Variable> w zasadach są oceniane, dzięki czemu możesz wypełniać wiele zmiennych na podstawie pojedynczych zasad. Jeśli tag <Variable> nie zostanie przekształcony w prawidłowe pole w pliku JSON lub XML, odpowiednia zmienna nie zostanie utworzona.
Poniższy przykład przedstawia zasadę ExtractVariables, która wypełnia 2 zmienne z treści odpowiedzi w formacie JSON:
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
Zapisywanie tej samej zmiennej w wielu miejscach
Zachowaj ostrożność podczas wybierania nazw zmiennych do ustawienia. Zasada jest wykonywana sekwencyjnie od pierwszego do ostatniego wzorca wyodrębniania. Jeśli zasada zapisuje wartość w tej samej zmiennej w kilku miejscach, wartość zmiennej jest określana przez ostatni zapis w zasadzie. (Być może o to Ci chodzi).
Załóżmy na przykład, że chcesz wyodrębnić wartość tokena, która może być przekazywana w parametrze zapytania lub w nagłówku, jak pokazano poniżej:
<!-- If token only in query param, the query param determines the value.
If token is found in both the query param and header, header sets value. -->
<QueryParam name="token">
<Pattern ignoreCase="true">{tokenValue}</Pattern>
</QueryParam>
<!-- Overwrite tokenValue even if it was found in query parameter. -->
<Header name="Token">
<Pattern ignoreCase="true">{tokenValue}</Pattern>
</Header>Określanie, co się stanie, gdy nie będzie dopasowania
Jeśli wzorzec nie pasuje, odpowiednia zmienna nie zostanie utworzona. Dlatego jeśli inna zasada odwołuje się do zmiennej, może to spowodować błąd.
Jedną z opcji jest ustawienie wartości <IgnoreUnresolvedVariables> na „true” w zasadach, które odwołują się do zmiennej, aby skonfigurować zasadę tak, aby traktowała każdą nierozwiązywalną zmienną jako pusty ciąg znaków (null):
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
Odwołanie do elementu
Odwołanie do elementu opisuje elementy i atrybuty zasad ExtractVariables.
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables 1</DisplayName> <Source clearPayload="true|false">request</Source> <VariablePrefix>myprefix</VariablePrefix> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <URIPath> <Pattern ignoreCase="false">/accounts/{id}</Pattern> </URIPath> <QueryParam name="code"> <Pattern ignoreCase="true">DBN{dbncode}</Pattern> </QueryParam> <Header name="Authorization"> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header> <FormParam name="greeting"> <Pattern>hello {user}</Pattern> </FormParam> <Variable name="request.content"> <Pattern>hello {user}</Pattern> </Variable> <JSONPayload> <Variable name="name"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload> <XMLPayload stopPayloadProcessing="false"> <Namespaces/> <Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable> </XMLPayload> </ExtractVariables>
Atrybuty elementu <ExtractVariables>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:
| Atrybut | Opis | Domyślny | Obecność |
|---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> 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 |
|---|---|
| Obecność | Opcjonalnie |
| Typ | Ciąg znaków |
Element <Source>
(Opcjonalnie) Określa zmienną, która ma zostać przeanalizowana. Wartość <Source> jest domyślnie ustawiona na message. Wartość message
zależy od kontekstu. W przypadku przepływu żądania wartość message jest rozpoznawana jako wiadomość z żądaniem. W przepływie odpowiedzi wartość message jest rozwiązywana jako wiadomość z odpowiedzią.
Zasady te są często używane do wyodrębniania informacji z wiadomości z prośbą lub odpowiedzią, ale można ich używać do wyodrębniania informacji z dowolnej zmiennej. Możesz go na przykład użyć do wyodrębniania informacji z elementu utworzonego przez zasady AccessEntity, z danych zwracanych przez zasady wywołania usługi lub z obiektu XML lub JSON.
Jeśli nie można rozpoznać <Source> lub rozpoznano go jako typ inny niż wiadomość, zasada nie odpowie.
<Source clearPayload="true|false">request</Source>
| Domyślnie: | wiadomość |
| Obecność: | Opcjonalny |
| Typ: | Ciąg znaków |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| clearPayload |
Ustaw wartość true, jeśli po wyodrębnieniu danych z ładunku określonego w elemencie <Source> chcesz go wyczyścić. |
fałsz |
Opcjonalny | Wartość logiczna |
Element <VariablePrefix>
(Opcjonalnie) Pełna nazwa zmiennej powstaje przez połączenie <VariablePrefix>, kropki i nazwy zdefiniowanej w {nawiasach klamrowych} w elemencie <VariablePrefix> lub elemencie <Variable>.<Pattern> Na przykład:myprefix.id, myprefix.dbncode lub myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
Załóżmy na przykład, że wartość parametru name to „user”.
- Jeśli nie podasz właściwości
<VariablePrefix>, wyodrębnione wartości zostaną przypisane do zmiennej o nazwieuser. - Jeśli jako prefiks podasz
<VariablePrefix>, wyodrębnione wartości zostaną przypisane do zmiennej o nazwiemyprefix.user.
| Domyślnie: | Nie dotyczy |
| Obecność: | Opcjonalny |
| Typ: | Ciąg znaków |
Element <IgnoreUnresolvedVariables>
(Opcjonalnie) Ustaw na true, aby traktować każdą nierozwiązywalną zmienną jako pusty ciąg znaków (wartość null). Ustaw wartość false, jeśli chcesz, aby zasada zgłaszała błąd, gdy nie można rozpoznać żadnej z odwoływanych zmiennych.
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
| Domyślnie: | Fałsz |
| Obecność: | Opcjonalny |
| Typ: | Wartość logiczna |
Jeśli odwołanie XPath w <XMLPayload> nie zostanie rozwiązane, zasada zgłosi następujący błąd:
{ "fault":{ "faultstring":"Unresolved xpath path in policy policy_name.", "detail":{ "errorcode":"steps.extractvariables.InvalidXPath" } } }
Element <URIPath>
(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z elementu proxy.pathsuffix źródłowej wiadomości request. Ścieżka zastosowana do wzorca to proxy.pathsuffix, która nie zawiera ścieżki podstawowej serwera proxy interfejsu API. Jeśli wiadomość źródłowa zostanie rozpoznana jako typ wiadomości response, ten element nie wykonuje żadnej czynności.
<URIPath>
<Pattern ignoreCase="false">/accounts/{id}</Pattern>
</URIPath>Można użyć wielu elementów <Pattern>:
<URIPath>
<Pattern ignoreCase="false">/accounts/{id}</Pattern>
<Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>| Domyślnie: | Nie dotyczy |
| Obecność: | Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.. |
| Typ: | Nie dotyczy |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| ignoreCase | Określa, czy podczas dopasowywania wzorca ma być ignorowana wielkość liter. |
fałsz |
Opcjonalny | Wartość logiczna |
Element <QueryParam>
(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego parametru zapytania w wiadomości źródłowej żądania. Jeśli wiadomość źródłowa jest typu odpowiedź, ten element nie robi nic.
<QueryParam name="code">
<Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>Jeśli kilka parametrów zapytania ma tę samą nazwę, użyj indeksów, aby się do nich odwoływać:
<QueryParam name="w.2">
<Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>| Domyślnie: | Nie dotyczy |
| Obecność: | Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.. |
| Typ: | Nie dotyczy |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| nazwa | Określa nazwę parametru zapytania. Jeśli kilka parametrów zapytania ma tę samą nazwę, użyj odwoływania indeksowanego, w którym pierwsza instancja parametru zapytania nie ma indeksu, druga ma indeks 2, trzecia – indeks 3 itd. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <Header>
(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego nagłówka HTTP w określonym żądaniu lub odpowiedzi. Jeśli kilka nagłówków ma taką samą nazwę, ich wartości są przechowywane w tabeli.
<!-- The name is the actual header name. --> <Header name="Authorization"> <!-- Provide a name for your new custom variable here. --> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header>
Jeśli kilka nagłówków ma tę samą nazwę, użyj indeksów, aby odwoływać się do poszczególnych nagłówków w tablicy:
<Header name="myHeader.2">
<Pattern ignoreCase="true">{secondHeader}</Pattern>
</Header>lub to polecenie, aby wyświetlić listę wszystkich nagłówków w tablicy:
<Header name="myHeader.values">
<Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>| Domyślnie: | Nie dotyczy |
| Obecność: | Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.. |
| Typ: | Nie dotyczy |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| nazwa | Określa nazwę nagłówka, z którego wyodrębniana jest wartość. Jeśli kilka nagłówków ma tę samą nazwę, użyj odwoływania indeksowanego, w którym pierwsza instancja nagłówka nie ma indeksu, druga ma indeks 2, trzecia 3 itd. Aby uzyskać wszystkie nagłówki w tablicy, użyj .values. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <FormParam>
(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego parametru formularza w określonym żądaniu lub odpowiedzi. Parametry formularza można wyodrębnić tylko wtedy, gdy nagłówek Content-Type określonej wiadomości ma wartość application/x-www-form-urlencoded.
<FormParam name="greeting">
<Pattern>hello {user}</Pattern>
</FormParam>| Domyślnie: | Nie dotyczy |
| Obecność: | Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.. |
| Typ: | Nie dotyczy |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| nazwa | Nazwa parametru formularza, z którego wyodrębniasz wartość. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <Variable>
(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Określa nazwę zmiennej, z której ma zostać wyodrębniona wartość.
<Variable name="myVar">
<Pattern>hello {user}</Pattern>
</Variable>Aby wyodrębnić z zmiennej 2 wartości:
<Variable name="myVar">
<Pattern>hello {firstName} {lastName}</Pattern>
</Variable>| Domyślnie: | Nie dotyczy |
| Obecność: | Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.. |
| Typ: | Nie dotyczy |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| nazwa | Nazwa zmiennej, z której ma zostać wyodrębniona wartość. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <JSONPayload>
(Opcjonalnie, ale więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Określa wiadomość w formacie JSON, z której zostanie wyodrębniona wartość zmiennej. Wyodrębnianie danych w formacie JSON jest wykonywane tylko wtedy, gdy nagłówek Content-Type wiadomości ma wartość application/json.
<JSONPayload> <Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload>
| Domyślnie: | Nie dotyczy |
| Obecność: | Opcjonalnie: Musisz jednak podać co najmniej jeden z tych atrybutów:<URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> lub <XMLPayload>.. |
| Typ: | Nie dotyczy |
Element <JSONPayload>/<Variable>
(Wymagany w elemencie JSONPayload). Określa zmienną, do której przypisywana jest wyodrębniona wartość. W elemencie <JSONPayload> możesz umieścić wiele tagów <Variable>, aby wypełnić wiele zmiennych.
<Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable>
| Domyślnie: | Nie dotyczy |
| Obecność: | Wymagany w elemencie JSONPayload. |
| Typ: | Nie dotyczy |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| nazwa |
Określa nazwę zmiennej, do której zostanie przypisana wyodrębniona wartość. |
nazwa |
Wymagane | Ciąg znaków |
| typ | Określa typ danych wartości zmiennej. | Nie dotyczy | Opcjonalny |
Ciąg tekstowy. Do wyboru masz te opcje:
|
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ść |
fałsz |
Opcjonalny | Wartość logiczna |
Element <XMLPayload>/<Namespaces>
(Opcjonalnie) Określa przestrzeń nazw, która ma być używana podczas obliczania wyrażenia XPath. Jeśli w wyrażeniach XPath używasz przestrzeni nazw, musisz je zadeklarować w tym miejscu, jak pokazano w przykładzie poniżej.
<XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="legName" type="string"> <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath> </Variable> </XMLPayload>
Jeśli w wyrażeniach XPath nie używasz przestrzeni nazw, możesz pominąć lub zakomentować element <Namespaces>, jak pokazano w tym przykładzie:
<XMLPayload stopPayloadProcessing="false"> <!-- <Namespaces/> --> <Variable name="legName" type="string"> <XPath>/Directions/route/leg/name</XPath> </Variable> </XMLPayload>
| Domyślnie: | Nie dotyczy |
| Obecność: | Opcjonalny |
| Typ: | Ciąg znaków |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
prefix |
Prefiks przestrzeni nazw. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <XMLPayload>/<Variable>
(Opcjonalnie) Określa zmienną, do której zostanie przypisana wyodrębniona wartość.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
| Domyślnie: | Nie dotyczy |
| Obecność: | Opcjonalny |
| Typ: | Nie dotyczy |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| nazwa |
Określa nazwę zmiennej, do której zostanie przypisana wyodrębniona wartość. |
nazwa |
Wymagane | Ciąg znaków |
| typ | Określa typ danych wartości zmiennej. | Wartość logiczna | Opcjonalny |
Ciąg tekstowy. Do wyboru masz te opcje:
|
Element <XMLPayload>/<Variable>/<XPath>
(Wymagany w elemencie XMLPayload:Variable). Określa ścieżkę XPath zdefiniowaną dla zmiennej. Obsługiwane są tylko wyrażenia XPath 1.0.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
Przykład z przestrzenią nazw. Jeśli w wyrażeniach XPath używasz przestrzeni nazw, musisz zadeklarować je w sekcji <XMLPayload><Namespaces> zasad.
<Variable name="name" type="boolean"> <XPath>/foo:test/foo:example</XPath> </Variable>
| Domyślnie: | Nie dotyczy |
| Obecność: | Wymagane |
| Typ: | Ciąg znaków |
Odniesienie do błędu
W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
| Kod błędu | Stan HTTP | Przyczyna | Napraw |
|---|---|---|---|
steps.extractvariables.ExecutionFailed |
500 |
Ten błąd występuje, gdy:
|
build |
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. |
build |
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. |
build |
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. | build |
steps.extractvariables.SourceMessageNotAvailable |
500 | Ten błąd występuje, jeśli komunikat
zmienna określona w elemencie Source zasady
jest:
|
build |
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. | build |
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. |
build |
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ę. |
build |
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. |
build |
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.
|
build |
EmptyXPathExpression |
Jeśli zasada ma puste wyrażenie XPath w elemencie XMLPayload
, nie uda się wdrożyć serwera proxy interfejsu API. |
build |
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. |
build |
EmptyJSONPathExpression |
Jeśli zasada ma puste wyrażenie XPath w parametrze
XMLPayload, nie udało się wdrożyć serwera proxy interfejsu API. |
build |
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. |
build |
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. |
build |
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. |
build |
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. |
build |
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.
|
build |
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