Antipatrón: Invoca llamadas a la API de Management desde un proxy de API

Estás viendo la documentación de Apigee Edge.
Ve a la Documentación de Apigee X.
información

Edge cuenta con una utilidad potente llamada “APIs de administración”, que ofrece servicios como los siguientes:

  • Implementa o anula la implementación de proxies de API
  • Configuración de hosts virtuales, almacenes de claves y almacenes de confianza, etcétera
  • Crear, borrar o actualizar entidades como KeyValueMaps, productos de API, desarrolladores Apps, desarrolladores, claves de consumidor, etcétera
  • Recupera información sobre estas entidades

Se puede acceder a estos servicios mediante un componente llamado servidor de administración en la plataforma de Apigee Edge. Estos servicios se pueden invocar fácilmente con la ayuda de la API de Simple Management llamadas.

A veces es posible que necesitemos usar uno o más de estos servicios de proxy de API en el entorno de ejecución. Este es porque las entidades como KeyValueMaps, los tokens de acceso de OAuth, los productos de API, las apps de desarrollador, Los desarrolladores, las claves de consumidor, etc. contienen información útil en forma de pares clave-valor, claves de atributos o como parte de su perfil.

Por ejemplo, puedes almacenar la siguiente información en KeyValueMap para que sea más segura y accesible en el entorno de ejecución:

  • URLs de destino de backend
  • Propiedades de los entornos
  • Credenciales de seguridad de backend o sistemas de terceros

Del mismo modo, es posible que desees obtener la lista de productos de API o la dirección de correo electrónico del desarrollador en el tiempo de ejecución. Esta información estará disponible como parte del perfil de apps de desarrollador.

Toda esta información se puede usar de manera eficaz en el entorno de ejecución para habilitar el comportamiento dinámico en las políticas o el código personalizado dentro de Apigee Edge.

Antipatrón

Se prefieren las API de administración, que son útiles para tareas administrativas, y no deben usarse para realizar cualquier lógica de tiempo de ejecución en el flujo de proxies de API. Esto se debe a los siguientes motivos:

  • Uso de las APIs de administración para acceder a la información sobre las entidades como KeyValueMaps y OAuth El acceso a tokens o cualquier otro propósito desde los proxies de API genera dependencia de la administración. Servidores.
  • Los servidores de administración no forman parte del componente del entorno de ejecución de Edge y, por lo tanto, es posible que no tengan alta disponibilidad.
  • Es posible que los servidores de administración no se aprovisionen dentro de la misma red o centro de datos y, por lo tanto, pueden ingresar latencias de red en el entorno de ejecución.
  • Las entradas en los servidores de gestión se almacenan en caché durante un período de tiempo más prolongado, así que es posible que no estemos ver los datos más recientes de inmediato en los proxies de API si realizamos operaciones de escritura y lectura en un breve período de tiempo.
  • Aumenta los saltos de red en el entorno de ejecución.

En la siguiente muestra de código, la llamada a la API de administración se realiza a través del código JavaScript personalizado para recuperar la información de KeyValueMap:

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

Si el servidor de administración no está disponible, el código JavaScript que invoca a la API de administración la llamada falla. Esto provoca que la solicitud a la API falle.

Impacto

  • Genera dependencia adicional de los servidores de administración durante el tiempo de ejecución. Cualquier falla en Los servidores de administración afectarán las llamadas a la API.
  • Las credenciales de usuario para las APIs de administración deben almacenarse de forma local o en algún almacén seguro como KVM encriptado.
  • Consecuencias para el rendimiento debido a la invocación del servicio de administración por medio de la red
  • Es posible que no veas los valores actualizados de inmediato debido al vencimiento más largo de la caché en los servidores de administración.

Práctica recomendada

Hay formas más eficaces de recuperar información de entidades como KeyValueMaps, la API Productos, DeveloperApps, desarrolladores, claves de consumidor, etc. en el tiempo de ejecución. Estos son algunos ejemplos:

  • Usa una política KeyValueMapOperations para acceder a la información de KeyValueMaps. Este es un ejemplo de código que muestra cómo recuperar información de 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>
    
  • A fin de acceder a la información sobre productos de API, apps para desarrolladores, desarrolladores, claves de consumidor, etc. en el proxy de API, puedes realizar una de las siguientes acciones:
    • Si tu flujo de proxy de API tiene una política VerifyAPIKey, puedes acceder a la información mediante las variables de flujo propagadas como parte de esta política. A continuación, se muestra un código de muestra que indica cómo recuperar la información de nombre y created_by de una app de desarrolladores mediante 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"));
      
    • Si tu flujo del proxy de API no tiene una política VerifyAPIKey, puedes acceder a la perfiles de productos de API, apps de desarrollador, etc. con la entidad de acceso y las variables de extracción políticas:
      1. Recupera el perfil de DeveloperApp con la política 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. Extrae el appId de DeveloperApp con la política 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>
        

Lecturas adicionales