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

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

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

  • wdrażanie i wycofywanie wdrożenia proxy interfejsu API;
  • konfigurowanie hostów wirtualnych, magazynów kluczy, magazynów zaufanych certyfikatów itp.;
  • tworzenie, usuwanie i aktualizowanie encji, takich jak KeyValueMaps, produkty API, aplikacje deweloperskie, deweloperzy, klucze konsumenckie itp.;
  • pobieranie informacji o tych encjach.

Te usługi są udostępniane za pomocą komponentu o nazwie serwer zarządzania na platformie Apigee Edge. Można je łatwo wywołać za pomocą prostych wywołań interfejsu API zarządzania.

Czasami może być konieczne użycie jednej lub kilku z tych usług z proxy interfejsu API w czasie działania. Dzieje się tak, ponieważ encje takie jak KeyValueMaps, tokeny dostępu OAuth, produkty API, aplikacje deweloperskie, deweloperzy, klucze konsumenckie itp. zawierają przydatne informacje w postaci par klucz-wartość, atrybutów niestandardowych lub w ramach profilu.

W KeyValueMap możesz na przykład przechowywać te informacje, aby zwiększyć ich bezpieczeństwo i dostępność w czasie działania:

  • docelowe adresy URL backendu;
  • właściwości środowiska;
  • dane uwierzytelniające backendu lub systemów innych firm.

Podobnie w czasie działania możesz chcieć uzyskać listę produktów API lub adres e-mail dewelopera. Te informacje będą dostępne w profilu aplikacji deweloperskich.

Wszystkie te informacje można efektywnie wykorzystywać w czasie działania, aby włączyć dynamiczne działanie w zasadach lub kodzie niestandardowym w Apigee Edge.

Antywzorzec

Interfejsy API zarządzania są preferowane i przydatne w przypadku zadań administracyjnych i nie powinny być używane do wykonywania logiki w czasie działania w przepływie proxy interfejsu API. Dzieje się tak, ponieważ:

  • używanie interfejsów API zarządzania do uzyskiwania dostępu do informacji o encjach, takich jak KeyValueMaps, tokeny dostępu OAuth tokeny dostępu lub do innych celów z proxy interfejsu API prowadzi do zależności od serwerów zarządzania serwerów;
  • serwery zarządzania nie są częścią komponentu środowiska wykonawczego Edge i dlatego mogą nie być wysoce dostępne;
  • serwery zarządzania mogą też nie być udostępniane w tej samej sieci lub centrum danych, co może powodować opóźnienia w sieci w czasie działania;
  • wpisy na serwerach zarządzania są buforowane przez dłuższy czas, więc możemy nie widzieć najnowszych danych w proxy interfejsu API, jeśli wykonujemy zapisy i odczyty w krótkim czasie;
  • zwiększa liczbę przeskoków w sieci w czasie działania.

W przykładowym kodzie poniżej wywołanie interfejsu API zarządzania jest wykonywane za pomocą niestandardowego kodu JavaScript w celu pobrania informacji 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 działa. Powoduje to niepowodzenie żądania do interfejsu API.

Wpływ

  • Wprowadza dodatkową zależność od serwerów zarządzania w czasie działania. Każda awaria serwerów zarządzania będzie miała wpływ na wywołania interfejsu API.
  • Dane uwierzytelniające użytkownika w interfejsach API zarządzania muszą być przechowywane lokalnie lub w bezpiecznym magazynie takim jak zaszyfrowany KVM.
  • Wpływ na wydajność spowodowany wywoływaniem usługi zarządzania przez sieć.
  • Z powodu dłuższego czasu wygaśnięcia pamięci podręcznej na serwerach zarządzania zaktualizowane wartości mogą nie być widoczne od razu.

Sprawdzona metoda

Istnieją skuteczniejsze sposoby pobierania informacji z encji, takich jak KeyValueMaps, produkty API, aplikacje deweloperskie, deweloperzy, klucze konsumenckie itp., w czasie działania. Oto kilka przykładów:

  • Aby uzyskać dostęp do informacji z KeyValueMaps, użyj zasady 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 produktach API, aplikacjach deweloperskich, deweloperach, kluczach konsumenckich itp. w proxy interfejsu API, możesz wykonać jedną z tych czynności:
    • Jeśli przepływ proxy interfejsu API zawiera zasadę VerifyAPIKey, możesz uzyskać dostęp do informacji za pomocą zmiennych przepływu wypełnianych w ramach tej zasady. Oto przykładowy kod, który pokazuje jak pobrać nazwę i informacje o utworzeniu aplikacji deweloperskiej za pomocą JavaScript:
      <!-- /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 przepływ proxy interfejsu API nie zawiera zasady VerifyAPIKey, możesz uzyskać dostęp do profili produktów API, aplikacji deweloperskich itp. za pomocą zasad AccessEntity i ExtractVariables policies:
      1. Pobierz profil DeveloperApp za pomocą 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ą zasady ExtractVariables:
        <!-- /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