Antipattern: با استفاده از خط مشی جاوا اسکریپت، داده ها را به سرورهای شخص ثالث وارد کنید

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

ورود به سیستم یکی از راه های کارآمد برای رفع اشکال است. اطلاعات مربوط به درخواست API مانند هدرها، پارامترهای فرم، پارامترهای پرس و جو، متغیرهای پویا و غیره همگی می توانند برای ارجاع بعدی ثبت شوند. اطلاعات را می توان به صورت محلی در پردازشگرهای پیام (فقط Apigee Edge برای Private Cloud) یا در سرورهای شخص ثالث مانند Sumo Logic، Splunk یا Loggly ثبت کرد.

ضد الگو

در کد زیر، شی 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() است که عملیات تماس گیرنده را تا زمانی که فرآیند ثبت نام کامل شود به حالت تعلیق در می آورد. یک الگوی معتبر این است که با حذف این فراخوانی، آن را ناهمزمان کنید.

تاثیر

  • اجرای کد ورود به سیستم از طریق خط مشی جاوا اسکریپت به تأخیر درخواست API می افزاید.
  • درخواست‌های همزمان می‌توانند بر منابع موجود در پردازشگر پیام فشار وارد کنند و در نتیجه بر پردازش سایر درخواست‌ها تأثیر منفی بگذارند.

بهترین تمرین

  • از خط مشی MessageLogging برای انتقال/ ثبت داده ها به سرورهای Log یا خدمات مدیریت لاگ شخص ثالث مانند Sumo Logic، Splunk، Loggly و غیره استفاده کنید.
  • بزرگترین مزیت سیاست ثبت پیام این است که می توان آن را در Post Client Flow تعریف کرد، که پس از ارسال پاسخ به برنامه مشتری درخواست کننده اجرا می شود.
  • تعریف این خط مشی در جریان ارسال مشتری به جداسازی فعالیت گزارش و پردازش درخواست/پاسخ و در نتیجه جلوگیری از تأخیر کمک می کند.
  • اگر نیاز یا دلیل خاصی برای انجام لاگ از طریق جاوا اسکریپت وجود داشته باشد (نه گزینه Post Client flow ذکر شده در بالا)، پس باید به صورت ناهمزمان انجام شود. به عبارت دیگر، اگر از یک شی httpClient استفاده می کنید، باید اطمینان حاصل کنید که جاوا اسکریپت waitForComplete را پیاده سازی نمی کند.

در ادامه مطلب