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

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

記錄是偵錯問題的有效方法之一。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 Flow 中定義,該流程會在回應傳回給要求用戶端應用程式後執行。
  • 在 Post Client 流程中定義這項政策,有助於區分記錄活動和要求/回應處理作業,進而避免延遲。
  • 如有特定需求或理由,需要透過 JavaScript 記錄 (而非上述的 Post Client 流程選項),則必須以非同步方式進行。換句話說,如果您使用 httpClient 物件,請務必不要實作 waitForComplete

延伸閱讀