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

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Il logging è uno dei modi efficienti per eseguire il debug dei problemi. Le informazioni sull'API come intestazioni, parametri modulo, parametri di query, variabili dinamiche e così via. in un secondo momento. Le informazioni possono essere registrate localmente sui processori di messaggi (solo Apigee Edge per Private Cloud) oppure a server di terze parti come Sumo Logic, Splunk o Loggly.

Antipattern

Nel codice seguente, l'oggetto httpClient in un criterio JavaScript viene utilizzato per registrare i dati in una Server Sumo Logic. Ciò significa che il processo di logging avviene durante l'elaborazione di richieste/risposte. Questo approccio è controproducente perché si aggiunge al trattamento 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 colpevole è la chiamata a waitForComplete(), che sospende la chiamata del chiamante operazioni fino al completamento del processo di logging. Un pattern valido è rendere questo modello asincrono eliminando la chiamata.

Impatto

  • L'esecuzione del codice di logging tramite il criterio JavaScript aumenta la latenza dell'API richiesta.
  • Le richieste in parallelo possono stressare le risorse sul processore di messaggi e, di conseguenza, pregiudicare l'elaborazione di altre richieste.

Best practice

  • Utilizza il criterio MessageLogging per trasferire/registrare i dati nei server di log o in un log di terze parti servizi di gestione come Sumo Logic, Splunk, Loggly ecc.
  • Il più grande vantaggio del criterio di logging dei messaggi è che può essere definito nel Flusso del client, che viene eseguito dopo che la risposta viene rinviata all'app client richiedente.
  • La definizione di questo criterio nel flusso Post-Client consente di separare l'attività di logging dal l'elaborazione di richieste/risposte, evitando così le latenze.
  • Se sussiste un requisito specifico o un motivo per eseguire il logging tramite JavaScript (non il modulo l'opzione Flusso client menzionata sopra), deve essere eseguita in modo asincrono. In altre parole, se utilizzi un oggetto httpClient, devi assicurarti che JavaScript NON implementare waitForComplete

Per approfondire