Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
Apigee tiene una potente utilidad llamada API de Apigee que ofrece servicios como los siguientes:
- Desplegar o anular el despliegue de proxies de APIs
- Configurar hosts virtuales, almacenes de claves y almacenes de confianza, etc.
- Crear, eliminar y actualizar entidades, como mapas de clave-valor (KVM), productos de API, aplicaciones para desarrolladores, desarrolladores, claves de consumidor, etc.
- Obtener información sobre estas entidades
Se puede acceder a estos servicios a través de un componente llamado Servidor de gestión en la plataforma Apigee. Estos servicios se pueden invocar fácilmente con la ayuda de llamadas de API sencillas.
En ocasiones, es posible que tengamos que usar uno o varios de estos servicios desde proxies de API en el tiempo de ejecución. Esto se debe a que las entidades, como las KVMs, los tokens de acceso de OAuth, los productos de API, las aplicaciones de desarrollador, los desarrolladores, las claves de consumidor, etc., contienen información útil en forma de pares clave-valor, atributos personalizados o como parte de su perfil.
Por ejemplo, puedes almacenar la siguiente información en un KVM para que sea más segura y accesible en tiempo de ejecución:
- URLs de destino de backend
- Propiedades del entorno
- Credenciales de seguridad de sistemas de backend o de terceros
Del mismo modo, puede que quieras obtener la lista de productos de la 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 aplicaciones del desarrollador.
Toda esta información se puede usar de forma eficaz en el tiempo de ejecución para habilitar un comportamiento dinámico en las políticas o en el código personalizado de Apigee.
Antipatrón
Las APIs de Apigee son las preferidas y resultan útiles para las tareas administrativas, pero no se deben usar para implementar lógica de tiempo de ejecución en el flujo de los proxies de API. Esto se debe a lo siguiente:
- Si usas las APIs de Apigee para acceder a información sobre las entidades, como KVMs o tokens de acceso de OAuth, o para cualquier otro fin desde proxies de API, se generará una dependencia de los servidores de gestión.
- Los servidores de gestión no forman parte de los componentes del tiempo de ejecución de Apigee y, por lo tanto, es posible que no tengan una alta disponibilidad.
- Los servidores de gestión tampoco se pueden aprovisionar en la misma red o centro de datos, por lo que pueden introducir latencias de red en el tiempo de ejecución.
- Las entradas de los servidores de gestión se almacenan en caché durante un periodo más largo, por lo que es posible que no puedas ver los datos más recientes inmediatamente en los proxies de API si realizas operaciones de escritura y lectura en un breve periodo de tiempo.
- Aumenta los saltos de red en el tiempo de ejecución.
En el siguiente ejemplo de código, la llamada a la API de Apigee se realiza a través del código JavaScript personalizado para obtener la información del KVM:
var response = httpClient.send('https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/keyvaluemaps')
Si el servidor de gestión no está disponible, el código JavaScript que invoca la llamada a la API de Apigee falla. Por lo tanto, la solicitud a la API falla.
Impacto
- Introduce una dependencia adicional en los servidores de gestión durante el tiempo de ejecución. Cualquier fallo en los servidores de gestión afectará a las llamadas a la API.
- Las credenciales de usuario de las APIs de Apigee deben almacenarse de forma local o en algún almacén seguro, como un KVM cifrado.
- Implicaciones en el rendimiento debido a la invocación del servicio de gestión a través de la red.
- Es posible que los valores actualizados no se vean inmediatamente debido a que la caducidad de la caché es más larga en los servidores de gestión.
Práctica recomendada
Hay formas más eficaces de obtener información de entidades como KVMs, productos de API, aplicaciones de desarrolladores, desarrolladores, claves de consumidor, etc. en tiempo de ejecución. Aquí tienes algunos ejemplos:
- Usa una política KeyValueMapOperations para acceder a la información de los KVMs. A continuación, se incluye un código de ejemplo que muestra cómo obtener información del 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>
- Para acceder a información sobre productos de API, aplicaciones de desarrolladores, desarrolladores, claves de consumidor, etc.,
en el proxy de API, puedes hacer lo siguiente:
- Si el flujo de tu proxy de API tiene una política VerifyAPIKey, puedes acceder a la información mediante las variables de flujo rellenadas como parte de esta política. A continuación, se muestra un código de ejemplo que indica cómo obtener el nombre y la información de created_by de una aplicación para 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 el flujo de tu proxy de API no tiene una política VerifyAPIKey, puedes acceder a los perfiles de productos de API, aplicaciones de desarrollador, etc., mediante las políticas
AccessEntity
yExtractVariables
:- Obtén el perfil de la aplicación del desarrollador 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>
- Extrae el
appId
de la aplicación para desarrolladores 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>
- Obtén el perfil de la aplicación del desarrollador con la política AccessEntity:
- Si el flujo de tu proxy de API tiene una política VerifyAPIKey, puedes acceder a la información mediante las variables de flujo rellenadas como parte de esta política. A continuación, se muestra un código de ejemplo que indica cómo obtener el nombre y la información de created_by de una aplicación para desarrolladores mediante JavaScript: