Anti-pola: Mencatat data ke server pihak ketiga menggunakan kebijakan JavaScript

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

Pencatatan log adalah salah satu cara efisien untuk masalah proses debug. Informasi tentang API seperti header, parameter formulir, parameter kueri, variabel dinamis, dll. semuanya dapat dicatat dalam log referensi di lain waktu. Informasi dapat dicatat secara lokal di Pemroses Pesan (hanya Apigee Edge untuk Private Cloud) atau ke server pihak ketiga, seperti Sumo Logic, Splunk, atau Loggly.

Anti-pola

Pada kode di bawah, objek httpClient dalam kebijakan JavaScript digunakan untuk mencatat data ke log server Sumo Logic. Ini berarti bahwa proses pencatatan benar-benar berlangsung selama pemrosesan permintaan/respons. Pendekatan ini kontraproduktif karena menambah biaya waktu, sehingga meningkatkan latensi secara keseluruhan.

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

Penyebabnya adalah panggilan ke waitForComplete(), yang menangguhkan panggilan telepon operasi hingga proses {i>logging<i} selesai. Pola yang valid adalah membuat peristiwa dengan menghilangkan panggilan ini.

Dampak

  • Mengeksekusi kode logging melalui kebijakan JavaScript akan menambah latensi API permintaan.
  • Permintaan serentak dapat menekan resource pada Pemroses Pesan dan akibatnya dapat berpengaruh buruk pada pemrosesan permintaan lainnya.

Praktik Terbaik

  • Gunakan kebijakan MessageLogging untuk mentransfer/mencatat data ke server Log atau log pihak ketiga layanan manajemen seperti Sumo Logic, Splunk, Loggly, dll.
  • Keuntungan terbesar dari kebijakan Logging Pesan adalah bahwa kebijakan ini dapat ditentukan di bagian Alur Klien, yang dieksekusi setelah respons dikirim kembali ke aplikasi klien yang meminta.
  • Menentukan kebijakan ini dalam alur Post Client akan membantu memisahkan aktivitas logging dan permintaan/respons untuk menghindari latensi.
  • Jika ada persyaratan atau alasan khusus untuk melakukan logging melalui JavaScript (bukan melalui alur klien yang disebutkan di atas), maka harus dilakukan secara asinkron. Dengan kata lain, {i>SUMIF<i} memiliki daftar sel jika menggunakan objek httpClient, Anda harus memastikan bahwa JavaScript melakukan TIDAK mengimplementasikan waitForComplete

Bacaan lebih lanjut