Antywzór: wywoływanie wywołań interfejsu API zarządzania z serwera proxy interfejsu API

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

Edge ma zaawansowane narzędzie o nazwie „interfejsy API do zarządzania”, które oferuje takie usługi jak:

  • Wdrażanie lub wycofanie serwerów proxy interfejsów API
  • Konfigurowanie hostów wirtualnych, magazynów kluczy, magazynów zaufania itp.
  • Tworzenie, usuwanie lub aktualizowanie encji, takich jak KeyValueMaps, Usługi API, Programista Aplikacje, programiści, klucze klienta itp.
  • Pobieranie informacji o tych jednostkach

Te usługi są dostępne za pomocą komponentu o nazwie Management Server na platformie Apigee Edge. Te usługi można łatwo wywołać za pomocą prostego interfejsu API do zarządzania połączeń.

Czasami może być konieczne użycie jednej lub kilku z tych usług z serwerów proxy interfejsów API w czasie działania. To jest ponieważ encje takie jak KeyValueMaps, OAuth Access Tokens, API Products, Developer Apps Programiści, klucze klienta itp. zawierają przydatne informacje w postaci par klucz-wartość, lub jako część jego profilu.

Możesz na przykład zapisać poniższe informacje w kluczu KeyValueMap, aby były bezpieczniejsze dostępne w czasie działania:

  • Docelowe adresy URL backendu
  • Właściwości środowiska
  • Dane uwierzytelniające systemu backendu lub systemów innych firm

Podobnie możesz zechcieć pobrać listę usług API lub adres e-mail dewelopera w czasie działania. Te informacje będą dostępne w ramach profilu aplikacji dewelopera.

Wszystkie te informacje można efektywnie wykorzystać w czasie działania, aby umożliwić dynamiczne zachowanie zasad. lub niestandardowy kod w Apigee Edge.

antywzorzec

Interfejsy API do zarządzania są preferowane i przydatne do zadań administracyjnych. Nie należy ich używać do: wykonywania dowolnej logiki środowiska wykonawczego w przepływie serwerów proxy interfejsów API. Dzieje się tak, ponieważ:

  • Uzyskiwanie dostępu do informacji o encjach, takich jak KeyValueMaps, OAuth Tokeny dostępu lub inne cele z serwerów proxy interfejsów API wymagają zależności od funkcji zarządzania Serwery.
  • Serwery zarządzania nie są częścią środowiska wykonawczego Edge i dlatego mogą nie być o wysokiej dostępności.
  • Serwery zarządzania nie mogą być też udostępniane w tej samej sieci lub centrum danych i mogą dlatego wprowadzamy opóźnienia sieciowe w czasie działania.
  • Wpisy na serwerach zarządzania są przechowywane w pamięci podręcznej przez dłuższy czas, więc dane mogą nie być najnowsze dane są widoczne natychmiast na serwerach proxy interfejsów API, jeśli wykonamy zapisy i odczyty w w krótkim czasie.
  • Zwiększa liczbę skoków sieci w czasie wykonywania.

W poniższym przykładzie kodu wywołanie interfejsu API zarządzania jest wykonywane za pomocą niestandardowego kodu JavaScript, aby pobierz informacje z KeyValueMap:

var response = httpClient.send('https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/keyvaluemaps/kvm_name')

Jeśli serwer zarządzania jest niedostępny, kod JavaScript wywołujący interfejs API zarządzania nie uda się nawiązać połączenia. W efekcie żądanie do interfejsu API kończy się niepowodzeniem.

Wpływ

  • Zapewnia dodatkową zależność od serwerów zarządzania podczas działania środowiska wykonawczego. Wszystkie błędy dotyczące Serwery zarządzania będą miały wpływ na wywołania interfejsu API.
  • Dane uwierzytelniające użytkownika do interfejsów API do zarządzania muszą być przechowywane lokalnie lub w bezpiecznym miejscu, takim jak szyfrowana pamięć KVM.
  • Wpływ na wydajność usługi zarządzania przez sieć.
  • Zaktualizowane wartości mogą nie być widoczne od razu ze względu na dłuższy czas wygaśnięcia pamięci podręcznej w zarządzaniu serwerów.

Sprawdzona metoda

Istnieją bardziej efektywne sposoby pobierania informacji od podmiotów, takich jak KeyValueMaps, API Products, DeveloperApps, Developers, Consumer Keys itd. Oto kilka przykładów:

  • Aby uzyskać dostęp do informacji z KeyValueMaps, użyj zasad KeyValueMapOperations. Oto przykładowy kod , który pokazuje, jak pobrać informacje z KeyValueMap:
    <!-- /antipatterns/examples/2-6.xml -->
    <KeyValueMapOperations mapIdentifier="urlMap" async="false"
        continueOnError="false" enabled="true" name="GetURLKVM">
      <DisplayName>GetURLKVM</DisplayName>
      <ExpiryTimeInSecs>86400</ExpiryTimeInSecs>
      <Scope>environment</Scope>
      <Get assignTo="urlHosti" index="2">
        <Key>
          <Parameter>urlHost_1</Parameter>
        </Key>
      </Get>
    </KeyValueMapOperations>
    
  • Aby uzyskać dostęp do informacji o usługach API, aplikacjach programistów, programistach, kluczach klienta itp. na serwerze proxy interfejsu API wykonaj jedną z tych czynności:
    • Jeśli przepływ danych przez interfejs API jest objęty zasadą weryfikacji klucza API, możesz uzyskać dostęp do informacji, korzystając z zmiennych przepływu danych wypełnionych w ramach tej zasady. Oto przykładowy kod, który pokazuje, Jak za pomocą JavaScriptu pobrać nazwę i informacje o aplikacji create_by:
      <!-- /antipatterns/examples/2-7.xml -->
      print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name"));
      print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
      
    • Jeśli w przepływie serwera proxy interfejsu API nie ma zasady VerifyAPIKey, możesz uzyskać dostęp do profili usług API, aplikacji programistów itd. przy użyciu jednostki dostępu i zmiennych wyodrębniania. zasady:
      1. Pobierz profil DeveloperApp przy użyciu zasady AccessEntity:
        <!-- /antipatterns/examples/2-8.xml -->
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <AccessEntity async="false" continueOnError="false" enabled="true" name="GetDeveloperApp">
          <DisplayName>GetDeveloperApp</DisplayName>
          <EntityType value="app"></EntityType>
          <EntityIdentifier ref="developer.app.name" type="appname"/>
          <SecondaryIdentifier ref="developer.id" type="developerid"/>
        </AccessEntity>
        
      2. Wyodrębnij appId z DeveloperApp za pomocą wyodrębniania zasadyWyodrębnianie zmiennych:
        <!-- /antipatterns/examples/2-9.xml -->
        <ExtractVariables name="Extract-Developer App-Info">
          <!--
            The source element points to the variable populated by AccessEntity policy.
            The format is <policy-type>.<policy-name>
            In this case, the variable contains the whole developer profile.
          -->
          <Source>AccessEntity.GetDeveloperApp"</Source>
          <VariablePrefix>developerapp</VariablePrefix>
          <XMLPayload>
            <Variable name="appld" type="string">
              <!-- You parse elements from the developer profile using XPath. -->
              <XPath>/App/AppId</XPath>
            </Variable>
          </XMLPayload>
        </ExtractVariables>
        

Więcej informacji