Antipadrão: registrar dados em servidores de terceiros usando a política de JavaScript

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

O registro é uma das maneiras eficientes de depurar problemas. As informações sobre a solicitação de API, como cabeçalhos, parâmetros de formulário, parâmetros de consulta, variáveis dinâmicas etc., podem ser registradas para referência posterior. As informações podem ser registradas localmente nos processadores de mensagens (somente no Apigee Edge para nuvem privada) ou em servidores de terceiros, como Sumo Logic, Splunk ou Loggly.

Antipadrão

No código abaixo, o objeto httpClient em uma política JavaScript é usado para registrar os dados em um servidor Sumo Logic. Isso significa que o processo de registro ocorre durante o processamento de solicitação/resposta. Essa abordagem é contraproducente porque aumenta o tempo de processamento, aumentando assim as latências gerais.

LogData_JS:

<!-- /antipatterns/examples/1-4.xml -->
<Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS">
  <DisplayName>LogData_JS</DisplayName>
  <ResourceURL>jsc://LogData.js</ResourceURL>
</Javascript>

LogData.js:

<!-- /antipatterns/examples/1-5.xml -->
var sumoLogicURL = "...";
httpClient.send(sumoLogicURL);
waitForComplete();

O culpado aqui é a chamada para waitForComplete(), que suspende as operações do autor da chamada até que o processo de registro seja concluído. Um padrão válido é tornar isso assíncrono, eliminando essa chamada.

Impacto

  • A execução do código de registro pela política JavaScript aumenta a latência da solicitação de API.
  • Solicitações simultâneas podem estressar os recursos no processador de mensagens e, consequentemente afetar negativamente o processamento de outras solicitações.

Prática recomendada

  • Use a política MessageLogging para transferir/registrar dados para servidores de registro ou serviços de gerenciamento de registros de terceiros, como Sumo Logic, Splunk, Loggly etc.
  • A maior vantagem da política de registro de mensagens é que ela pode ser definida no fluxo de pós cliente, que é executado depois que a resposta é enviada de volta ao app cliente solicitante.
  • Definir essa política no fluxo de pós-cliente ajuda a separar a atividade de registro e o processamento de solicitação/resposta, evitando latências.
  • Se houver um requisito específico ou um motivo para fazer o registro via JavaScript (não a opção de fluxo de pós cliente mencionada acima), ele precisará ser feito de forma assíncrona. Em outras palavras, se você estiver usando um objeto httpClient, será necessário garantir que o JavaScript NÃO implemente waitForComplete.

Leitura adicional