Anti-pattern: registra i dati nei server di terze parti utilizzando il criterio JavaScript

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

La registrazione è uno dei modi efficienti per eseguire il debug dei problemi. Le informazioni sulla richiesta API, come intestazioni, parametri del modulo, parametri di query, variabili dinamiche e così via, possono essere registrate per riferimento futuro. Le informazioni possono essere registrate localmente sui Message Processor (solo Apigee Edge per il cloud privato) o su server di terze parti come Sumo Logic, Splunk o Loggly.

Antipattern

Nel codice riportato di seguito, l'oggetto httpClient in una policy JavaScript viene utilizzato per registrare i dati su un server Sumo Logic. Ciò significa che il processo di registrazione avviene durante l'elaborazione della richiesta/risposta. Questo approccio è controproducente perché aumenta il tempo di elaborazione, aumentando così le latenze complessive.

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();

Il problema è la chiamata a waitForComplete(), che sospende le operazioni del chiamante finché il processo di registrazione non è completato. Un pattern valido consiste nel rendere asincrono questo processo eliminando questa chiamata.

Impatto

  • L'esecuzione del codice di registrazione tramite la policy JavaScript aumenta la latenza della richiesta API.
  • Le richieste simultanee possono stressare le risorse del processore di messaggi e, di conseguenza, influire negativamente sull'elaborazione di altre richieste.

Best practice

  • Utilizza la policy MessageLogging per trasferire/registrare i dati sui server di log o sui servizi di gestione dei log di terze parti come Sumo Logic, Splunk, Loggly e così via.
  • Il vantaggio principale della policy di registrazione dei messaggi è che può essere definita nel flusso Post Client, che viene eseguito dopo che la risposta è stata inviata all'app client richiedente.
  • La definizione di questa policy nel flusso Post Client consente di separare l'attività di registrazione e l' elaborazione della richiesta/risposta, evitando così le latenze.
  • Se esiste un requisito o un motivo specifico per eseguire la registrazione tramite JavaScript (non l'opzione del flusso Post Client menzionata sopra), è necessario eseguirla in modo asincrono. In altre parole, se utilizzi un oggetto httpClient, devi assicurarti che JavaScript NON implementi waitForComplete.

Per approfondire