反模式:使用 JavaScript 政策將資料記錄至第三方伺服器

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

記錄是解決問題的有效方式之一。API 相關資訊 針對各種請求記錄 (例如標頭、表單參數、查詢參數、動態變數等) 供稍後參考這些資訊可在本機訊息處理器 (僅限 Apigee Edge for Private Cloud) 中記錄,或者 至 Sumo Logic、Splunk 或 Loggly 等第三方伺服器進行測試。

反模式

在下方程式碼中,JavaScript 政策中的 httpClient 物件會使用這些資料,將資料記錄到 Sumo Logic 伺服器。這表示系統會在訂閱期間 要求/回應處理作業此方法反而會造成處理能力 進而增加整體延遲時間

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

這裡的罪犯是對 waitForComplete() 的呼叫,這會暫停呼叫端的 作業。有效的模式是將容器設為非同步 以刪除該呼叫

影響

  • 透過 JavaScript 政策執行記錄程式碼會增加 API 的延遲時間 請求。
  • 並行要求可能會壓力「訊息處理器」上的資源,因此 可能會對其他請求的處理造成負面影響。

最佳做法

  • 使用 MessageLogging 政策將資料轉移至記錄檔伺服器或第三方記錄 管理服務,例如 Sumo Logic、Splunk、Loggly 等
  • 訊息記錄政策的最大優點是在訊息中定義。 用戶端流程,會在回應傳回要求用戶端應用程式後執行。
  • 在 Post Client 流程中定義這項政策有助於將記錄活動和 進而避免延遲
  • 如基於特定需求,或有需要透過 JavaScript 記錄 (而非「文章」) 的理由 上述用戶端流程選項),則必須以非同步方式完成。也就是 如果您使用 httpClient 物件,就必須確保 JavaScript 導入 waitForComplete

延伸閱讀