Antipattern: richiamare chiamate API Apigee da un proxy API

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Visualizza Documentazione di Apigee Edge.

Apigee ha una potente utilità chiamata API Apigee che offre servizi come:

  • Deployment o annullamento del deployment dei proxy API
  • Configurazione di host virtuali, archivi chiavi e archivi attendibili e così via
  • Creazione, eliminazione e aggiornamento di entità come mappe chiave-valore (KVM), prodotti API, sviluppatori app, sviluppatori, chiavi utente e così via
  • Recupero delle informazioni su queste entità

Questi servizi sono accessibili tramite un componente chiamato Management Server nella la piattaforma Apigee. Questi servizi possono essere richiamati facilmente con l'aiuto di semplici API chiamate.

A volte potremmo aver bisogno di utilizzare uno o più di questi servizi da proxy API in fase di runtime. Questo è perché entità come KVM, token di accesso OAuth, prodotti API, app per sviluppatori sviluppatori, chiavi utente e così via contengono informazioni utili sotto forma di coppie chiave-valore, o come parte del suo profilo.

Ad esempio, puoi archiviare le seguenti informazioni in una KVM per renderla più sicura accessibili in fase di esecuzione:

  • URL di destinazione backend
  • Proprietà ambiente
  • Credenziali di sicurezza di sistemi backend o di terze parti

Analogamente, potresti voler ricevere l'elenco dei prodotti API o l'indirizzo email dello sviluppatore in fase di runtime. Queste informazioni saranno disponibili nel profilo app sviluppatore.

Tutte queste informazioni possono essere utilizzate efficacemente in fase di runtime per consentire il comportamento dinamico nei criteri o codice personalizzato all'interno di Apigee.

Antipattern

Le API Apigee sono preferite e utili per le attività amministrative e non devono essere utilizzate per l'esecuzione di qualsiasi logica di runtime nel flusso dei proxy API. I motivi sono i seguenti:

  • Utilizzo delle API Apigee per accedere a informazioni sulle entità come KVM, OAuth per i token di accesso o per qualsiasi altro scopo, dai proxy API generano una dipendenza Server
  • I server di gestione non fanno parte dei componenti runtime di Apigee, pertanto potrebbero non essere ad alta disponibilità.
  • Inoltre, potrebbe non essere possibile eseguire il provisioning dei server di gestione all'interno della stessa rete o dello stesso data center. introdurre latenze di rete in fase di runtime.
  • Le voci presenti nei server di gestione vengono memorizzate nella cache per un periodo di tempo più lungo, quindi potresti non essere vedere immediatamente i dati più recenti nei proxy API se esegui scritture e letture in un per un breve periodo di tempo.
  • Aumenta gli hop di rete in fase di runtime.

Nell'esempio di codice seguente, la chiamata API Apigee viene effettuata tramite il codice JavaScript personalizzato per recupera le informazioni dalla KVM:

var response = httpClient.send('https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/keyvaluemaps')

Se il server di gestione non è disponibile, il codice JavaScript che richiama l'API Apigee non va a buon fine. Di conseguenza, la richiesta API non andrà a buon fine.

Impatto

  • Introduce un'ulteriore dipendenza dai server di gestione durante il runtime. Qualsiasi errore nel I server di gestione influiranno sulle chiamate API.
  • Le credenziali utente per le API Apigee devono essere archiviate localmente o in un archivio sicuro ad esempio una KVM criptata.
  • Implicazioni sulle prestazioni dovute alla chiamata al servizio di gestione sulla rete.
  • I valori aggiornati potrebbero non essere visualizzati immediatamente a causa di una scadenza più lunga della cache in Gestione Server

Best practice

Esistono modi più efficaci per recuperare informazioni da entità come KVM, API prodotti, app per sviluppatori, sviluppatori, chiavi consumer e così via in fase di runtime. Ecco alcuni esempi:

  • Utilizza un criterio KeyValueMapOperations per accedere alle informazioni dalle KVM. Ecco un codice campione che mostra come recuperare informazioni dalla KVM:
    <!-- /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>
    
  • Per accedere a informazioni su prodotti basati su API, app per sviluppatori, sviluppatori, chiavi consumer e così via nel proxy API, puoi effettuare una delle seguenti operazioni:
    • Se il tuo flusso proxy API ha un criterio VerifyAPIKey, puoi accedere alle informazioni utilizzando le variabili di flusso compilate come parte di questo criterio. Ecco un codice campione che mostra come recuperare il nome e le informazioni create_by di un'app sviluppatore utilizzando 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"));
      
    • Se il flusso del proxy API non ha un criterioVerifyAPIKey, puoi accedere al profili di prodotti API, app per sviluppatori e così via utilizzando i AccessEntity e ExtractVariables norme:
      1. Recupera il profilo dell'app sviluppatore con il criterio 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. Estrai il valore appId dall'app sviluppatore con il criterio 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>
        

Per approfondire