Korzystanie ze zmiennych przepływu

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

Zmienne przepływu są obiektami, do których możesz uzyskać dostęp z poziomu zasad lub narzędzi (takich jak narzędzie Trace). Pozwalają zachować stan powiązany z Transakcja interfejsu API została przetworzona przez Apigee Edge.

Co to są zmienne przepływu?

Zmienne przepływu występują w kontekście przepływu serwera proxy interfejsu API i śledzą stan w interfejsie API w sposób, w jaki zmienne nazwane śledzą stan w programie. Magazyn zmiennych przepływu takie informacje jak:

  • Adres IP, nagłówki, ścieżka adresu URL i ładunek wysłane z aplikacji wysyłającej żądanie
  • Informacje systemowe, na przykład data i godzina otrzymania żądania przez Edge
  • Dane pobierane po uruchomieniu zasady. Na przykład po uruchomieniu zasady, która weryfikuje Edge tworzy zmienne procesu przechowujące informacje takie jak nazwa żądającego aplikacji.
  • Informacje o odpowiedzi z systemu docelowego

Niektóre zmienne są „wbudowane” do Edge i są automatycznie wypełniane przy każdym żądaniu do interfejsu API . Są dostępne w ramach transakcji interfejsu API. Możesz również tworzyć własne zmiennych niestandardowych, korzystając z zasad takich jak AssignMessage lub JavaScript, Node.js Kod w Javie.

Jak widać, zmienne mają zakres i to, gdzie są dostępne, zależy częściowo od tego, tworzone w procesie serwera proxy interfejsu API. Ogólnie po utworzeniu zmiennej może ona wszystkie zasady i kod, który jest wykonywany później w przepływie transakcji interfejsu API.

Jak są używane zmienne przepływu?

Zmienne przepływu są używane w zasadach i przepływach warunkowych:

  • Zasady mogą pobierać stan ze zmiennych przepływu i używać ich do wykonywania w naszej pracy.

    Na przykład zasadaVerifyJWT może pobierać token do zweryfikowania, z którego ma zostać zweryfikowany zmienną przepływu, a następnie jej weryfikację. Kolejny przykład: Zasady JavaScript mogą pobierać zmienne przepływu i kodować dane zawarte w tych zmiennych.

  • Przepływy warunkowe mogą odwoływać się do zmiennych przepływu, aby kierować przepływ interfejsu API. Edge, podobnie jak w przypadku programowania instrukcji Switch.

    Na przykład zasada zwracania błędu może być wykonywana tylko wtedy, gdy określona zmienna przepływu jest ustawiony. Wreszcie możesz pobrać i ustawić zmienne przepływu w aplikacji docelowej Node.js.

Spójrzmy na przykłady użycia zmiennych w każdym z tych kontekstów.

Zmienne przepływu w zasadach

Stosowanie niektórych zasad zmiennych jako danych wejściowych.

Na przykład poniższe zasada AssignMessage pobiera wartość zmiennej przepływu client.ip i umieszcza ją w nagłówku żądania pod tytułem My-Client-IP. Jeśli ta zasada jest dodana do procesu żądania, ustawia nagłówek która jest przekazywana do miejsca docelowego backendu. Jeśli jest ustawiony w procesie odpowiedzi, nagłówek jest wysyłany. do aplikacji klienckiej.

<AssignMessage name="set-ip-in-header">
    <AssignTo createNew="false" transport="http" type="request">request</AssignTo>
    <Set>
        <Headers>
            <Header name="My-Client-IP">{client.ip}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

W innym przykładzie po wykonaniu zasady limitów wypełnianych jest kilka zmiennych przepływu z wartościami związanymi z zasadami. Jedną z tych zmiennych jest o nazwie ratelimit.my-quota-policy.used.count (gdzie my-quota-policy to nazwę zasady dotyczącej limitów, która Cię interesuje).

Możesz później wykonać przepływ warunkowy z informacją, że „jeśli bieżący limit wynosi poniżej 50% wartości maksymalnej i mieści się w przedziale między 9:00 a 17:00, wyegzekwować inny limit”. Ten warunek może zależeć od wartości bieżącej liczby limitów i na zmiennej przepływu o nazwie system.time, która jest jedną z wbudowanych zmiennych.

Zmienne przepływu w warunkach warunkowych przepływy

Przepływy warunkowe oceniać zmienne przepływu i umożliwiać dynamiczne zachowanie serwerów proxy. Zwykle stosowane są warunki aby zmienić działanie przepływów, kroków i reguł trasy.

Oto przepływ warunkowy, który ocenia wartość zmiennej request.verb w kroku procesu proxy. W tym przypadku, jeśli czasownik żądania to POST, wykonywana jest zasadaVerifyAPIKey. Jest to często używany wzorzec Konfiguracje proxy interfejsów API.

<PreFlow name="PreFlow">
    <Request>
        <Step>
            <Condition>request.verb equals "POST"</Condition>
            <Name>VerifyApiKey</Name>
        </Step>
    </Request>
</PreFlow>

Być może zastanawiasz się, gdzie wykorzystujemy zmienne takie jak request.verb, skąd pochodzą client.ip i system.time? Kiedy są tworzone instancje zawiera wartość? Dzięki temu możesz łatwiej zrozumieć, kiedy i kiedy zmienne są tworzone Więcej informacji można znaleźć w sekcji Omówienie zmiennej przepływu zakresu.

Zmienne przepływu w kodzie JavaScript wywoływane za pomocą JavaScriptu polityka

Dzięki zasadom JavaScript możesz uruchamiać kod JavaScript w kontekście Przepływ serwera proxy interfejsu API. Kod JavaScript wykonywany przez tę zasadę korzysta z Apigee Obiektowy model JavaScript, zapewnia niestandardowy kod dostępu do obiektów żądań, odpowiedzi i kontekstu powiązanych z Przepływ serwera proxy interfejsu API, w którym wykonywany jest kod. Na przykład ten kod ustawia nagłówek odpowiedzi wartością uzyskaną ze zmiennej przepływu jest target.name.

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));

Ta technika użycia JavaScriptu do odczytywania i ustawiania zmiennych przypomina pracę, z zasadą AssignMessage (pokazaną wcześniej). To po prostu inny sposób na osiągnięcie tego samego na Edge. Ważne, aby pamiętać, że JavaScript wykonywany przez zasady JavaScript ma dostęp do wszystkich istniejących zmiennych przepływu, które są w zakresie w procesie serwera proxy interfejsu API.

Zmienne przepływu w kodzie Node.js

Wymagając modułu apigee-access, możesz ustawiać zmienne przepływu i uzyskiwać do nich dostęp z poziomu w kodzie Node.js wdrażanym w Edge.

Oto prosty przykład, w którym zmienna o nazwie custom.foo jest ustawiona na wartość Bar Po ustawieniu ta nowa zmienna staje się dostępna dla wszystkich zasad lub innego kodu występujące w przepływie serwera proxy po wykonaniu kodu Node.js.

var http = require('http');
var apigee = require('apigee-access');

http.createServer(function (request, response) {
  apigee.setVariable(request, "custom.foo", "Bar");
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

Więcej informacji o używaniu apigee-access do pracy ze zmiennymi znajdziesz w artykule Uzyskiwanie dostępu do zmiennych przepływu w Node.js.

Zakres zmiennej przepływu

Zakres zmiennej jest związany z przepływem lub ogólnym „cyklem życia”. serwera proxy interfejsu API .

Wizualizacja przepływu serwera proxy interfejsu API

Aby zrozumieć zakres zmiennych przepływu, ważne jest zrozumienie lub wizualizacja sposobu, w jaki wiadomości przez serwer proxy interfejsu API. Serwer proxy interfejsu API składa się z serii etapów przetwarzania wiadomości i planowane jako przepływ. Na każdym etapie procesu serwera proxy serwer proxy ocenia informacje dostępne dla i decyduje, co dalej. W trakcie pracy serwer proxy może wykonywać kod zasady lub wykonywać rozgałęzienia warunkowego.

Na ilustracji poniżej przedstawiono tę sekwencję przepływów. Zwróć uwagę, jak składają się przepływy 4 główne segmenty: żądanie punktu końcowego proxy, żądanie punktu docelowego punktu końcowego. Odpowiedź punktu końcowego i odpowiedź ProxyEndpoint.

Pamiętaj o tej strukturze, zaczynając przyglądać się zmiennym przepływu w pozostałej części w tym temacie.

Jak zakres zmiennej jest powiązany z przepływem serwera proxy

Gdy tylko zobaczysz wizualizację przepływu wiadomości przez serwer proxy, w sposób opisany wcześniej, może zrozumieć zakres zmienny. Zakres obejmuje punkt cyklu życia przepływu proxy .

Jeśli na przykład do witryny dodaliśmy zasadę segmentowi żądania ProxyEndpoint, ta zasada nie będzie miała dostępu do żadnych zmiennych, które są jest ograniczony do segmentu żądania TargetEndpoint. Powodem jest to, że docelowy punkt końcowy segment żądania przepływu nie został jeszcze wykonany, więc serwer proxy API nie miał jeszcze szansy i uzupełniać zmienne w danym zakresie.

Poniższa tabela zawiera pełny zestaw zakresów zmiennych i wskazuje, kiedy używany jest serwer proxy proces, w jaki stają się dostępne.

Zakres zmiennej Gdzie są wypełniane te zmienne
żądanie do serwera proxy Segment żądania ProxyEndpoint
żądanie docelowe Segment żądania docelowego punktu końcowego
odpowiedź docelowa Segment odpowiedzi docelowego punktu końcowego
odpowiedź serwera proxy Segment odpowiedzi ProxyEndpoint
zawsze dostępne Gdy tylko serwer proxy otrzyma żądanie. Te zmienne są dostępne w całego cyklu życia procesu proxy.

Na przykład istnieje wbudowana zmienna Edge o nazwie client.ip. Ta zmienna ma „żądanie serwera proxy” zakresu. Jest ono automatycznie wypełniane adresem IP klienta, który serwera proxy. Jest zapełniane, gdy żądanie po raz pierwszy trafi do punktu końcowego serwera proxy i pozostaje dostępne w całym cyklu życia przepływu proxy.

Istnieje też inna wbudowana zmienna o nazwie target.url. Zakres tej zmiennej to „target request”. Jest wypełniana w segmencie żądania punktu docelowego punktu końcowego adresem URL żądania wysłanego do miejsca docelowego w backendzie. Jeśli próbujesz uzyskać dostęp do usługi target.url w żądaniu ProxyEndpoint otrzymasz wartość NULL. Jeśli spróbujesz ustawić tę zmienną, zanim znajdzie się ona w zakresie, serwer proxy nie robi nic – nie generuje błędu ani nie ustawia zmiennej.

Oto prosty przykład, który pokazuje, jak myśleć o zakresie zmiennym. Załóżmy, że chcesz aby skopiować całą zawartość obiektu żądania (nagłówki, parametry, treść) i przypisać go do funkcji ładunek odpowiedzi, który ma być odesłany z powrotem do aplikacji wywołującej. Możesz użyć zasady AssignMessage do: w tym zadaniu. Kod zasad wygląda tak:

<AssignMessage name="CopyRequestToResponse">
    <AssignTo type="response" createNew="false">response</AssignTo>
    <Copy source="request"/>
</AssignMessage>

Ta zasada po prostu kopiuje obiekt request i przypisuje go do funkcji response obiekt. Ale gdzie należy umieścić tę zasadę w procesie serwera proxy? trzeba go umieścić w odpowiedzi TargetEndpoint, ponieważ zakres zmienna odpowiedzi to „reakcja docelowa”.

Zmienne przepływu odwołań

Wszystkie zmienne wbudowane w Apigee Edge są określane zgodnie z konwencją nazewnictwa w notacji kropkowej. Ta konwencja ułatwia określenie przeznaczenia zmiennej. Przykład: system.time.hour i request.content.

Apigee rezerwuje różne prefiksy, aby odpowiednio porządkować odpowiednie zmienne. Te prefiksy uwzględnij:

  • request
  • response
  • system
  • target

Aby odwołać się do zmiennej w zasadzie, umieść ją w nawiasach klamrowych. Przykład: Następująca zasada AssignMessage pobiera wartość zmiennej client.ip i umieszcza go w nagłówku żądania o nazwie Client-IP.

<AssignMessage name="set-ip-in-header">
    <AssignTo createNew="false" transport="http" type="request">request</AssignTo>
    <Set>
        <Headers>
            <Header name="Client-IP">{client.ip}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

W przepływach warunkowych nawiasy klamrowe nie są konieczne. Przykładowy warunek: oblicza zmienną request.header.accept:

<Step>
    <Condition>request.header.accept = "application/json"</Condition>
    <Name>XMLToJSON</Name>
</Step>

Możesz też odwoływać się do zmiennych przepływu w kodzie JavaScript i Java. Aby dowiedzieć się więcej, zobacz:

Typ danych zmiennych przepływu

Każda właściwość zmiennej przepływu ma dokładnie zdefiniowany typ danych, np. ciąg znaków, długość, liczba całkowita, Wartość logiczna lub kolekcja. Typy danych wymienione tutaj: omówienie zmiennych przepływu. W przypadku zmiennych utworzonych przez zasadę informacje o typach danych znajdziesz w artykule z informacjami o zasadach.

Zmienne tworzone ręcznie zakładają typ podany podczas tworzenia i zależą dotyczące dozwolonych typów wartości. Na przykład zmienne utworzone w kodzie Node.js to ograniczone do wartości Number (liczba), String (ciąg znaków), wartości logicznych, wartości null (null) lub undefined.

Używanie zmiennych przepływu w zasadach

Wiele zasad tworzy zmienne przepływu w ramach normalnego działania. Dokumenty z informacjami o zasadach wszystkich tych zmiennych poszczególnych zasad.

W przypadku pracy z serwerami proxy i zasadami pamiętaj o zapoznaniu się odniesienia do zasad, by dowiedzieć się, które zmienne są tworzone i do czego służą. Dla: na przykład zasada limitów tworzy zbiór zmiennych z informacjami o liczbie limitów czas ważności itd.

Niektóre zmienne zasad mogą być przydatne podczas debugowania. Możesz użyć narzędzia Ślad, na przykład do sprawdzanie, które zmienne zostały ustawione w konkretnej instancji w przepływie serwera proxy.

Zasada WyodrębnijZmienne umożliwia wypełniasz zmienne niestandardowe danymi wyodrębnionymi z wiadomości. Możesz wyodrębnić zapytanie parametry, nagłówki i inne dane. Możesz na przykład analizować wiadomości z żądaniami i odpowiedziami za pomocą wzorców wyodrębniania z wiadomości konkretnych danych.

W przykładzie poniżej funkcja Wyodrębnianie zmiennych analizuje wiadomość z odpowiedzią i przechowuje określone dane które zostały zaczerpnięte z odpowiedzi. Zasada tworzy 2 zmienne niestandardowe: geocoderesponse.latitude i geocoderesponse.longitude oraz przypisuje .

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

Pamiętaj, że wiele zasad automatycznie tworzy zmienne. Możesz uzyskać do nich dostęp, zmiennych w kontekście przepływu serwera proxy. Są one udokumentowane w sekcji z osobnymi tematami zasad.

Praca ze zmiennymi przepływu w kodzie JavaScript

Możesz uzyskać dostęp do zmiennych i ustawić je bezpośrednio w kodzie JavaScript wykonywanym w kontekście serwera proxy API. Dzięki modelowi obiektowemu JavaScript Apigee wykonywanie kodu JavaScript na Edge pozwoliło bezpośredniego dostępu do zmiennych proxy.

Aby uzyskać dostęp do zmiennych w kodzie JavaScript, wywołaj metody getter/setter w dowolnym z tych obiektów:

  • context
  • proxyRequest
  • proxyResponse
  • targetRequest
  • targetResponse

Jak widać, odwołania do obiektów są mapowane na znane segmenty modelu przepływu proxy jak wyjaśniliśmy wcześniej w sekcji Wizualizacja przepływu serwera proxy interfejsu API.

Obiekt context odpowiada obiektowi „globalnie” dostępnych zmiennych, np. system zmiennych. Możesz na przykład wywołać funkcję getVariable() w obiekcie context aby pobrać bieżący rok:

var year = context.getVariable('system.time.year');

W podobny sposób możesz wywołać setVariable(), aby ustawić wartość zmiennej niestandardowej lub wszystkich gotowych zapisów. Tworzysz zmienną niestandardową o nazwie organization.name.myorg i przypisz mu wartość.

var org = context.setVariable('organization.name.myorg', value);

Ta zmienna jest tworzona za pomocą obiektu context, więc będzie dostępna dla we wszystkich segmentach przepływu (w skrócie przypomina to tworzenie zmiennej globalnej).

Możesz też pobrać/ustawić zmienne przepływu proxy w kodzie Java, który wykonujesz za pomocą Zasady JavaCallout.

Dostęp do zmiennych przepływu w aplikacjach Node.js

Zmienne przepływu z kodu Node.js wdrożonego w Edge możesz pobierać, ustawiać i usuwać. Wszystko, czego potrzebujesz do zrobienia to „wymagać” moduł apigee-access w kodzie. Szczegółowe informacje znajdziesz w artykule Dostęp do zmiennych przepływu w Node.js.

O czym musisz pamiętać

Oto kilka ważnych informacji na temat zmiennych przepływu:

  • Niektóre gotowe do użycia zmienne są tworzone i wypełniane automatycznie przez serwer proxy Dokumentację tę znajdziesz w dokumentacji zmiennych przepływu.
  • Możesz tworzyć zmienne niestandardowe, których będzie można używać w procesie serwera proxy. To możliwe do tworzenia zmiennych przy użyciu zasad takich jak AssignMessage i JavaScript; w kodzie Node.js.
  • Zmienne mają zakres. Na przykład niektóre zmienne są wypełniane automatycznie, gdy pierwszy serwer proxy odbiera żądanie z aplikacji. Inne zmienne są wypełniane w przepływie odpowiedzi. z serwera proxy. Te zmienne odpowiedzi pozostaną niezdefiniowane do czasu, aż segment odpowiedzi .
  • Gdy zasady są wykonywane, mogą tworzyć i wypełniać zmienne związane z zasadami. dokumentacja każdej zasady zawiera listę wszystkich tych zmiennych.
  • Przepływy warunkowe oceniają zwykle jedną lub więcej zmiennych. Musisz zrozumieć zmiennych, jeśli chcesz utworzyć przepływy warunkowe.
  • Wiele zasad używa zmiennych jako danych wejściowych lub wyjściowych. Załóżmy, że zmienna tworzona przez która jest później używana przez inną.
  • Możesz pobrać i ustawić wiele zmiennych przepływu z poziomu Node.js za pomocą prostego JavaScriptu (oraz model obiektowy JavaScript) lub zasady JavaCallout, które wykonują kod w Edge.

Powiązane przykłady kodu

Przykłady serwerów proxy interfejsów API znajdziesz na GitHubie, gdzie można je łatwo pobrać i ich używanie. Zapoznaj się z sekcją Korzystanie z przykładowych serwerów proxy interfejsu API w sekcji o pobieraniu i korzystaniu z próbek. Opis interfejsu API znajdziesz na liście przykładów. z przykładami serwera proxy i jak one działają.

Przykładowe serwery proxy, które obsługują wykorzystywanie zmiennych i przetwarzanie zmiennych, to m.in.:

  • zmienne – Pokazuje, jak wyodrębniać i ustawiać zmienne na podstawie transportu oraz komunikatu JSON i XML. treści.
  • policy-mashup-cookbook – kompletna aplikacja, która korzysta z kompozycji zasad do wywoływania 2 publiczne interfejsy API, łączą wyniki i generują wzbogaconą odpowiedź dla klienta . Więcej informacji o tym przykładzie znajdziesz w artykule Korzystanie z zasad kompozycji.
  • warunkowe-zasady - Implementuje proste warunkowe egzekwowanie zasad na podstawie wartości zmiennych.

Powiązane artykuły

  • Wszystkie zmienne, które są automatycznie wypełniane przez serwer proxy interfejsu API, znajdują się w sekcji Odniesienie do zmiennych przepływu. Dokumentacja zawiera też informacje o typie i zakresie każdej zmiennej.
  • Aby dowiedzieć się, jakich zmiennych uwzględnia dana zasada, zapoznaj się z dokumentacją tematu zasad. Na przykład zobacz Zmienne przepływu w Dokumentacja zasad dotyczących limitów.