نموذج كائن JavaScript

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

يتناول هذا الموضوع نموذج كائن JavaScript في Apigee Edge. من المهم أن تفهم هذا النموذج إذا كنت تنوي استخدام سياسة JavaScript لإضافة رمز JavaScript مخصّص إلى واجهة برمجة تطبيقات الخادم الوكيل.

لمحة عن نموذج كائن JavaScript على Edge

يعمل نموذج كائن JavaScript في Apigee Edge على تحديد الكائنات ذات الخصائص المرتبطة بها المتاحة لرمز JavaScript الذي يتم تنفيذه ضمن مسار الخادم الوكيل في Apigee Edge. تستخدم JavaScript لإرفاق هذا الرمز المخصّص بمسار الخادم الوكيل لواجهة برمجة التطبيقات.

الكائنات المحدّدة في هذا النموذج لها نطاق ضمن تدفق الخادم الوكيل لواجهة برمجة التطبيقات، ما يعني أن كائنات وخصائص معينة متاحة فقط في نقاط محددة من التدفق. عندما يكون يتم تنفيذ JavaScript ويتم إنشاء نطاق للتنفيذ. في هذا النطاق، إنشاء مراجع الكائنات التالية:

  • السياق: كائن يوفر إمكانية الوصول إلى سياق الرسالة
  • request: اختصار يسمح بالوصول إلى عنصر الطلب
  • response: اختصار يسمح بالوصول إلى كائن الطلب.
  • 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 في تدفق نقطة نهاية الخادم الوكيل، فإن الطلب تشير متغيرات الاستجابة إلى context.proxyRequest context.proxyResponse إذا تم تشغيل JavaScript في تدفق مستهدف، فعندئذٍ تكون المتغيرات يشيران إلى context.targetRequest وcontext.targetResponse.

يتضمّن نموذج كائن JavaScript دالة print() يمكنك استخدامها لتصحيح الأخطاء. المعلومات إلى أداة تتبع الحافة. يُرجى الاطّلاع على مقالة تصحيح الأخطاء باستخدام JavaScript print() . البيانات.

كائن الخصائص

عند استخدام عنصر في تهيئة السياسة، يستطيع رمز JavaScript الوصول إلى قيم تلك الخصائص باستخدام متغيّر 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));
}

مرجع عنصر التشفير

يتيح لك كائن التشفير تنفيذ وظائف التجزئة المشفرة الأساسية في JavaScript.

لكائن التشفير نطاق عمومي. وهي متاحة في كل مكان داخل تدفق الخادم الوكيل لواجهة برمجة التطبيقات. يتيح لك التشفير العمل مع كائنات التجزئة التالية:

  • 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. هذه المَعلمة هي sameDefault: التوقيت العالمي المنسَّق (UTC).
  • time - (رقم، اختياري) قيمة الطابع الزمني لنظام 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 (من خادم وكيل واجهة برمجة التطبيقات إلى خدمة الخلفية). عناوين، معلَمات طلب بحث، طريقة، نص، عنوان URL
context.targetResponse يشير هذا المصطلح إلى كائن يمثّل رسالة الاستجابة المستهدَفة الواردة (من خدمة الخلفية). إلى الخادم الوكيل لواجهة برمجة التطبيقات) العناوين، المحتوى، الحالة
context.proxyResponse كائن يمثل رسالة استجابة الخادم الوكيل الصادرة (من الخادم الوكيل لواجهة برمجة التطبيقات إلى التطبيق الذي يطلب الربط) العناوين، المحتوى، الحالة
context.flow اسم التدفق الحالي. ويمكنك الاطّلاع على context.flow أدناه.
context.session خريطة لأزواج الأسماء/القيم التي يمكنك استخدامها لتمرير الكائنات بين خطوتين مختلفتين يتم التنفيذ في نفس السياق. مثلاً: context.session['key'] = 123 لمزيد من المعلومات عن حالات عدم استخدام هذا الكائن وحالات عدم استخدامه، راجِع هذا مناقشة في منتدى Apigee

السياق طرق الكائنات

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

خصائص عناصر السياق

context.flow

السمة flow هي سلسلة تحدِّد التدفق الحالي للخادم الوكيل لواجهة برمجة التطبيقات. هذا النمط للإشارة إلى التدفق الذي يتم إرفاق JavaScript به. القيم المسموح بها هي:

  • PROXY_REQ_FLOW
  • PROXY_RESP_FLOW
  • TARGET_REQ_FLOW
  • TARGET_RESP_FLOW

يشمل كل اسم من مسارات التدفق PreFlow وPostFlow وأي تدفقات شرطية محددة في نقاط نهاية الخادم الوكيل أو نقاط النهاية المستهدفة

تكون هذه الخاصية الاختيارية مفيدة عند تنفيذ JavaScript الشائع في أكثر من مسار، ولكن قد يختلف سلوكها حسب مسار التنفيذ. استخدام خاصية التدفق لوحدات JavaScript المُعَدّة لإعادة استخدامها في الخوادم الوكيلة المتعددة لواجهة برمجة التطبيقات، حيث يتم مطلوبة للتحقق من التدفق الحالي قبل تنفيذ المنطق.

مثال

ضبط عنوان HTTP فقط على تدفق targetRequest:

if (context.flow=="TARGET_REQ_FLOW") {
     context.targetRequest.headers['TARGET-HEADER-X']='foo';
}

اضبط المحتوى فقط على مسار استجابة الخادم الوكيل:

if (context.flow=="PROXY_RESP_FLOW") {
     context.proxyResponse.content='bar';
}

context.session

خريطة لأزواج الأسماء/القيم التي يمكن استخدامها لتمرير العناصر بين سياستين يتم تنفيذهما ضمن سياق الرسالة ذاته.

مثال

تحديد قيمة في الجلسة:

context.session['key']  = 123;

الحصول على القيمة من الجلسة:

var value = context.session['key']; // 123

عناصر السياق الثانوية

كما هو موضّح أدناه، يشمل التدفق الكامل لخادم وكيل واجهة برمجة التطبيقات أربع مراحل مختلفة، تتميّز كل منها كائن رسالة مرتبط يكون عنصرًا ثانويًا لكائن السياق:

  • context.proxyRequest: رسالة الطلب الواردة التي تم استلامها من المستخدم الذي قدّم الطلب البرنامج.
  • context.targetRequest: رسالة طلب البريد الصادر التي تم إرسالها إلى الواجهة الخلفية خدمة ما.
  • context.proxyResponse: تم إرجاع رسالة الاستجابة الصادرة إلى العميل صاحب الطلب.
  • context.targetResponse: رسالة الطلب الواردة التي تم استلامها من الخلفية خدمة ما.

توضّح الأقسام التالية طرق هذه الكائنات وخصائصها:

السياق.*طلب العناصر الثانوية

بالنسبة إلى كل معاملة HTTP يتم تنفيذها في الخادم الوكيل لواجهة برمجة التطبيقات، تتم الإشارة إلى كائنين لرسالة الطلب تم الإنشاء: واحد الوارد (الطلب من العميل) والآخر الصادر (الطلب الذي تم إنشاؤه بواسطة الخادم الوكيل لواجهة برمجة التطبيقات وتم إرساله إلى الواجهة الخلفية).

يحتوي الكائن context على كائنات فرعية تمثل رسائل الطلب هذه: context.proxyRequest وcontext.targetRequest تتيح لك هذه الكائنات الوصول إلى الخصائص ضمن مسار الطلب الذي يدخل ضمن النطاق عندما يكون رمز JavaScript وتنفيذه.

ملاحظة: يمكنك أيضًا استخدام كائن الاختصار request للوصول إلى. هذه الخصائص في تدفق الطلب. يشير الكائن request إلى أي مما يلي: context.proxyRequest أو context.targetRequest، حسب المكان التدفق الذي تنفذه رمز JavaScript.

السياق.*طلب خصائص العنصر الثانوي

اسم الموقع الوصف
url

السمة url هي خاصية ملائمة للقراءة/الكتابة تجمع بين المخطَّط والمضيف والمنفذ والمسار ومعلمات طلب البحث لـ targetRequest.

يتألف عنوان URL الكامل للطلب من السمات التالية:

  • البروتوكول: بروتوكول عنوان URL (مثل HTTP وHTTPS)
  • المنفذ: المنفذ (على سبيل المثال، :80، :443)
  • المضيف: مضيف عنوان URL (على سبيل المثال، www.example.com)
  • path: مسار معرّف الموارد المنتظم (URI) (على سبيل المثال، /v1/mocktarget)

عند الحصول على url، يتم عرض عنوان URL بالتنسيق التالي:

protocol://host:port/path?queryParams

أمثلة:

context.targetRequest.url = 'http://www.example.com/path?q1=1'
context.targetRequest.protocol ='https';
headers

عناوين طلبات HTTP كربط لـ String => List

أمثلة:

بالنسبة إلى طلب HTTP هذا:

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
محتوى JavaScript التالي:
context.proxyRequest.headers['Content-Type'];
context.proxyRequest.headers['Authorization'];

ستُرجع القيم التالية

application/json
Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
queryParams

معلَمات طلب البحث لرسالة الطلب كربط لـ String => List.

أمثلة:

"?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 (GET، POST، PUT، DELETE، PATCH وما إلى ذلك) مرتبطة بالطلب

أمثلة:

بالنسبة إلى هذا الطلب:

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z

رمز JavaScript التالي:

context.proxyRequest.method;

ستعرض القيمة التالية

POST
body

نص الرسالة (الحمولة) لطلب HTTP.

يحتوي نص الطلب على الأعضاء التاليين:

  • context.targetRequest.body.asXML;
  • context.targetRequest.body.asJSON;
  • context.targetRequest.body.asForm;

أمثلة:

بالنسبة إلى نص 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];

السياق.*الرد على العناصر الثانوية

بالنسبة إلى كل معاملة HTTP يتم تنفيذها في الخادم الوكيل لواجهة برمجة التطبيقات، تتم الإشارة إلى كائنين من رسائل الاستجابة تم الإنشاء: واحد inbound (الاستجابة من خدمة الخلفية) وواحدة صادرة (الاستجابة إلى العميل مرة أخرى).

يحتوي كائن السياق على كائنات فرعية تمثل رسائل الرد هذه: "context.proxyResponse" وcontext.targetResponse" تتيح لك هذه الكائنات الوصول إلى الخصائص ضمن مسار الاستجابة الذي يقع ضمن النطاق عندما يكون رمز JavaScript وتنفيذه.

ملاحظة: يمكنك أيضًا استخدام كائن الاختصار response للوصول إلى. هذه الخصائص من تدفق الاستجابة. يشير الكائن response إلى أي مما يلي: context.proxyResponse أو context.targetResponse، حسب المكان التدفق الذي تنفذه رمز JavaScript.

السياق.*خصائص كائن الاستجابة

اسم الموقع الوصف
headers

عناوين HTTP لرسالة الاستجابة كتعيين String => List.

مثال:

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، وذلك عن طريق لتحديد أسماء العناصر والسمات. لا يمكن تجاوز التسلسل الهرمي باستخدام الصيغة الأخرى.

تصحيح الأخطاء باستخدام JavaScript عبارات print()

إذا كنت تستخدم سياسة 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.

إليك نمط الاستخدام الأساسي. إنشاء مثيل كائن طلب، وتعيين عنوان URL له (على سبيل المثال، إلى التي تريد الاتصال بها في الخلفية التي تريد الاتصال بها)، ثم اتصل بـ httpClient.send لإعلامهم بهذا الطلب الخاص بك.

var myRequest = new Request();
myRequest.url = "http://www.example.com";
var exchangeObj = httpClient.send(myRequest);

مرجع httpClient

يكشف عميل HTTP عن طريقتين: get() وsend().

httpClient.get()

طريقة ملائمة لطلبات HTTP GET البسيطة، بدون دعم لعناوين HTTP

الاستخدام

var exchangeObj = httpClient.get(url);

المرتجعات

تُرجع الطريقة كائن exchange. لا يحتوي هذا الكائن على أي خصائص، تعرض الطرق التالية:

  • isError(): (قيمة منطقية) تعرض true إذا تعذّر على httpClient الاتصال بالخادم. ينتج عن رمزَي حالة HTTP 4xx و5xx ما يلي: isError() false، نظرًا لاكتمال عملية الربط والحصول على ردّ صالح الذي تم إرجاعه. إذا عرضت ميزة "isError()" مبلغ true، سيتم إجراء مكالمة إلى تعرض getResponse() ملف JavaScript undefined.
  • isSuccess(): (منطقي) يعرض true إذا كان الإرسال مكتملاً و وناجح.
  • isComplete(): (منطقي) تعرض القيمة true إذا كان الطلب مكتملة.
  • waitForComplete(): إيقاف سلسلة المحادثات مؤقتًا إلى أن يكتمل الطلب (بنجاح) أو الخطأ).
  • getResponse(): (كائن) يعرض كائن الاستجابة إذا كانت تم إكمال httpClient.send() بنجاح ونجاحها. يحتوي الكائن المرتجع على طرق وخصائص متطابقة تمامًا مثل الكائن context.proxyResponse. راجِع ملخّص عنصر السياق.
  • getError(): (سلسلة) إذا نتج عن المكالمة إلى httpClient.send() خطأ، تقوم بإرجاع رسالة الخطأ كسلسلة.

مثال

إرسال عنصر طلب تم إعداده بالكامل يحتوي على خصائص 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.

مواضيع ذات صلة

مقالات في منتدى Apigee

يمكنك العثور على هذه المقالات ذات الصلة في Apigee المنتدى: