أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
يتناول هذا الموضوع نموذج كائن JavaScript في Apigee Edge. من المهم فهم هذا النموذج إذا كنت تنوي استخدام سياسة JavaScript لإضافة JavaScript مخصّصة إلى خادم وكيل لواجهة برمجة التطبيقات.
لمحة عن نموذج كائن JavaScript في Edge
يحدّد نموذج كائنات JavaScript في Apigee Edge الكائنات التي تتضمّن سمات مرتبطة ومتاحة لرمز JavaScript الذي يتم تنفيذه ضمن مسار خادم وكيل في Apigee Edge. يمكنك استخدام سياسة JavaScript لربط هذا الرمز المخصّص بتدفّق خادم وكيل لواجهة برمجة التطبيقات.
تتضمّن العناصر المحدّدة في هذا النموذج نطاقًا ضمن مسار خادم وكيل لواجهة برمجة التطبيقات، ما يعني أنّ بعض العناصر والسمات لا تتوفّر إلا في نقاط معيّنة في المسار. عند تنفيذ JavaScript، يتم إنشاء نطاق للتنفيذ. في هذا النطاق، يتم إنشاء مراجع الكائنات التالية:
- context: عنصر يتيح الوصول إلى سياق الرسالة
- طلب: اختصار يتيح الوصول إلى عنصر الطلب
- الاستجابة: اختصار يتيح الوصول إلى عنصر الطلب
- crypto: توفّر دوال تجزئة مختلفة
- print: دالة لعرض الناتج
- السمات: تسمح هذه السمة بالوصول للقراءة إلى سمات الإعداد في السياسة
عنصر السياق
يحتوي الكائن context على نطاق عام. وهي متاحة في كل مكان ضمن مسار وكيل واجهة برمجة التطبيقات. يتضمّن هذا العنصر أربعة عناصر فرعية: proxyRequest وproxyResponse وtargetRequest وtargetResponse. تقتصر نطاقات هذه العناصر الفرعية على الطلب والاستجابة المحيطَين، سواء كانا طلبًا واستجابة من الخادم الوكيل أو طلبًا واستجابة من الهدف. على سبيل المثال، إذا تم تنفيذ سياسة JavaScript في جزء نقطة نهاية الخادم الوكيل من التدفق، سيكون الكائنان context.proxyRequest وcontext.proxyResponse ضمن النطاق. إذا تم تنفيذ JavaScript في مسار مستهدف، سيكون العنصران context.targetRequest وcontext.targetResponse ضمن النطاق.
يحتوي العنصر context أيضًا على سمات وطُرق موضّحة بالتفصيل في هذا الموضوع. على سبيل المثال، يستخدم نموذج رمز JavaScript التالي السمة context.flow ويستدعي طُرق get/setVariable() في context.
if (context.flow=="PROXY_REQ_FLOW") { var username = context.getVariable("request.formparam.user"); context.setVariable("USER.name", username); }
تتفاعل هذه الطرق مباشرةً مع متغيرات التدفق.
قيمة السمة context.flow هي نطاق التدفق الحالي. في مسار طلب الوكيل، يتم ضبطه على القيمة الثابتة PROXY_REQ_FLOW. إذا كان في مسار الاستجابة المستهدَف، يتم ضبطه على TARGET_RESP_FLOW. هذا الثابت مفيد لتنفيذ رمز خاص بنطاق معيّن. تتيح لك الدالة Getter الحصول على متغيّرات التدفق، بينما تتيح لك الدالة Setter ضبط متغيّرات التدفق. تتوفّر هذه المتغيّرات بشكل عام في مسار الخادم الوكيل ويمكن أن تستخدمها سياسات أخرى.
اطّلِع على مرجع عنصر السياق أدناه لمعرفة المزيد من التفاصيل والأمثلة.
عنصر التشفير
يضيف كائن التشفير دعمًا أساسيًا عالي الأداء للتشفير إلى نموذج كائن JavaScript. اطّلِع على مرجع عنصر التشفير أدناه لمعرفة المزيد من التفاصيل والأمثلة.
عناصر الطلب والاستجابة
الكائنان request وresponse هما مراجع مختصرة للطلب والرد المحيطَين، أي طلب الوكيل وردّه أو طلب الهدف وردّه. تعتمد الكائنات التي تشير إليها هذه المتغيّرات على السياق الذي يتم فيه تنفيذ سياسة JavaScript. إذا تم تنفيذ JavaScript في مسار نقطة نهاية خادم وكيل، تشير متغيرات الطلب والاستجابة إلى context.proxyRequest وcontext.proxyResponse. إذا تم تنفيذ JavaScript في مسار مستهدَف، ستشير المتغيّرات إلى context.targetRequest وcontext.targetResponse.
الدالة print()
يتضمّن نموذج عناصر JavaScript دالة print() يمكنك استخدامها لعرض معلومات تصحيح الأخطاء في أداة Edge Trace. اطّلِع على تصحيح الأخطاء باستخدام عبارات JavaScript print().
كائن الخصائص
عند استخدام عنصر properties.
على سبيل المثال، إذا كان إعداد JavaScript يتضمّن ما يلي:
<Javascript name='JS-1' > <Properties> <Property name="number">8675309</Property> <Property name="firstname">Jenny</Property> </Properties> <ResourceURL>jsc://my-code.js</ResourceURL> </Javascript>
بعد ذلك، يمكنك إجراء ما يلي في my-code.js:
print(properties.firstname); // prints Jenny print(properties.number); // 8675309
من الناحية العملية، يمكن أن تسمح عملية الضبط للرمز البرمجي بالتصرف بشكل مختلف عند تشغيله في بيئات مختلفة أو في لحظات مختلفة أو لأي سبب آخر.
على سبيل المثال، يحدّد ما يلي "اسم المتغيّر" ونمط الإخراج الذي يجب أن يرسل JavaScript المعلومات إليه:
<Javascript name='JS-2' > <Properties> <Property name="output">my_output_variable</Property> <Property name="prettyPrint">true</Property> </Properties> <ResourceURL>jsc://emit-results.js</ResourceURL> </Javascript>
emit-results.js، يمكن أن تنفّذ التعليمة البرمجية ما يلي:
var result = { prop1: "something", prop2 : "something else" } ; if (properties.prettyPrint == "true") { context.setVariable(properties.output, JSON.stringify(result, null, 2)); } else { context.setVariable(properties.output, JSON.stringify(result)); }
مرجع العنصر المشفّر
يتيح لك الكائن crypto تنفيذ وظائف التجزئة المشفرة الأساسية في JavaScript.
يحتوي كائن التشفير على نطاق عام. تتوفّر في كل مكان ضمن مسار وكيل واجهة برمجة التطبيقات. تتيح لك Crypto استخدام عناصر التجزئة التالية:
- SHA-1
- SHA256
- SHA512
- MD5
التعامل مع عناصر SHA-1
يمكنك إنشاء عناصر SHA-1 وتعديلها وتحويلها إلى قيم سداسية عشرية وقيم base64.
إنشاء عنصر SHA-1 جديد
var _sha1 = crypto.getSHA1();
تعديل عنصر SHA-1
البنية
_sha1.update(value);
المَعلمات
- القيمة - (سلسلة) أي قيمة سلسلة
مثال
تعديل عنصر SHA-1:
_sha1.update("salt_value"); _sha1.update("some text");
إرجاع عنصر SHA-1 كسلسلة سداسية عشرية
var _hashed_token = _sha1.digest();
إرجاع عنصر SHA-1 كسلسلة base64
var _hashed_token = _sha1.digest64();
التعامل مع عناصر SHA-256
يمكنك إنشاء عناصر SHA-256 وتعديلها وتحويلها إلى قيم سداسية عشرية وقيم Base64.
إنشاء عنصر SHA-256 جديد
var _sha256 = crypto.getSHA256();
تعديل عنصر SHA-256
البنية
_sha256.update(value);
المَعلمات
- القيمة - (سلسلة) أي قيمة سلسلة
مثال
تعديل عنصر SHA-256:
_sha256.update("salt_value"); _sha256.update("some text");
إرجاع عنصر SHA-256 كسلسلة سداسية عشرية
var _hashed_token = _sha256.digest();
إرجاع عنصر SHA-256 كسلسلة base64
var _hashed_token = _sha256.digest64();
التعامل مع عناصر SHA-512
يمكنك إنشاء عناصر SHA-512 وتعديلها وتحويلها إلى قيم سداسية عشرية وقيم base64.
إنشاء عنصر SHA-512 جديد
var _sha512 = crypto.getSHA512();
تعديل عنصر SHA-512
البنية
_sha512.update(value);
المَعلمات
- القيمة - (سلسلة) أي قيمة سلسلة
مثال
تعديل عنصر SHA-512:
_sha512.update("salt_value"); _sha512.update("some text");
إرجاع عنصر SHA-512 كسلسلة سداسية عشرية
var _hashed_token = _sha512.digest();
إرجاع عنصر SHA-512 كسلسلة base64
var _hashed_token = _sha512.digest64();
التعامل مع عناصر MD5
يمكنك إنشاء عناصر MD5 وتعديلها وتحويلها إلى قيم سداسية عشرية وقيم base64.
إنشاء عنصر MD5 جديد
var _md5 = crypto.getMD5();
تعديل عنصر MD5
البنية
_md5.update(value);
المَعلمات
- القيمة - (سلسلة) أي قيمة سلسلة
مثال
تعديل عنصر MD5:
_md5.update("salt_value"); _md5.update("some text");
إرجاع عنصر MD5 كسلسلة سداسية عشرية
var _hashed_token = _md5.digest();
إرجاع عنصر MD5 كسلسلة base64
var _hashed_token = _md5.digest64();
التوافق مع التاريخ والوقت في العملات المشفّرة
يتيح عنصر التشفير استخدام أنماط تنسيق التاريخ والوقت.
crypto.dateFormat()
تعرض هذه الدالة تاريخًا بتنسيق سلسلة.
البنية
crypto.dateFormat(format, [timezone], [time])
المَعلمات
- format - (سلسلة) التنفيذ الأساسي لهذه المَعلمة هو java.text.SimpleDateFormat. على سبيل المثال: 'yyyy-MM-DD HH:mm:ss.SSS'
- timezone - (سلسلة، اختيارية) التنفيذ الأساسي لهذه المَعلمة هو java.util.TimeZone. هذه المَعلمة هي نفسهاDefault: UTC
- الوقت: (رقم، اختياري) قيمة طابع زمني لنظام التشغيل Unix المطلوب تنسيقه. القيمة التلقائية: الوقت الحالي
أمثلة
الحصول على الوقت الحالي، وصولاً إلى الملّي ثانية:
var _now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS');
الحصول على الوقت الحالي في منطقة توقيت المحيط الهادئ:
var _pst = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST');
الحصول على قيمة عشر ثوانٍ من الآن:
var _timeNow = Number(context.getVariable('system.timestamp')); var ten_seconds = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow + 10 * 1000);
أمثلة إضافية يمكنك أيضًا الاطّلاع على مستندات java.text.SimpleDateFormat.
var _pst = crypto.dateFormat('M');
var _pst = crypto.dateFormat('EEE, d MMM yyyy HH:mm:ss Z');
var _pst = crypto.dateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
استخدِم getHash() للحصول على أي من عناصر التجزئة المتوافقة
أمثلة
var _hash1 = crypto.getHash('MD5'); var _hash2 = crypto.getHash('SHA-1'); var _hash3 = crypto.getHash('SHA-256'); var _hash4 = crypto.getHash('SHA-512');
عيّنة تتضمّن عملات مشفّرة
try { // get values to use with hash functions var salt = context.getVariable("salt") || 'SomeHardCodedSalt'; var host = context.getVariable("request.header.Host"); var unhashed_token = ""; var _timeNow = Number(context.getVariable('system.timestamp')); var now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow); unhashed_token = "|" + now + "|" + host // generate a hash with the unhashedToken: var sha512 = crypto.getSHA512(); sha512.update(salt); sha512.update(unhashed_token); // convert to base64 var base64_token = sha512.digest64(); // set headers context.setVariable("request.header.now", now); context.setVariable("request.header.token", base64_token); } catch(e) { throw 'Error in Javascript'; }
مرجع عنصر السياق
يتم إنشاء عنصر context لكل معاملة طلب/رد يتم تنفيذها بواسطة خادم وكيل لواجهة برمجة التطبيقات. يعرض العنصر context طرقًا للحصول على المتغيرات وضبطها وإزالتها
المرتبطة بكل معاملة.
تحدّد المتغيّرات الخصائص الخاصة بمعاملة معيّنة. وقت اليوم، واللغة المحلية لجهاز العميل الذي يرسل الطلب، وعامل المستخدم لجهاز العميل الذي يرسل الطلب، وعنوان URL للخدمة المستهدَفة، كلها أمثلة على المتغيرات المتاحة في context. لذلك،
تكون context مفيدة لإنشاء منطق يعتمد على هذه السمات لتنفيذ سلوك مخصّص.
راجِع مرجع متغيرات التدفق وسياسة استخراج المتغيرات.
ملخّص عنصر السياق
يوضّح هذا الجدول بإيجاز عنصر السياق والعناصر الفرعية له، ويسرد الخصائص المرتبطة بكل منها.
| الاسم | الوصف | الخصائص |
|---|---|---|
context |
حاوية لسياق مسار معالجة الرسائل والطلبات والاستجابات التدفقات التي يتم تنفيذها بواسطة ProxyEndpoint وTargetEndpoint. | المسار، الجلسة |
context.proxyRequest |
كائن يمثّل رسالة الطلب الواردة إلى ProxyEndpoint (من التطبيق الذي يطلب إلى خادم وكيل لواجهة برمجة التطبيقات) | العناوين ومَعلمات طلب البحث والطريقة والنص الأساسي وعنوان URL |
context.targetRequest |
كائن يمثّل رسالة الطلب الصادر من TargetEndpoint (من خادم الخلفية إلى خادم وكيل API). | العناوين ومَعلمات طلب البحث والطريقة والنص الأساسي وعنوان URL |
context.targetResponse |
عنصر يمثّل رسالة الردّ المستهدَفة الواردة (من خدمة الخلفية إلى خادم وكيل لواجهة برمجة التطبيقات) | العناوين والمحتوى والحالة |
context.proxyResponse |
كائن يمثّل رسالة الردّ من الوكيل الصادر (من وكيل واجهة برمجة التطبيقات إلى التطبيق الذي أرسل الطلب) | العناوين والمحتوى والحالة |
context.flow |
اسم المسار الحالي. | اطّلِع على context.flow أدناه. |
context.session |
خريطة لأزواج الاسم/القيمة التي يمكنك استخدامها لتمرير الكائنات بين خطوتَين مختلفتَين
يتم تنفيذهما في السياق نفسه. على سبيل المثال: context.session['key'] = 123. |
لمزيد من المعلومات حول حالات استخدام هذا العنصر وحالات عدم استخدامه، يمكنك الاطّلاع على مناقشة منتدى Apigee. |
طُرق عنصر context
context.getVariable()
يستردّ قيمة متغيّر محدّد مسبقًا أو مخصّص.
البنية
context.getVariable("variable-name");
مثال
للحصول على قيمة السنة الحالية:
var year = context.getVariable('system.time.year');
context.setVariable()
تضبط هذه السمة قيمة لمتغيّر مخصّص أو لأي متغيّرات قابلة للكتابة محدّدة مسبقًا.
البنية
context.setVariable("variable-name", value);
مثال
من السيناريوهات الشائعة لضبط متغيّر هو عندما يحتاج خادم وكيل لواجهة برمجة التطبيقات إلى كتابة عنوان URL المستهدف بشكل ديناميكي. يحصل رمز JavaScript التالي على قيمة متغيّر يُسمى USER.name،
ويضيف هذه القيمة كمعلَمة طلب بحث إلى عنوان URL
http://mocktarget.apigee.net?user=، ثم يضبط target.url المحدّد مسبقًا على هذه القيمة.
context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));
context.removeVariable()
تزيل هذه الطريقة متغيّرًا من السياق.
البنية
context.removeVariable('variable-name');
خصائص عنصر السياق
السمة flow هي سلسلة تحدّد مسار خادم وكيل واجهة برمجة التطبيقات الحالي. تُستخدَم هذه السمة للإشارة إلى مسار العمل الذي تم إرفاق JavaScript به. القيم المسموح بها هي:
PROXY_REQ_FLOWPROXY_RESP_FLOWTARGET_REQ_FLOWTARGET_RESP_FLOW
يشمل كل اسم Flow كلاً من PreFlow وPostFlow وأي Flows شرطية محدّدة في ProxyEndpoints أو TargetEndpoints.
تكون هذه السمة الاختيارية مفيدة عندما يتم تنفيذ JavaScript الشائع في أكثر من مسار واحد، ولكن قد يختلف سلوكها حسب المسار الذي يتم تنفيذه فيه. استخدِم السمة Flow لوحدات JavaScript التي يُراد إعادة استخدامها في وسيطات متعددة لواجهة برمجة التطبيقات، والتي يكون فيها الرمز البرمجي مطلوبًا للتحقّق من Flow الحالي قبل تنفيذ المنطق.
مثال
ضبط عنوان HTTP فقط على مسار targetRequest:
if (context.flow=="TARGET_REQ_FLOW") { context.targetRequest.headers['TARGET-HEADER-X']='foo'; }
اضبط المحتوى فقط على مسار proxyResponse:
if (context.flow=="PROXY_RESP_FLOW") { context.proxyResponse.content='bar'; }
خريطة لأزواج الاسم/القيمة التي يمكن استخدامها لتمرير الكائنات بين سياستين يتم تنفيذهما ضمن سياق الرسالة نفسه.
مثال
ضبط قيمة في الجلسة:
context.session['key'] = 123;
احصل على القيمة من الجلسة:
var value = context.session['key']; // 123
العناصر الثانوية لكائن السياق
كما هو موضّح أدناه، يشمل تدفق وكيل واجهة برمجة التطبيقات الكامل أربع مراحل متميّزة، ولكل مرحلة منها كائن رسالة مرتبط وهو عنصر ثانوي لكائن السياق:
context.proxyRequest: رسالة الطلب الواردة التي تم تلقّيها من العميل الذي أرسل الطلب.context.targetRequest: رسالة الطلب الصادر المُرسَلة إلى خدمة الخلفية-
context.proxyResponse: رسالة الرد الصادر التي تم عرضها للعميل الذي أرسل الطلب. context.targetResponse: رسالة طلب واردة تم تلقّيها من خدمة الخلفية.

توضّح الأقسام التالية طرق وخصائص هذه العناصر:
context.*Request child objects
لكل معاملة HTTP يتم تنفيذها في خادم وكيل لواجهة برمجة التطبيقات، يتم إنشاء عنصرَي رسالة طلب: أحدهما وارد (الطلب من العميل) والآخر صادر (الطلب الذي تم إنشاؤه بواسطة خادم وكيل لواجهة برمجة التطبيقات وإرساله إلى هدف الخلفية).
يحتوي الكائن context على عناصر ثانوية تمثّل رسائل الطلبات هذه:
context.proxyRequest وcontext.targetRequest. تتيح لك هذه العناصر الوصول إلى السمات ضمن مسار الطلب الذي يقع في النطاق عند تنفيذ رمز JavaScript.
ملاحظة: يمكنك أيضًا استخدام العنصر shorthand request للوصول إلى هذه الخصائص في مسار الطلب. يشير العنصر request إلى context.proxyRequest أو context.targetRequest، وذلك حسب المكان الذي يتم فيه تنفيذ رمز JavaScript في التدفق.
context.*Request child object properties
| اسم السمة | الوصف |
|---|---|
url |
السمة يتألف عنوان URL الكامل للطلب من الخصائص التالية:
عند الحصول على
|
|
أمثلة: context.targetRequest.url = 'http://www.example.com/path?q1=1' context.targetRequest.protocol ='https'; |
|
headers |
عناوين طلبات HTTP كعملية ربط |
|
أمثلة: بالنسبة إلى طلب HTTP هذا: POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z context.proxyRequest.headers['Content-Type']; context.proxyRequest.headers['Authorization']; ستعرض القيم التالية application/json Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z |
|
queryParams |
معلّمات طلب البحث في رسالة الطلب على شكل عملية ربط |
|
أمثلة: "?city=PaloAlto&city=NewYork"يمكن الوصول إليه على النحو التالي: context.proxyRequest.queryParams['city']; // == 'PaloAlto' context.proxyRequest.queryParams['city'][0] // == 'PaloAlto' context.proxyRequest.queryParams['city'][1]; // == 'NewYork' context.proxyRequest.queryParams['city'].length(); // == 2 |
|
method |
فعل HTTP ( |
|
أمثلة: بالنسبة إلى هذا الطلب: POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z JavaScript التالي: context.proxyRequest.method; ستعرض القيمة التالية POST |
|
body |
نص الرسالة (الحِمل) لطلب HTTP يحتوي نص الطلب على العناصر التالية:
|
|
أمثلة: بالنسبة إلى نص XML: <customer number='1'> <name>Fred<name/> <customer/> للوصول إلى عناصر كائن XML على النحو التالي: var name = context.targetRequest.body.asXML.name; للوصول إلى سمات XML، استخدِم الترميز var number = context.targetRequest.body.asXML.@number; بالنسبة إلى نص طلب JSON: { "a": 1 , "b" : "2" } var a = context.proxyRequest.body.asJSON.a; // == 1 var b = context.proxyRequest.body.asJSON.b; // == 2 لقراءة مَعلمات النموذج، اتّبِع الخطوات التالية: "vehicle=Car&vehicle=Truck"v0 = context.proxyRequest.body.asForm['vehicle'][0]; v1 = context.proxyRequest.body.asForm['vehicle'][1]; |
عناصر الردّ الفرعية في context.*
لكل معاملة HTTP يتم تنفيذها في خادم وكيل لواجهة برمجة التطبيقات، يتم إنشاء عنصرَين لرسالة الاستجابة: أحدهما وارد (الاستجابة من خدمة الخلفية) والآخر صادر (الاستجابة التي يتم إرسالها إلى العميل).
يحتوي كائن السياق على كائنات ثانوية تمثّل رسائل الاستجابة هذه:
context.proxyResponse وcontext.targetResponse. تتيح لك هذه العناصر الوصول إلى السمات ضمن مسار الردّ الذي يكون في النطاق عند تنفيذ رمز JavaScript.
ملاحظة: يمكنك أيضًا استخدام العنصر المختصر response للوصول إلى هذه السمات من مسار الرد. يشير العنصر response إلى context.proxyResponse أو context.targetResponse، وذلك حسب المكان الذي يتم فيه تنفيذ رمز JavaScript في التدفق.
context.*Response object properties
| اسم السمة | الوصف |
|---|---|
headers |
تمثّل هذه السمة عناوين HTTP لرسالة الرد على شكل عملية ربط |
|
مثال: var cookie = context.targetResponse.headers['Set-Cookie']; |
|
status |
رمز الحالة مع رسالة الحالة كسمة. يتوفّر كل من رمز الحالة ورسالة الحالة كسمات. |
|
مثال: var status = context.targetResponse.status.code; // 200 var msg = context.targetResponse.status.message; // "OK" |
|
content |
نص HTTP (محتوى البيانات الأساسية) لرسالة الرد يحتوي محتوى الردّ على العناصر التالية: context.targetResponse.content.asXML; context.targetResponse.content.asJSON; |
استخدام تدوين .asXML
تتوفّر طريقة سهلة لتصفّح مستند XML باستخدام ترميز .asXML.
يوضّح هذا القسم كيفية استخدام هذا الترميز، وكيف يختلف عن request.content وcontext.proxyRequest.content.
على سبيل المثال:
request.content.asXML
أو
context.proxyRequest.content.asXML
يمكن استخدام الشكلين *.content و*.content.asXML في سياق سلسلة، وسيحوّلهما JavaScript إلى سلاسل. في الحالة الأولى
(*.content)، تتضمّن السلسلة جميع التعريفات بالإضافة إلى تعليقات XML. في الحالة الأخيرة (*.content.asXML)، يتم تنظيف قيمة السلسلة الخاصة بالنتيجة من التصريحات والتعليقات.
مثال
msg.content:
<?xml version="1.0" encoding="UTF-8"?> <yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US"> <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com" </yahoo:description> </yahoo:error> <!-- mg023.mail.gq1.yahoo.com uncompressed/chunked Sat Dec 14 01:23:35 UTC 2013 -->
msg.content.asXML:
<?xml version="1.0" encoding="UTF-8"?> <yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US"> <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com" </yahoo:description> </yahoo:error>
بالإضافة إلى ذلك، يمكنك استخدام النموذج .asXML لتصفّح التسلسل الهرمي لملف XML، وذلك عن طريق تحديد أسماء العناصر والسمات. لا يمكن التنقّل في التسلسل الهرمي باستخدام الصيغة الأخرى.
تصحيح الأخطاء باستخدام عبارات print() في JavaScript
إذا كنت تستخدم سياسة JavaScript لتنفيذ رمز JavaScript مخصّص، يمكنك استخدام الدالة print() لعرض معلومات تصحيح الأخطاء في أداة التتبّع. تتوفّر هذه الدالة مباشرةً من خلال نموذج عناصر JavaScript. على سبيل المثال:
if (context.flow=="PROXY_REQ_FLOW") { print("In proxy request flow"); var username = context.getVariable("request.queryparam.user"); print("Got query param: " + username); context.setVariable("USER.name", username); print("Set query param: " + context.getVariable("USER.name")); } if (context.flow=="TARGET_REQ_FLOW") { print("In target request flow"); var username = context.getVariable("USER.name"); var url = "http://mocktarget.apigee.net/user?" context.setVariable("target.url", url + "user=" + username); print("callout to URL: ", context.getVariable("target.url")); }
للاطّلاع على الناتج، انقر على الناتج من جميع المعاملات في أسفل نافذة "التتبُّع". يمكنك أيضًا العثور على الناتج في السمة "تتبُّع" المسماة stepExecution-stdout.
إنشاء وسائل شرح JavaScript باستخدام httpClient
استخدِم httpClient لإجراء طلبات HTTP متعددة ومتوازية وغير متزامنة إلى أي عنوان URL
من داخل رمز JavaScript مخصّص يتم تنفيذه في مسار خادم وكيل لواجهة برمجة التطبيقات.
يتم عرض العنصر httpClient من خلال نموذج كائن JavaScript في Apigee Edge.
لمحة عن httpClient
يتم عرض الكائن httpClient لرمز JavaScript المخصّص الذي يتم تنفيذه على Apigee Edge
من خلال نموذج كائن JavaScript. لربط JavaScript مخصّص بخادم وكيل لواجهة برمجة التطبيقات، عليك استخدام سياسة JavaScript. عند تنفيذ السياسة، يتم تنفيذ رمز JavaScript المخصّص.
يفيد الكائن httpClient في تطوير الخدمات المركّبة أو التطبيقات المدمجة. على سبيل المثال، يمكنك دمج طلبات متعددة من الخلفية في طريقة واحدة لواجهة برمجة التطبيقات.
يُستخدَم هذا العنصر عادةً كبديل لسياسة ServiceCallout.
في ما يلي نموذج استخدام أساسي. أنشئ مثيلاً لكائن Request، وخصّص له عنوان URL (على سبيل المثال، لخدمة خلفية تريد طلبها)، ثم استدعِ httpClient.send باستخدام كائن الطلب هذا.
var myRequest = new Request(); myRequest.url = "http://www.example.com"; var exchangeObj = httpClient.send(myRequest);
مرجع httpClient
يعرض HTTP Client طريقتَين: get() وsend().
httpClient.get()
طريقة سهلة لطلبات HTTP GET البسيطة، بدون إتاحة استخدام عناوين HTTP
الاستخدام
var exchangeObj = httpClient.get(url);
المرتجعات
تعرض الطريقة عنصر exchange. لا يحتوي هذا العنصر على أي سمات، ويتيح استخدام الطرق التالية:
-
isError(): (قيمة منطقية) تعرضtrueإذا لم يتمكّن httpClient من الاتصال بالخادم. يؤدي رمزَا حالة HTTP4xxو5xxإلى ظهورisError()false، لأنّه تم إكمال الاتصال وتم عرض رمز استجابة صالح. إذا عرضتisError()القيمةtrue، سيعرض طلبgetResponse()القيمةundefinedمن JavaScript. -
isSuccess(): (قيمة منطقية) تعرضtrueإذا اكتملت عملية الإرسال بنجاح. -
isComplete(): (قيمة منطقية) تعرضtrueإذا كان الطلب مكتملاً. -
waitForComplete(): توقِف سلسلة المحادثات مؤقتًا إلى أن يكتمل الطلب (إما بنجاح أو بحدوث خطأ). -
getResponse(): (كائن) تعرض كائن الاستجابة إذا كانhttpClient.send()مكتملاً وناجحًا. يحتوي العنصر الذي تم عرضه على الطرق والخصائص نفسها التي يحتوي عليها العنصر context.proxyResponse. اطّلِع على ملخّص عنصر السياق. -
getError(): (سلسلة) إذا نتج عن طلبhttpClient.send()حدوث خطأ، تعرض هذه السمة رسالة الخطأ كسلسلة.
مثال
أرسِل عنصر Request تم إعداده بالكامل ويتضمّن خصائص طلب HTTP. استخدِم دالة ردّ غير حظرية لمعالجة الردّ.
// Add the required the headers for making a specific API request var headers = {'X-SOME-HEADER' : 'some value' }; // Make a GET API request along with headers var myRequest = new Request("http://www.example.com","GET",headers); // Define the callback function and process the response from the GET API request function onComplete(response,error) { // Check if the HTTP request was successful if (response) { context.setVariable('example.status', response.status); } else { context.setVariable('example.error', 'Woops: ' + error); } } // Specify the callback Function as an argument httpClient.get(myRequest, onComplete);
استخدام سياسة JavaScript
استخدِم سياسة JavaScript لربط رمز JavaScript مخصّص بمسار خادم وكيل. اطّلِع على سياسة JavaScript.
مواضيع ذات صلة
- سياسة JavaScript
- نموذج كائن JavaScript
- للاطّلاع على نماذج وتعليمات أساسية، راجِع برمجة خوادم وكيل لواجهة برمجة التطبيقات باستخدام JavaScript.
- للاطّلاع على نماذج عملية لرموز JavaScript البرمجية، يُرجى الرجوع إلى نماذج Apigee Edge على GitHub.
مقالات "منتدى Apigee"
يمكنك العثور على هذه المقالات ذات الصلة في منتدى Apigee: