أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
يُعدّ التسجيل إحدى الطرق الفعّالة لتصحيح الأخطاء. يمكن تسجيل المعلومات المتعلقة بطلب واجهة برمجة التطبيقات، مثل العناوين ومَعلمات النموذج ومَعلمات طلب البحث والمتغيرات الديناميكية وما إلى ذلك، للرجوع إليها لاحقًا. يمكن تسجيل المعلومات محليًا على "معالجات الرسائل" (Apigee Edge للسحابة الخاصة فقط) أو على خوادم تابعة لجهات خارجية، مثل Sumo Logic أو Splunk أو Loggly.
نمط مضاد
في الرمز البرمجي أدناه، يتم استخدام العنصر httpClient في سياسة JavaScript لتسجيل البيانات في خادم 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 إلى زيادة وقت استجابة طلب البيانات من واجهة برمجة التطبيقات.
- يمكن أن تؤدي الطلبات المتزامنة إلى إجهاد الموارد في "معالج الرسائل"، وبالتالي التأثير سلبًا في معالجة الطلبات الأخرى.
أفضل الممارسات
- استخدِم سياسة MessageLogging لنقل البيانات/تسجيلها إلى خوادم السجلّات أو خدمات إدارة سجلّات تابعة لجهات خارجية، مثل Sumo Logic وSplunk وLoggly وما إلى ذلك.
- تتمثّل أكبر ميزة لسياسة "تسجيل الرسائل" في إمكانية تحديدها في Post Client Flow، الذي يتم تنفيذه بعد إرسال الردّ إلى تطبيق العميل الذي أرسل الطلب.
- يساعد تحديد هذه السياسة في مسار Post Client على فصل نشاط التسجيل ومعالجة الطلبات/الردود، ما يؤدي إلى تجنُّب حالات التأخير.
- إذا كان هناك شرط محدّد أو سبب لتسجيل البيانات باستخدام JavaScript (وليس خيار Post
Client المذكور أعلاه)، يجب إجراء ذلك بشكل غير متزامن. بمعنى آخر، إذا كنت تستخدم كائن
httpClient، عليك التأكّد من أنّ JavaScript لا ينفّذwaitForComplete.