Está a ver a documentação do Apigee e do Apigee Hybrid.
Veja a documentação do
Apigee Edge.
O Apigee tem uma utilidade poderosa denominada API Apigee, que oferece serviços como:
- Implementar ou anular a implementação de proxies de API
- Configurar anfitriões virtuais, keystores e truststores, entre outros
- Criar, eliminar e atualizar entidades, como mapas de valores-chave (KVMs), produtos de API, apps de programadores, programadores, chaves de consumidor, etc.
- A obter informações sobre estas entidades
Estes serviços são disponibilizados através de um componente denominado servidor de gestão na plataforma Apigee. Estes serviços podem ser invocados facilmente com a ajuda de chamadas simples de API.
Por vezes, podemos ter de usar um ou mais destes serviços a partir de proxies de API em tempo de execução. Isto deve-se ao facto de as entidades, como KVMs, tokens de acesso OAuth, produtos de API, apps de programadores, programadores, chaves de consumidor, etc., conterem informações úteis sob a forma de pares de chaves-valores, atributos personalizados ou como parte do respetivo perfil.
Por exemplo, pode armazenar as seguintes informações num KVM para as tornar mais seguras e acessíveis no tempo de execução:
- URLs de destino de back-end
- Propriedades do ambiente
- Credenciais de segurança de sistemas de back-end ou de terceiros
Da mesma forma, pode querer obter a lista de produtos da API ou o endereço de email do programador em tempo de execução. Estas informações vão estar disponíveis como parte do Perfil de apps do programador.
Todas estas informações podem ser usadas eficazmente no tempo de execução para ativar o comportamento dinâmico nas políticas ou no código personalizado no Apigee.
Antipattern
As APIs Apigee são preferíveis e úteis para tarefas administrativas e não devem ser usadas para executar qualquer lógica de tempo de execução no fluxo de proxies de API. Isto deve-se ao seguinte:
- A utilização de APIs Apigee para aceder a informações sobre as entidades, como KVMs, tokens de acesso OAuth ou para qualquer outro fim a partir de proxies de API, leva à dependência de servidores de gestão.
- Os servidores de gestão não fazem parte dos componentes de tempo de execução do Apigee e, por isso, podem não estar altamente disponíveis.
- Os servidores de gestão também podem não ser aprovisionados na mesma rede ou centro de dados e, por isso, podem introduzir latências de rede no tempo de execução.
- As entradas nos servidores de gestão são colocadas em cache durante um período mais longo, pelo que pode não conseguir ver os dados mais recentes imediatamente nos proxies de API se fizer gravações e leituras num curto período.
- Aumenta os saltos de rede no tempo de execução.
No exemplo de código abaixo, a chamada API Apigee é feita através do código JavaScript personalizado para obter as informações do KVM:
var response = httpClient.send('https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/keyvaluemaps')
Se o servidor de gestão estiver indisponível, a chamada do código JavaScript que invoca a API Apigee falha. Isto faz com que o pedido da API falhe.
Impacto
- Introduz uma dependência adicional nos servidores de gestão durante o tempo de execução. Qualquer falha nos servidores de gestão afeta as chamadas API.
- As credenciais do utilizador para as APIs Apigee têm de ser armazenadas localmente ou num armazenamento seguro, como um KVM encriptado.
- Implicações no desempenho devido à invocação do serviço de gestão através da rede.
- Pode não ver os valores atualizados imediatamente devido a um prazo de validade da cache mais longo nos servidores de gestão.
Prática recomendada
Existem formas mais eficazes de obter informações de entidades como KVMs, produtos de API, apps de programadores, programadores, chaves de consumidor, etc., no tempo de execução. Eis alguns exemplos:
- Use uma política KeyValueMapOperations para aceder a informações de KVMs. Segue-se um exemplo de código
que mostra como obter informações do 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 aceder a informações sobre produtos de API, apps de programadores, programadores, chaves de consumidor, etc.
no proxy de API, pode fazer qualquer uma das seguintes ações:
- Se o fluxo do proxy de API tiver uma política VerifyAPIKey, pode aceder às informações
através das variáveis de fluxo preenchidas como parte desta política. Segue-se um exemplo de código que mostra como obter o nome e as informações de created_by de uma app de programador através de 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 o fluxo do proxy de API não tiver uma política VerifyAPIKey, pode aceder aos
perfis de produtos de API, apps de programadores, etc., através das políticas
AccessEntity
eExtractVariables
:- Obtenha o perfil da app do programador com a 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>
- Extraia o
appId
da app do programador com a 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>
- Obtenha o perfil da app do programador com a política AccessEntity:
- Se o fluxo do proxy de API tiver uma política VerifyAPIKey, pode aceder às informações
através das variáveis de fluxo preenchidas como parte desta política. Segue-se um exemplo de código que mostra como obter o nome e as informações de created_by de uma app de programador através de JavaScript: