Dokumentacja konfiguracji serwera proxy interfejsu API

Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. info

Gdy pracujesz jako deweloper z Apigee Edge, Twoje główne działania związane z programowaniem obejmują konfigurowanie proxy interfejsu API, które działają jako proxy interfejsów API lub usług backendu. Ten dokument zawiera informacje o wszystkich elementach konfiguracji dostępnych podczas tworzenia proxy interfejsów API.

Jeśli uczysz się tworzenia serwerów proxy interfejsu API, zacznij od tematu Tworzenie prostego serwera proxy interfejsu API.

Najczęstsze sposoby edytowania konfiguracji serwera proxy to:

Lokalne programowanie konfiguracji serwera proxy

Możesz pobrać konfiguracje serwera proxy, aby edytować je na komputerze lokalnym. Gdy skończysz, prześlij wyniki do Edge. Dzięki temu możesz zintegrować konfiguracje serwera proxy z kontrolą źródła, wersjonowaniem i innymi udostępnionymi przepływami pracy. Dodatkowo, pracując nad konfiguracją serwera proxy lokalnie, możesz używać własnego edytora XML i narzędzi do weryfikacji.

W tej sekcji opisujemy, jak za pomocą interfejsu pobrać istniejącą konfigurację serwera proxy, edytować ją, a następnie przesłać z powrotem do Edge w celu wdrożenia. Możesz też użyć narzędzia apigeetool, aby pobrać i wdrożyć nową konfigurację serwera proxy (używając odpowiednio poleceń fetchproxydeployproxy).

Aby edytować konfigurację serwera proxy lokalnie za pomocą interfejsu:

  1. Pobierz bieżącą konfigurację serwera proxy w interfejsie Edge. (W widoku Proxy interfejsu API wybierz Projekt > Pobierz wersję).
  2. Na komputerze lokalnym utwórz nowy katalog i rozpakuj do niego pobrany plik ZIP.

    Aby rozpakować plik ZIP, możesz użyć narzędzia takiego jak unzip, jak pokazano w tym przykładzie:

    mkdir myappdir
    unzip ./my-app_app_rev3_2019_04_20.zip -d myappdir

    Rozpakowana zawartość pliku ZIP powinna być podobna do struktury opisanej w sekcji Struktura proxy interfejsu API.

  3. W razie potrzeby zmodyfikuj pliki źródłowe. Opis plików źródłowych w konfiguracji serwera proxy znajdziesz w artykule Pliki konfiguracyjne i struktura katalogów serwera proxy interfejsu API.

    Aby na przykład włączyć monitorowanie stanu w proxy interfejsu API, edytuj plik konfiguracyjny TargetEndpoint w katalogu /apiproxy/targets/. Domyślny plik w tym katalogu to default.xml, ale jeśli używasz warunkowych elementów docelowych, mogą się w nim znajdować pliki o innych nazwach.

    W tym przypadku, jeśli plik konfiguracji TargetEndpoint i jego katalog nie istnieją, utwórz je.

  4. Po zakończeniu edycji plików konfiguracyjnych serwera proxy zapisz zmiany.
  5. Przejdź do nowego katalogu utworzonego podczas rozpakowywania plików ZIP (katalogu głównego rozpakowanych plików konfiguracyjnych).

    Jeśli na przykład rozpakowano pliki do katalogu /myappdir, przejdź do tego katalogu, jak pokazano w tym przykładzie:

    cd myappdir

    Przed ponownym zarchiwizowaniem plików konfiguracyjnych serwera proxy przejdź do tego katalogu, ponieważ nie chcesz, aby katalog /myappdir był uwzględniony w pliku ZIP. Katalog najwyższego poziomu w pliku ZIP musi mieć nazwę /apiproxy.

  6. Ponownie zarchiwizuj pliki konfiguracyjne serwera proxy, w tym nowe lub zmienione pliki. Możesz użyć narzędzia takiego jak zip, jak pokazano w tym przykładzie:
    zip my-new-proxy.zip -r .

    Katalog najwyższego poziomu w pliku ZIP musi mieć nazwę /apiproxy.

    Nazwa pliku ZIP nie musi spełniać żadnych specjalnych wymagań. Nie musisz na przykład zwiększać numeru wersji ani podawać daty w nazwie pliku, ale może to być przydatne podczas debugowania lub kontroli źródła.

    Edge zwiększa numer wersji nowej konfiguracji serwera proxy, gdy ją przesyłasz.

  7. Prześlij nową konfigurację serwera proxy za pomocą interfejsu Edge. (W widoku Proxy interfejsu API wybierz Projekt > Prześlij nową wersję).

    Jeśli pojawi się błąd, np. Bundle is invalid. Empty bundle., sprawdź, czy katalog najwyższego poziomu w pliku ZIP to /apiproxy. Jeśli tak nie jest, ponownie spakuj pliki konfiguracji serwera proxy z katalogu głównego rozwiniętego katalogu.

    Po przesłaniu nowej konfiguracji serwera proxy Edge zwiększa numer wersji i wyświetla go w widoku Podsumowanie wersji.

    Po przesłaniu nowej wersji za pomocą interfejsu Edge nie wdraża jej automatycznie.

  8. Wdróż nową wersję.

Więcej informacji znajdziesz w artykule Tutorial: How to download a proxy using the UI and the management API (Samouczek: jak pobrać serwer proxy za pomocą interfejsu i interfejsu API zarządzania) w społeczności Apigee.

Struktura proxy interfejsu API

Proxy interfejsu API składa się z tej konfiguracji:

Konfiguracja podstawowa Podstawowe ustawienia konfiguracji proxy interfejsu API. Patrz Konfiguracja podstawowa.
Konfiguracja ProxyEndpoint Ustawienia połączenia HTTP przychodzącego (od aplikacji wysyłających żądania do Apigee Edge), przepływów żądań i odpowiedzi oraz załączników zasad. Zobacz ProxyEndpoint.
Konfiguracja TargetEndpoint Ustawienia wychodzącego połączenia HTTP (z Apigee Edge z usługą backendu), przepływy żądań i odpowiedzi oraz załączniki zasad. Zobacz TargetEndpoint.
Flows Potoki żądań i odpowiedzi ProxyEndpoint i TargetEndpoint, do których można dołączyć zasady. Zobacz Przepływy.
Zasady Pliki konfiguracji w formacie XML zgodne ze schematami zasad Apigee Edge. Zobacz zasady.
Materiały Skrypty, pliki JAR i pliki XSLT, do których odwołują się zasady w celu wykonywania niestandardowej logiki. Zobacz Zasoby.

Struktura katalogu proxy interfejsu API i jego zawartość

Komponenty w tabeli powyżej są zdefiniowane przez pliki konfiguracyjne w tej strukturze katalogów:

Wyświetla strukturę katalogów, w której katalogiem głównym jest apiproxy. Bezpośrednio pod katalogiem apiproxy znajdują się katalogi policies, proxies, resources i targets oraz plik weatherapi.xml.

Pliki konfiguracji i struktura katalogów proxy interfejsu API

W tej sekcji wyjaśniamy, czym są pliki konfiguracyjne i struktura katalogów serwera proxy interfejsu API.

Konfiguracja podstawowa

/apiproxy/weatherapi.xml

Podstawowa konfiguracja proxy interfejsu API, która określa jego nazwę. Nazwa musi być unikalna w obrębie organizacji.

Przykładowa konfiguracja:

<APIProxy name="weatherapi">
</APIProxy>

Elementy konfiguracji podstawowej

Nazwa Opis Domyślny Wymagany?
APIProxy
name Nazwa proxy interfejsu API, która musi być unikalna w organizacji. W nazwie możesz używać tylko tych znaków:A-Za-z0-9_- Nie dotyczy Tak
revision Numer wersji konfiguracji proxy interfejsu API. Nie musisz jawnie ustawiać numeru wersji, ponieważ Apigee Edge automatycznie śledzi bieżącą wersję serwera proxy interfejsu API. Nie dotyczy Nie
ConfigurationVersion Wersja schematu konfiguracji serwera proxy API, z którym jest zgodny ten serwer proxy API. Obecnie jedyną obsługiwaną wartością jest majorVersion 4 i minorVersion 0. To ustawienie może być w przyszłości używane do umożliwienia rozwoju formatu proxy interfejsu API. 4.0 Nie
Description Tekstowy opis proxy interfejsu API. Jeśli podasz opis, będzie on wyświetlany w interfejsie zarządzania Edge. Nie dotyczy Nie
DisplayName Przyjazna nazwa, która może się różnić od atrybutu name konfiguracji serwera proxy interfejsu API. Nie dotyczy Nie
Policies Lista zasad w katalogu /policies tego proxy interfejsu API. Ten element jest zwykle widoczny tylko wtedy, gdy serwer proxy interfejsu API został utworzony za pomocą interfejsu zarządzania Edge. Jest to po prostu ustawienie „manifestu”, które ma na celu zapewnienie wglądu w zawartość serwera proxy interfejsu API. Nie dotyczy Nie
ProxyEndpoints Lista punktów końcowych proxy w katalogu /proxies tego proxy interfejsu API. Ten element jest zwykle widoczny tylko wtedy, gdy serwer proxy interfejsu API został utworzony za pomocą interfejsu zarządzania Edge. Jest to po prostu ustawienie „manifestu”, które ma na celu zapewnienie wglądu w zawartość serwera proxy interfejsu API. Nie dotyczy Nie
Resources Lista zasobów (JavaScript, Python, Java, XSLT) w katalogu /resources tego serwera proxy interfejsu API. Ten element jest zwykle widoczny tylko wtedy, gdy serwer proxy interfejsu API został utworzony za pomocą interfejsu zarządzania Edge. Jest to po prostu ustawienie „manifestu”, które ma na celu zapewnienie wglądu w zawartość serwera proxy interfejsu API. Nie dotyczy Nie
Spec Określa specyfikację OpenAPI powiązaną z serwerem proxy interfejsu API. Wartość jest ustawiona na adres URL lub ścieżkę w sklepie ze specyfikacjami.

Uwaga: sklep ze specyfikacjami jest dostępny tylko w nowej wersji Edge. Więcej informacji o sklepie ze specyfikacjami znajdziesz w artykule Zarządzanie specyfikacjami i ich udostępnianie.
Nie dotyczy Nie
TargetServers Lista serwerów docelowych, do których odwołują się punkty końcowe docelowe tego proxy interfejsu API. Ten element jest zwykle widoczny tylko wtedy, gdy serwer proxy interfejsu API został utworzony za pomocą interfejsu zarządzania Edge. Jest to po prostu ustawienie „manifestu”, które ma na celu zapewnienie wglądu w zawartość serwera proxy interfejsu API. Nie dotyczy Nie
TargetEndpoints Lista TargetEndpoints w katalogu /targets tego proxy interfejsu API. Ten element jest zwykle widoczny tylko wtedy, gdy serwer proxy interfejsu API został utworzony za pomocą interfejsu zarządzania Edge. Jest to po prostu ustawienie „manifestu”, które ma na celu zapewnienie wglądu w zawartość serwera proxy interfejsu API. Nie dotyczy Nie

ProxyEndpoint

Na ilustracji poniżej przedstawiono przepływ żądania i odpowiedzi:

Przedstawia klienta wywołującego usługę HTTP. Żądanie przechodzi przez punkt końcowy serwera proxy, a następnie przez docelowy punkt końcowy, zanim zostanie przetworzone przez usługę HTTP. Odpowiedź przechodzi przez docelowy punkt końcowy, a następnie przez punkt końcowy serwera proxy, zanim zostanie zwrócona do klienta.

/apiproxy/proxies/default.xml

Konfiguracja ProxyEndpoint określa interfejs przychodzący (dostępny dla klienta) dla proxy interfejsu API. Konfigurując ProxyEndpoint, ustawiasz konfigurację sieci, która określa, w jaki sposób aplikacje klienckie („aplikacje”) powinny wywoływać interfejs API proxy.

Przykładowa konfiguracja ProxyEndpoint będzie przechowywana w tym miejscu:/apiproxy/proxies

<ProxyEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPProxyConnection>
    <BasePath>/weather</BasePath>
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Wymagane elementy konfiguracji w podstawowym elemencie ProxyEndpoint to:

Konfiguracja ProxyEndpoint Elementy

Nazwa Opis Domyślny Wymagany?
ProxyEndpoint
name Nazwa ProxyEndpoint. Musi być niepowtarzalny w konfiguracji proxy interfejsu API, gdy (w rzadkich przypadkach) zdefiniowanych jest wiele elementów ProxyEndpoint. W nazwie możesz używać tylko tych znaków: A-Za-z0-9._\-$ %. Nie dotyczy Tak
PreFlow Określa zasady w przepływie PreFlow żądania lub odpowiedzi. Nie dotyczy Tak
Flows
Określa zasady w przepływach warunkowych żądania lub odpowiedzi.
Nie dotyczy Tak
PostFlow
Określa zasady w przepływie PostFlow żądania lub odpowiedzi.
Nie dotyczy Tak
HTTPProxyConnection Określa adres sieciowy i ścieżkę URI powiązane z serwerem proxy interfejsu API.
BasePath

Wymagany ciąg znaków, który jednoznacznie identyfikuje ścieżkę URI używaną przez Apigee Edge do kierowania przychodzących wiadomości do odpowiedniego serwera proxy interfejsu API.

BasePath to fragment identyfikatora URI (np. /weather) dołączony do podstawowego adresu URL serwera proxy interfejsu API (np. http://apifactory-test.apigee.net). W danym środowisku BasePath musi być unikalny. Unikalność jest weryfikowana podczas generowania lub importowania serwera proxy interfejsu API.

Używanie symbolu wieloznacznego w ścieżkach podstawowych

W ścieżkach podstawowych serwera proxy interfejsu API możesz używać co najmniej jednego symbolu wieloznacznego „*”. Na przykład ścieżka podstawowa /team/*/members umożliwia klientom wywoływanie https://[host]/team/blue/membershttps://[host]/team/green/members bez konieczności tworzenia nowych serwerów proxy interfejsu API na potrzeby nowych zespołów. Pamiętaj, że /**/ nie jest obsługiwane.

Ważne: Apigee NIE obsługuje używania symbolu wieloznacznego „*” jako pierwszego elementu ścieżki podstawowej. Na przykład to NIE jest obsługiwane: /*/search. Rozpoczynanie ścieżki podstawowej od znaku „*” może prowadzić do nieoczekiwanych błędów ze względu na sposób, w jaki Edge identyfikuje prawidłowe ścieżki.

/ Tak
VirtualHost

Powiązanie proxy interfejsu API z określonymi podstawowymi adresami URL w środowisku. VirtualHost to nazwana konfiguracja, która definiuje co najmniej 1 adres URL środowiska.

Nazwane hosty wirtualne zdefiniowane dla ProxyEndpoint określają domeny i porty, w których jest udostępniany serwer proxy interfejsu API, a tym samym adres URL, którego aplikacje używają do wywoływania serwera proxy interfejsu API.

Domyślnie dla środowiska są zdefiniowane 2 nazwane hosty wirtualne: defaultsecure. Organizacja może też zdefiniować domeny niestandardowe. Aby na przykład mieć pewność, że serwer proxy interfejsu API jest dostępny tylko przez HTTPS, ustaw wartość VirtualHost w HTTPProxyConnection na secure.

domyślna Nie
Properties Zbiór opcjonalnych ustawień konfiguracji HTTP można zdefiniować jako właściwości elementu <ProxyEndpoint>. Nie dotyczy Nie
FaultRules
Określa, jak ProxyEndpoint reaguje na błąd. Reguła błędu określa 2 elementy:
  • Warunek, który określa błąd do obsługi na podstawie wstępnie zdefiniowanej kategorii, podkategorii lub nazwy błędu.
  • Co najmniej 1 zasada, która określa działanie reguły błędu w przypadku odpowiedniego warunku.

Zobacz Postępowanie w przypadku błędów.

Nie dotyczy Nie
DefaultFaultRule

Obsługuje wszystkie błędy (systemowe, transportowe, związane z wiadomościami lub zasadami), które nie są jawnie obsługiwane przez inną regułę błędu.

Zobacz Postępowanie w przypadku błędów.

Nie dotyczy Nie
RouteRule Określa miejsce docelowe przychodzących komunikatów z żądaniami po przetworzeniu przez potok żądań ProxyEndpoint. Zwykle element RouteRule wskazuje nazwaną konfigurację TargetEndpoint, ale może też wskazywać bezpośrednio adres URL.
Name Wymagany atrybut, który zawiera nazwę elementu RouteRule. W nazwie możesz używać tylko tych znaków: A-Za-z0-9._\-$ %. Na przykład Cat2 %_ to imię i nazwisko. Nie dotyczy Tak
Condition Opcjonalna instrukcja warunkowa używana do routingu dynamicznego w czasie działania. Reguły routingu warunkowego są przydatne np. do włączania routingu opartego na treściach w celu obsługi wersji backendu. Nie dotyczy Nie
TargetEndpoint

Opcjonalny ciąg znaków, który identyfikuje nazwaną konfigurację TargetEndpoint. Nazwany punkt końcowy to dowolny punkt końcowy zdefiniowany w tym samym proxy interfejsu API w katalogu /targets.

Nadając nazwę TargetEndpoint, wskazujesz, gdzie mają być przekazywane wiadomości z żądaniami po przetworzeniu przez potok żądań ProxyEndpoint. Pamiętaj, że to ustawienie jest opcjonalne.

ProxyEndpoint może wywoływać adres URL bezpośrednio. Na przykład zasób JavaScript lub Java, pełniący rolę klienta HTTP, może wykonywać podstawowe zadanie TargetEndpoint, czyli przekazywać żądania do usługi backendu.

Nie dotyczy Nie
URL Opcjonalny ciąg znaków, który definiuje wychodzący adres sieciowy wywoływany przez ProxyEndpoint, z pominięciem wszelkich konfiguracji TargetEndpoint, które mogą być przechowywane w /targets. Nie dotyczy Nie

Konfigurowanie reguł routingu

Nazwany TargetEndpoint odnosi się do pliku konfiguracyjnego w /apiproxy/targets, do którego RouteRule przekazuje żądanie po przetworzeniu przez ProxyEndpoint.

Na przykład ta reguła RouteRule odnosi się do konfiguracji /apiproxy/targets/myTarget.xml:

<RouteRule name="default">
  <TargetEndpoint>myTarget</TargetEndpoint>
</RouteRule>

Bezpośrednie wywoływanie adresu URL

ProxyEndpoint może też bezpośrednio wywoływać usługę backendu. Bezpośrednie wywołanie adresu URL pomija każdą konfigurację o nazwie TargetEndpoints w /apiproxy/targets. Z tego powodu TargetEndpoint jest opcjonalną konfiguracją proxy interfejsu API, chociaż w praktyce bezpośrednie wywołanie z ProxyEndpoint nie jest zalecane.

Na przykład ta reguła RouteRule wykonuje wywołanie HTTP do strony http://api.mycompany.com/v2.

<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

Trasy warunkowe

Reguły RouteRules można łączyć w łańcuchy, aby obsługiwać dynamiczne routing w czasie działania. Żądania przychodzące mogą być kierowane do nazwanych konfiguracji TargetEndpoint, bezpośrednio do adresów URL lub do kombinacji tych dwóch elementów na podstawie nagłówków HTTP, treści wiadomości, parametrów zapytania lub informacji kontekstowych, takich jak pora dnia, ustawienia regionalne itp.

Warunkowe reguły RouteRule działają podobnie jak inne instrukcje warunkowe w Apigee Edge. Zobacz Dokumentację warunkówDokumentację zmiennych.

Na przykład poniższa kombinacja RouteRule najpierw ocenia żądanie przychodzące, aby sprawdzić wartość nagłówka HTTP. Jeśli nagłówek HTTP routeTo ma wartość TargetEndpoint1, żądanie jest przekazywane do punktu końcowego TargetEndpoint o nazwie TargetEndpoint1. W przeciwnym razie żądanie przychodzące jest przekazywane do http://api.mycompany.com/v2.

<RouteRule name="MyRoute">
  <Condition>request.header.routeTo = "TargetEndpoint1"</Condition>
  <TargetEndpoint>TargetEndpoint1</TargetEndpoint>
</RouteRule>
<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

Trasy zerowe

Można zdefiniować regułę RouteRule o wartości null, aby obsługiwać scenariusze, w których wiadomość z żądaniem nie musi być przekazywana do TargetEndpoint. Jest to przydatne, gdy ProxyEndpoint wykonuje wszystkie niezbędne operacje, np. za pomocą JavaScriptu wywołuje usługę zewnętrzną lub pobiera dane z wyszukiwania w pamięci klucz/wartość usług API.

Na przykład poniższy kod definiuje pustą trasę:

<RouteRule name="GoNowhere"/>

Warunkowe trasy zerowe mogą być przydatne. W tym przykładzie skonfigurowano trasę o wartości null, która ma być wykonywana, gdy nagłówek HTTP request.header.X-DoNothing ma wartość inną niż null.

<RouteRule name="DoNothingOnDemand">
  <Condition>request.header.X-DoNothing != null</Condition>
</RouteRule>

Pamiętaj, że reguły RouteRules można łączyć w łańcuchy, więc warunkowa trasa null Route będzie zwykle jednym z elementów zestawu reguł RouteRules zaprojektowanego do obsługi routingu warunkowego.

Praktycznym zastosowaniem warunkowej trasy null jest obsługa buforowania. Używając wartości zmiennej ustawionej przez zasadę Cache, możesz skonfigurować serwer proxy interfejsu API tak, aby wykonywał trasę null, gdy wpis jest obsługiwany z pamięci podręcznej.

<RouteRule name="DoNothingUnlessTheCacheIsStale">
  <Condition>lookupcache.LookupCache-1.cachehit is true</Condition>
</RouteRule>

TargetEndpoint

Przedstawia klienta wywołującego usługę HTTP. Żądanie przechodzi przez punkt końcowy serwera proxy, a następnie przez docelowy punkt końcowy, zanim zostanie przetworzone przez usługę HTTP. Odpowiedź przechodzi przez docelowy punkt końcowy, a następnie przez punkt końcowy serwera proxy, zanim zostanie zwrócona do klienta.

Element TargetEndpoint jest odpowiednikiem wychodzącym elementu ProxyEndpoint. TargetEndpoint działa jako klient usługi backendu lub interfejsu API – wysyła żądania i otrzymuje odpowiedzi.

Proxy interfejsu API nie musi mieć żadnych docelowych punktów końcowych. ProxyEndpointy można skonfigurować tak, aby wywoływały adresy URL bezpośrednio. Proxy interfejsu API bez TargetEndpoints zwykle zawiera ProxyEndpoint, który bezpośrednio wywołuje usługę backendu lub jest skonfigurowany do wywoływania usługi za pomocą języka Java lub JavaScript.

Konfiguracja TargetEndpoint

/targets/default.xml

Element TargetEndpoint definiuje połączenie wychodzące z Apigee Edge do innej usługi lub zasobu.

Oto przykładowa konfiguracja TargetEndpoint:

<TargetEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <SSLInfo/>
  </HTTPTargetConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <ScriptTarget/>
  <LocalTargetConnection/>
</TargetEndpoint>

Konfiguracja TargetEndpoint Elementy

Punkt końcowy docelowy może wywoływać cel na jeden z tych sposobów:

  • HTTPTargetConnection na potrzeby wywołań HTTP(S)
  • LocalTargetConnection do łączenia lokalnych serwerów proxy
  • ScriptTarget w przypadku wywołań skryptu Node.js hostowanego na serwerze brzegowym

W obiekcie TargetEndpoint skonfiguruj tylko jedną z tych opcji.

Nazwa Opis Domyślny Wymagany?
TargetEndpoint
name Nazwa TargetEndpoint, która musi być unikalna w konfiguracji proxy interfejsu API. Nazwa TargetEndpoint jest używana w regule RouteRule w ProxyEndpoint do kierowania żądań do przetwarzania wychodzącego. W nazwie możesz używać tylko tych znaków: A-Za-z0-9._\-$ %. Nie dotyczy Tak
PreFlow Określa zasady w przepływie PreFlow żądania lub odpowiedzi. Nie dotyczy Tak
Flows
Określa zasady w przepływach warunkowych żądania lub odpowiedzi.
Nie dotyczy Tak
PostFlow
Określa zasady w przepływie PostFlow żądania lub odpowiedzi.
Nie dotyczy Tak
HTTPTargetConnection

Wraz z elementami podrzędnymi określa dostęp do zasobu backendu za pomocą protokołu HTTP.

Jeśli używasz HTTPTargetConnection, nie konfiguruj innych typów połączeń docelowych (ScriptTarget ani LocalTargetConnection).

URL Określa adres sieciowy usługi backendu, do której punkt końcowy docelowy przekazuje komunikaty żądań. Nie dotyczy Nie
LoadBalancer

Definiuje co najmniej jedną nazwaną konfigurację serwera docelowego. Nazwane konfiguracje TargetServer można używać do równoważenia obciążenia, definiując co najmniej 2 połączenia konfiguracji punktu końcowego.

Możesz też użyć TargetServers, aby oddzielić konfiguracje proxy interfejsu API od konkretnych adresów URL punktów końcowych usługi backendu.

Patrz Równoważenie obciążenia na serwerach backendu.

Nie dotyczy Nie
Properties Zbiór opcjonalnych ustawień konfiguracji HTTP można zdefiniować jako właściwości elementu <TargetEndpoint>. Nie dotyczy Nie
SSLInfo Opcjonalnie możesz zdefiniować ustawienia TLS/SSL w elemencie TargetEndpoint, aby kontrolować połączenie TLS/SSL między serwerem proxy interfejsu API a usługą docelową. Patrz Konfiguracja TLS/SSL TargetEndpoint. Nie dotyczy Nie
LocalTargetConnection Wraz z elementami podrzędnymi określa zasób, do którego można uzyskać dostęp lokalnie, z pominięciem charakterystyki sieci, takiej jak równoważenie obciążenia i procesory wiadomości.

Aby określić zasób docelowy, umieść element podrzędny APIProxy (z elementem ProxyEndpoint) lub element podrzędny Path.

Więcej informacji znajdziesz w artykule Łączenie ze sobą proxy interfejsów API.

Jeśli używasz LocalTargetConnection, nie konfiguruj innych typów połączeń docelowych (HTTPTargetConnection ani ScriptTarget).

APIProxy Określa nazwę proxy interfejsu API, który ma być używany jako cel żądań. Docelowy serwer proxy musi znajdować się w tej samej organizacji i środowisku co serwer proxy wysyłający żądania. Jest to alternatywa dla używania elementu Ścieżka. Nie dotyczy Nie
ProxyEndpoint Używany z APIProxy do określania nazwy ProxyEndpoint docelowego serwera proxy. Nie dotyczy Nie
Path Określa ścieżkę punktu końcowego proxy interfejsu API, który ma być używany jako cel żądań. Docelowy serwer proxy musi znajdować się w tej samej organizacji i środowisku co serwer proxy wysyłający żądania. Jest to alternatywa dla korzystania z interfejsu APIProxy. Nie dotyczy Nie
FaultRules
Określa, jak punkt końcowy docelowy reaguje na błąd. Reguła błędu określa 2 elementy:
  • Warunek, który określa błąd do obsługi na podstawie wstępnie zdefiniowanej kategorii, podkategorii lub nazwy błędu.
  • Co najmniej 1 zasada, która określa działanie reguły błędu w przypadku odpowiedniego warunku.

Zobacz Postępowanie w przypadku błędów.

Nie dotyczy Nie
DefaultFaultRule

Obsługuje wszystkie błędy (systemowe, transportowe, związane z wiadomościami lub zasadami), które nie są jawnie obsługiwane przez inną regułę FaultRule.

Zobacz Postępowanie w przypadku błędów.

Nie dotyczy Nie
ScriptTarget
ResourceURL

Określa typ zasobu (węzeł) i nazwę głównego skryptu Node.js, który implementuje funkcję TargetEndpoint.

<ResourceURL>node://server.js</ResourceURL>

Skrypt musi być dołączony do plików zasobów serwera proxy interfejsu API. Zobacz Dodawanie Node.js do istniejącego proxy interfejsu API.

Jeśli używasz ScriptTarget, nie konfiguruj innych typów połączeń docelowych (HTTPTargetConnection ani LocalTargetConnection).

Nie dotyczy Tak
EnvironmentVariable

Opcjonalnie możesz przekazać zmienne środowiskowe do głównego skryptu Node.js.

Zobacz Understanding Edge support for Node.js modules (w języku angielskim).

Nie dotyczy Nie
Arguments

Opcjonalnie przekaż argumenty do głównego skryptu Node.js.

Zobacz Understanding Edge support for Node.js modules (w języku angielskim).

Nie dotyczy Nie

Konfiguracja TLS/SSL TargetEndpoint

Punkty końcowe docelowe często muszą zarządzać połączeniami HTTPS z różnorodną infrastrukturą backendu. Z tego powodu obsługiwanych jest wiele ustawień konfiguracji TLS/SSL.

TLS/SSL Elementy konfiguracji TargetEndpoint

Nazwa Opis Domyślny Wymagany?
SSLInfo
Enabled Wskazuje, czy protokół TLS/SSL jest włączony dla punktu końcowego. Wartość domyślna to true, jeśli <URL> określa protokół HTTPS, i false, jeśli <URL> określa protokół HTTP. wartość true, jeśli <URL> określa protokół HTTPS; Nie
TrustStore Magazyn kluczy zawierający zaufane certyfikaty serwera. Nie dotyczy Nie
ClientAuthEnabled Ustawienie, które włącza wychodzące uwierzytelnianie klienta (dwukierunkowy protokół TLS/SSL) fałsz Nie
KeyStore magazyn kluczy zawierający klucze prywatne używane do uwierzytelniania klienta w przypadku połączeń wychodzących; Nie dotyczy Tak (jeśli ClientAuthEnabled ma wartość true)
KeyAlias Alias klucza prywatnego używanego do uwierzytelniania klienta wychodzącego Nie dotyczy Tak (jeśli ClientAuthEnabled ma wartość true)
Ciphers

Obsługiwane mechanizmy szyfrowania wychodzącego protokołu TLS/SSL. Jeśli nie określisz żadnych szyfrów, dozwolone będą wszystkie szyfry dostępne w JVM.

Aby ograniczyć szyfry, dodaj te elementy z listą obsługiwanych szyfrów:

<Ciphers>
 <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher>
 <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher>
</Ciphers>
Nie dotyczy Nie
Protocols

Obsługiwane protokoły wychodzące TLS/SSL. Jeśli nie określisz żadnych protokołów, dozwolone będą wszystkie protokoły dostępne dla JVM.

Aby ograniczyć protokoły, dodaj te elementy, podając listę obsługiwanych protokołów:

<Protocols>
 <Protocol>TLSv1.1</Protocol>
 <Protocol>TLSv1.2</Protocol>
</Protocols>
Nie dotyczy Nie
CommonName

Jeśli jest określona, wartość, względem której weryfikowana jest wspólna nazwa certyfikatu docelowego. Ta wartość jest prawidłowa tylko w przypadku konfiguracji TargetEndpoint i TargetServer. Nie jest ona prawidłowa w przypadku konfiguracji VirtualHost.

Domyślnie podana wartość jest dokładnie dopasowywana do nazwy zwyczajowej certyfikatu docelowego. Na przykład użycie wartości *.myhost.com w przypadku elementu <CommonName> spowoduje dopasowanie i zweryfikowanie docelowej nazwy hosta tylko wtedy, gdy dokładna wartość *.myhost.com zostanie określona jako nazwa domeny w certyfikacie docelowym.

Opcjonalnie Apigee może przeprowadzić dopasowanie z użyciem symboli wieloznacznych za pomocą atrybutu wildcardMatch.

Na przykład nazwa pospolita określona jako abc.myhost.com w certyfikacie docelowym zostanie dopasowana i zweryfikowana, jeśli element <CommonName> zostanie określony w ten sposób:

<CommonName wildcardMatch="true">*.myhost.com</CommonName>
Nie dotyczy Nie

Przykładowy TargetEndpoint z włączonym uwierzytelnianiem klienta wychodzącego

<TargetEndpoint name="default">
  <HttpTargetConnection>
        <URL>https://myservice.com</URL>
    <SSLInfo>
      <Enabled>true</Enabled>
      <ClientAuthEnabled>true</ClientAuthEnabled>
      <KeyStore>myKeystore</KeyStore>
      <KeyAlias>myKey</KeyAlias>
      <TrustStore>myTruststore</TrustStore>
    </SSLInfo>
  </HttpTargetConnection>
</TargetEndpoint>

Szczegółowe instrukcje znajdziesz w artykule Konfigurowanie protokołu TLS od brzegu sieci do backendu (chmura i chmura prywatna).

Używanie zmiennych przepływu do dynamicznego ustawiania wartości TLS/SSL

Możesz też dynamicznie ustawiać szczegóły TLS/SSL, aby obsługiwać elastyczne wymagania środowiska wykonawczego. Jeśli na przykład Twój serwer proxy łączy się z 2 potencjalnie różnymi celami (testowym i produkcyjnym), możesz skonfigurować serwer proxy interfejsu API tak, aby programowo wykrywał, które środowisko wywołuje, i dynamicznie ustawiał odwołania do odpowiedniego magazynu kluczy i magazynu zaufanych certyfikatów. Więcej informacji o tym scenariuszu i przykłady wdrożonych serwerów proxy interfejsu API znajdziesz w tym artykule w społeczności Apigee: Dynamic SSLInfo for TargetEndpoint using variable reference (Dynamiczne informacje SSL dla TargetEndpoint przy użyciu odwołania do zmiennej).

W tym przykładzie pokazującym, jak tag <SSLInfo> jest ustawiany w konfiguracji TargetEndpoint, wartości mogą być podawane w czasie działania, np. przez wywołanie Java Callout, zasadę JavaScript lub zasadę Assign Message. Użyj zmiennych wiadomości, które zawierają wartości, jakie chcesz ustawić.

Zmienne są dozwolone tylko w tych elementach:

<SSLInfo>
    <Enabled>{myvars.ssl.enabled}</Enabled>
    <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
    <KeyStore>{myvars.ssl.keystore}</KeyStore>
    <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
    <TrustStore>{myvars.ssl.trustStore}</TrustStore>
</SSLInfo>

Używanie odwołań do dynamicznego ustawiania wartości TLS/SSL

Podczas konfigurowania TargetEndpoint, który używa protokołu HTTPS, musisz wziąć pod uwagę sytuację, w której wygasa certyfikat TLS/SSL lub zmiana konfiguracji systemu wymaga zaktualizowania certyfikatu. W przypadku instalacji Edge for Private Cloud podczas konfigurowania protokołu TLS/SSL za pomocą wartości statycznych lub zmiennych przepływu może być konieczne ponowne uruchomienie procesorów wiadomości.

Więcej informacji znajdziesz w artykule Aktualizowanie certyfikatu TLS.

Możesz jednak opcjonalnie skonfigurować TargetEndpoint tak, aby zamiast tego używał odwołania do magazynu kluczy lub magazynu zaufanych certyfikatów. Zaletą korzystania z odwołania jest to, że możesz je zaktualizować, aby wskazywało inny magazyn kluczy lub magazyn zaufanych certyfikatów. Dzięki temu zaktualizujesz certyfikat TLS/SSL bez konieczności ponownego uruchamiania procesorów wiadomości.

Poniżej znajdziesz przykład TargetEndpoint, który korzysta z odwołania do magazynu kluczy:

<SSLInfo>
    <Enabled>true</Enabled>
    <ClientAuthEnabled>false</ClientAuthEnabled>
    <KeyStore>ref://keystoreref</KeyStore>
    <KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>

Aby utworzyć odwołanie o nazwie keystoreref, użyj tego wywołania interfejsu API POST:

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
-d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:password

Odwołanie określa nazwę magazynu kluczy i jego typ.

Aby wyświetlić odwołanie, użyj tego wywołania interfejsu API GET:

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

Aby później zmienić odwołanie tak, aby wskazywało inny magazyn kluczy, upewnij się, że alias ma taką samą nazwę, i użyj tego wywołania PUT:

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
-d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:password

TargetEndpoint z docelowym równoważeniem obciążenia

Obiekty TargetEndpoint obsługują równoważenie obciążenia na wielu nazwanych serwerach docelowych przy użyciu 3 algorytmów równoważenia obciążenia.

Szczegółowe instrukcje znajdziesz w artykule Równoważenie obciążenia na serwerach backendu.

Zasady

Katalog /policies w proxy interfejsu API zawiera wszystkie zasady, które można dołączyć do przepływów w proxy interfejsu API.

Elementy konfiguracji zasad

Nazwa Opis Domyślny Wymagany?
Policy
name

Wewnętrzna nazwa zasady. Znaki, których możesz użyć w nazwie, są ograniczone do: A-Za-z0-9._\-$ %. Interfejs zarządzania Edge wymusza jednak dodatkowe ograniczenia, takie jak automatyczne usuwanie znaków, które nie są alfanumeryczne.

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

Ustaw wartość true, aby wymusić stosowanie zasady.

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

prawda Nie
continueOnError

Ustaw wartość false, aby zwracać błąd, gdy zasada nie działa. Jest to prawidłowe działanie w przypadku większości zasad.

Ustaw wartość true, aby wykonywanie przepływu było kontynuowane nawet po niepowodzeniu zasady.

fałsz Nie
async

Uwaga: ten atrybut nie powoduje asynchronicznego wykonywania zasady. W większości przypadków pozostaw wartość domyślną false.

Jeśli ta zasada ma wartość true, wykonywanie zasad jest przenoszone do innego wątku, dzięki czemu wątek główny może obsługiwać dodatkowe żądania. Po zakończeniu przetwarzania offline wątek główny wraca i kończy obsługę przepływu wiadomości. W niektórych przypadkach ustawienie wartości asynchronicznej na true poprawia wydajność serwera proxy interfejsu API. Jednak nadmierne używanie funkcji asynchronicznych może pogorszyć wydajność z powodu zbyt częstego przełączania wątków.

Informacje o korzystaniu z asynchronicznego działania w proxy interfejsu API znajdziesz w artykule Model obiektów JavaScript.

fałsz Nie

Załącznik do zasad

Na tym obrazie widać sekwencję wykonywania przepływów serwera proxy interfejsu API:

pokazuje klienta wywołującego usługę HTTP. Żądanie napotyka ProxyEndpoint i TargetEndpoint, które zawierają kroki wywołujące zasady. Gdy usługa HTTP zwróci odpowiedź, jest ona przetwarzana przez TargetEndpoint, a następnie przez ProxyEndpoint, zanim zostanie zwrócona do klienta. Podobnie jak w przypadku żądania, odpowiedź jest przetwarzana przez zasady w ramach poszczególnych kroków.

Jak widać powyżej:

Zasady są dołączane jako etapy przetwarzania do przepływów. Nazwa zasady służy do odwoływania się do zasady, która ma być egzekwowana jako krok przetwarzania. Załącznik do zasad ma następujący format:

<Step><Name>MyPolicy</Name></Step>

Zasady są egzekwowane w kolejności, w jakiej zostały dołączone do przepływu. Na przykład:

<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>

Konfiguracja załącznika zasad Elementy

Nazwa Opis Domyślny Wymagany?
Step
Name Nazwa zasady, która ma być wykonywana przez tę definicję kroku. Nie dotyczy Tak
Condition Instrukcja warunkowa, która określa, czy zasada jest egzekwowana. Jeśli zasada ma powiązany warunek, jest wykonywana tylko wtedy, gdy instrukcja warunkowa przyjmuje wartość true. Nie dotyczy Nie

Przepływy

Elementy ProxyEndpoint i TargetEndpoint definiują potok przetwarzania wiadomości żądań i odpowiedzi. Potok przetwarzania składa się z przepływu żądania i przepływu odpowiedzi. Każdy przepływ żądania i przepływ odpowiedzi jest podzielony na PreFlow, co najmniej 1 opcjonalny przepływ „warunkowy” lub „nazwany” oraz PostFlow.

  • PreFlow: zawsze się wykonuje. Wykonuje się przed wszystkimi przepływami warunkowymi.
  • PostFlow: zawsze się wykonuje. Jest wykonywany po wszystkich przepływach warunkowych.

Możesz też dodać do ProxyEndpoint element PostClientFlow, który jest wykonywany po zwróceniu odpowiedzi do aplikacji klienta wysyłającej żądanie. Do tego przepływu można dołączyć tylko zasady MessageLogging i rozszerzenie Google Stackdriver Logging. PostClientFlow zmniejsza opóźnienie serwera proxy interfejsu API i udostępnia informacje do rejestrowania, które nie są obliczane, dopóki odpowiedź nie zostanie zwrócona do klienta, np. client.sent.start.timestampclient.sent.end.timestamp. Ten przepływ jest używany głównie do pomiaru przedziału czasu między sygnaturami czasowymi początku i końca wiadomości z odpowiedzią.

Obejrzyj krótki film z instrukcjami

Film: obejrzyj ten krótki film o używaniu funkcji Message Logging w ramach PostClientFlow.

Oto przykład PostClientFlow z dołączoną zasadą rejestrowania wiadomości.

    ...
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <PostClientFlow>
        <Request/>
        <Response>
            <Step>
                <Name>Message-Logging-1</Name>
            </Step>
        </Response>
    </PostClientFlow>
    ...

Potok przetwarzania serwera proxy interfejsu API wykonuje przepływy w tej kolejności:

Potok żądań:

  1. Wstępny przepływ żądania serwera proxy
  2. Przepływy warunkowe żądań proxy (opcjonalnie)
  3. Proxy Request PostFlow
  4. Target Request PreFlow
  5. Kierowanie żądań na przepływy warunkowe (opcjonalnie)
  6. Target Request PostFlow

Potok odpowiedzi:

  1. Docelowy przepływ wstępny odpowiedzi
  2. Docelowe przepływy warunkowe odpowiedzi (opcjonalnie)
  3. Target Response PostFlow
  4. Proxy Response PreFlow
  5. Warunkowe przepływy odpowiedzi serwera proxy (opcjonalnie)
  6. Proxy Response PostFlow
  7. Odpowiedź PostClientFlow (opcjonalnie)

W konfiguracjach ProxyEndpoint lub TargetEndpoint należy skonfigurować tylko te przepływy, które mają załączone zasady. Elementy PreFlow i PostFlow muszą być określone w konfiguracji ProxyEndpoint lub TargetEndpoint tylko wtedy, gdy zasady muszą być egzekwowane podczas przetwarzania PreFlow lub PostFlow.

W przeciwieństwie do przepływów warunkowych kolejność elementów PreFlow i PostFlow nie ma znaczenia – serwer proxy interfejsu API zawsze wykonuje każdy z nich w odpowiednim momencie potoku, niezależnie od tego, gdzie pojawiają się w konfiguracji punktu końcowego.

Przepływy warunkowe

ProxyEndpoints i TargetEndpoints obsługują nieograniczoną liczbę przepływów warunkowych (zwanych też „nazwanymi przepływami”).

Serwer proxy interfejsu API sprawdza warunek określony w przepływie warunkowym, a jeśli warunek jest spełniony, wykonuje kroki przetwarzania w przepływie warunkowym. Jeśli warunek nie zostanie spełniony, kroki przetwarzania w przepływie warunkowym zostaną pominięte. Przepływy warunkowe są oceniane w kolejności zdefiniowanej w proxy interfejsu API. Wykonywany jest pierwszy przepływ, którego warunek jest spełniony.

Definiując przepływy warunkowe, możesz stosować kroki przetwarzania w proxy interfejsu API na podstawie:

  • Identyfikator URI żądania
  • Czasownik HTTP (GET/PUT/POST/DELETE)
  • Wartość parametru zapytania, nagłówka i parametru formularza
  • wiele innych rodzajów warunków.

Na przykład ten warunkowy przepływ określa, że jest wykonywany tylko wtedy, gdy ścieżka zasobu żądania to /accesstoken. Każde żądanie przychodzące ze ścieżką /accesstoken powoduje wykonanie tego przepływu wraz z zasadami do niego dołączonymi. Jeśli ścieżka żądania nie zawiera sufiksu /accesstoken, przepływ nie zostanie wykonany (chociaż może zostać wykonany inny przepływ warunkowy).

<Flows>
  <Flow name="TokenEndpoint">
    <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
    <Request>
      <Step>
        <Name>GenerateAccessToken</Name>
      </Step>
    </Request>
  </Flow>
</Flows>

Elementy konfiguracji przepływu

Nazwa Opis Domyślny Wymagany?
Flow Potok przetwarzania żądań lub odpowiedzi zdefiniowany przez ProxyEndpoint lub TargetEndpoint
Name Unikalna nazwa procesu. Nie dotyczy Tak
Condition Instrukcja warunkowa, która sprawdza, czy co najmniej 1 zmienna ma wartość prawda lub fałsz. Wszystkie przepływy inne niż predefiniowane typy PreFlow i PostFlow muszą określać warunek wykonania. Nie dotyczy Tak
Request Potok powiązany z przetwarzaniem wiadomości z żądaniem Nie dotyczy Nie
Response Potok powiązany z przetwarzaniem wiadomości z odpowiedzią Nie dotyczy Nie

Przetwarzanie krokowe

Kolejność warunkowych przepływów jest wymuszana przez Apigee Edge. Przepływy warunkowe są wykonywane od góry do dołu. Pierwszy przepływ warunkowy, którego warunek przyjmuje wartość true, jest wykonywany tylko raz.

Na przykład w tej konfiguracji przepływu każde żądanie przychodzące, które nie zawiera sufiksu ścieżki /first ani /second, spowoduje wykonanie ThirdFlow, co wymusi zastosowanie zasad o nazwie Return404.

<Flows>
  <Flow name="FirstFlow">
    <Condition>proxy.pathsuffix MatchesPath "/first"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="SecondFlow">
    <Condition>proxy.pathsuffix MatchesPath "/second"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
      <Step><Name>SecondPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="ThirdFlow">
    <Request>
      <Step><Name>Return404</Name></Step>
    </Request>
  </Flow>
</Flows>

Zasoby

„Zasoby” (pliki zasobów do użycia w proxy interfejsu API) to skrypty, kod i transformacje XSL, które można dołączać do przepływów za pomocą zasad. Pojawiają się one w sekcji „Skrypty” edytora proxy interfejsu API w interfejsie zarządzania.

Obsługiwane typy zasobów znajdziesz w sekcji Pliki zasobów.

Zasoby mogą być przechowywane w proxy interfejsu API, środowisku lub organizacji. W każdym przypadku zasób jest przywoływany w zasadach za pomocą nazwy. Usługi API rozwiązują nazwę, przechodząc od proxy interfejsu API do środowiska i poziomu organizacji.

Do zasobu przechowywanego na poziomie organizacji można się odwoływać w zasadach w dowolnym środowisku. Do zasobu przechowywanego na poziomie środowiska mogą odwoływać się zasady w tym środowisku. Zasób przechowywany na poziomie proxy interfejsu API może być używany tylko przez zasady w tym proxy interfejsu API.