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

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

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

  • Wdrażanie i wycofywanie wdrożeń serwerów proxy interfejsów API
  • Konfigurowanie hostów wirtualnych, magazynów kluczy i magazynów zaufania itd.
  • Tworzenie, usuwanie lub aktualizowanie encji, takich jak KeyValueMap, produktów API, aplikacji dla programistów, programistów, kluczy klienta itp.
  • Pobieranie informacji o tych elementach

Usługi te są dostępne za pomocą komponentu o nazwie Management Server (Serwer zarządzania) na platformie Apigee Edge. Usługi te można łatwo wywołać za pomocą prostych wywołań interfejsu API zarządzania.

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

Możesz na przykład zapisać w obiekcie KeyValueMap poniższe informacje, aby zwiększyć ich bezpieczeństwo i uzyskać dostęp do nich w czasie działania:

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

Warto też mieć dostęp do listy usług API lub adresu e-mail dewelopera w czasie działania aplikacji. Te informacje będą dostępne w profilu aplikacji dla deweloperów.

Wszystkie te informacje można efektywnie wykorzystywać w czasie działania w celu umożliwienia dynamicznego zachowania w zasadach lub niestandardowego kodu w Apigee Edge.

Antywzór

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

  • Korzystanie z interfejsów API zarządzania do uzyskiwania dostępu do informacji o jednostkach, takich jak KeyValueMap, tokeny dostępu OAuth lub do innych celów z serwerów API Proxies, prowadzi do zależności od serwerów zarządzania.
  • Serwery zarządzania nie są częścią komponentu środowiska wykonawczego Edge i dlatego mogą nie być wysokiej dostępności.
  • Serwery zarządzania mogą też nie być udostępniane w tej samej sieci lub centrum danych i dlatego mogą powodować opóźnienia w sieci w czasie działania.
  • Wpisy na serwerach zarządzania przez dłuższy czas są przechowywane w pamięci podręcznej, więc najnowsze dane mogą nie być widoczne od razu w serwerach proxy interfejsu API, jeśli przeprowadzamy zapisy i odczyty w krótkim czasie.
  • Zwiększa liczbę przeskokó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 obiektu 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 nie może wywołać wywołania interfejsu API zarządzania. To powoduje, że żądanie do interfejsu API kończy się niepowodzeniem.

Wpływ

  • Wprowadza dodatkową zależność od serwerów zarządzania w czasie działania. Wszelkie błędy na serwerach zarządzania będą miały wpływ na wywołania interfejsu API.
  • Dane logowania użytkownika do interfejsów API do zarządzania muszą być przechowywane lokalnie lub w bezpiecznym magazynie, np. zaszyfrowanym KVM.
  • Wpływ na wydajność wynikający z wywoływania usługi zarządzania przez sieć.
  • Zaktualizowane wartości mogą nie być widoczne od razu ze względu na dłuższy okres ważności pamięci podręcznej na serwerach zarządzania.

Sprawdzona metoda

Istnieją skuteczniejsze sposoby pobierania informacji z encji takich jak KeyValueMap, Produkty API, DeveloperApps, Developers, Klucze klienta itp. w czasie działania. Oto kilka przykładów:

  • Użyj zasady KeyValueMapOperations, aby uzyskać dostęp do informacji z KeyValueMap. Oto przykładowy kod, który pokazuje, jak pobierać informacje z obiektu 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 programisty, programistów, kluczach klienta itp. na serwerze proxy interfejsu API, możesz wykonać jedną z tych czynności:
    • Jeśli proces serwera proxy interfejsu API ma 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 za pomocą JavaScriptu pobrać nazwę i informacje create_by aplikacji związanej z deweloperem:
      <!-- /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 VerificationAPIKey, możesz uzyskać dostęp do profili usług API, aplikacji programistycznych itp. za pomocą zasad dotyczących encji dostępu i wyodrębniania zmiennych:
      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 aplikacji DeveloperApp za pomocą zasad 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