يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
يناقش هذا الموضوع نموذج كائن JavaScript في Apigee Edge. ومن المهم فهم هذا النموذج إذا كنت تنوي استخدام سياسة JavaScript لإضافة لغة JavaScript مخصّصة إلى خادم وكيل لواجهة برمجة التطبيقات.
لمحة عن نموذج كائن Edge JavaScript
يحدّد نموذج عنصر JavaScript في Apigee Edge العناصر ذات الخصائص المرتبطة المتاحة لرمز JavaScript الذي يتم تنفيذه ضمن تدفق الخادم الوكيل Apigee Edge. ويمكنك استخدام سياسة JavaScript لإرفاق هذا الرمز المخصّص بمسار الخادم الوكيل لواجهة برمجة التطبيقات.
تشتمل العناصر التي يحدّدها هذا النموذج على نطاق ضمن تدفق الخادم الوكيل لواجهة برمجة التطبيقات، ما يعني توفُّر عناصر وخصائص معيّنة في نقاط محدّدة فقط في المسار. عند تنفيذ JavaScript، يتم إنشاء نطاق للتنفيذ. في هذا النطاق، يتم إنشاء مراجع الكائنات التالية:
- السياق: كائن يوفر إمكانية الوصول إلى سياق الرسالة
- request: اختصار يسمح بالوصول إلى كائن الطلب
- Response: اختصار يسمح بالوصول إلى كائن الطلب
- crypto: يوفر دوال تجزئة مختلفة
- print: دالة لإصدار المخرجات
- properties: يسمح بالوصول لقراءة خصائص الإعداد في السياسة
كائن السياق
يحتوي الكائن 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)); }
مرجع عناصر التشفير
يتيح لك كائن التشفير تنفيذ وظائف تجزئة التشفير الأساسية في JavaScript.
لكائن التشفير نطاق عمومي. وهو متاح في كل مكان ضمن تدفق الخادم الوكيل لواجهة برمجة التطبيقات. يتيح لك Crypto التعامل مع كائنات التجزئة التالية:
- SHA-1
- SHA256
- SHA512
- MD5
التعامل مع كائنات SHA-1
يمكنك إنشاء كائنات SHA-1 وتحديثها وتحويلها إلى قيم سداسية عشرية وbase64.
إنشاء كائن SHA-1 جديد
var _sha1 = crypto.getSHA1();
تعديل كائن SHA-1
البنية
_sha1.update(value);
المَعلمات
- 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);
المَعلمات
- 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);
المَعلمات
- 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);
المَعلمات
- 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: التوقيت العالمي المنسق
- 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
طُرقًا للحصول على متغيّرات مرتبطة بكل معاملة وضبطها وإزالتها.
تحدد المتغيرات الخصائص الخاصة بمعاملة معيّنة. ومن الأمثلة على المتغيّرات المتوفرة في context
هي الوقت من اليوم واللغة للعميل الذي قدّم الطلب ووكيل المستخدم للعميل الذي قدّم الطلب وعنوان URL للخدمة المستهدفة. وبالتالي، تكون السمة 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');
خصائص عنصر السياق
السمة flow
هي سلسلة تحدّد التدفق الحالي للخادم الوكيل لواجهة برمجة التطبيقات. تُستخدَم هذه السمة للإشارة إلى التدفق الذي يتم إرفاق JavaScript به. القيمتان المسموح بإدراجهما هما:
PROXY_REQ_FLOW
PROXY_RESP_FLOW
TARGET_REQ_FLOW
TARGET_RESP_FLOW
يشمل كل اسم لتدفق البيانات PreFlow وPostFlow وأي تدفقات شرطية تم تحديدها في ProxyEndpoints أو TargetEndpoints.
وتُعدّ هذه السمة الاختيارية مفيدة عند تنفيذ لغة JavaScript الشائعة في أكثر من مسار واحد، ولكنّها قد تختلف سلوكها حسب التدفق الذي يتم تنفيذه فيه. استخدِم خاصية Flow لوحدات JavaScript المعدّة لإعادة استخدامها في عدة خوادم وكيل لواجهة برمجة التطبيقات، حيث يكون الرمز مطلوبًا للتحقق من التدفق الحالي قبل تنفيذ المنطق.
مثال
تحديد عنوان HTTP فقط في targetRequest Flow:
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
: رسالة الطلب الواردة التي تم استلامها من خدمة الخلفية.
توضح الأقسام التالية طرق هذه الكائنات وخصائصها:
السياق.*طلب الكائنات الفرعية
بالنسبة إلى كل معاملة HTTP يتم تنفيذها في خادم وكيل لواجهة برمجة التطبيقات، يتم إنشاء كائنَين لرسالة طلب: أحدهما inbound (طلب من العميل) والآخر inbound (الطلب الذي تم إنشاؤه من خلال الخادم الوكيل لواجهة برمجة التطبيقات والذي يتم إرساله إلى الواجهة الخلفية).
يحتوي الكائن context
على عناصر ثانوية تمثّل رسائل الطلب هذه: context.proxyRequest
وcontext.targetRequest
. وتتيح لك هذه الكائنات الوصول إلى الخصائص ضمن تدفق الطلب الذي يكون ضمن النطاق عند تنفيذ رمز JavaScript.
ملاحظة: يمكنك أيضًا استخدام الكائن الاختزالي request
للوصول إلى هذه السمات في مسار الطلب. يشير الكائن request
إلى context.proxyRequest
أو context.targetRequest
، بناءً على مكان تنفيذ رمز JavaScript في التدفق.
السياق.*طلب خصائص الكائن الفرعي
اسم الموقع | الوصف |
---|---|
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ملف JavaScript التالي: 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]; |
السياق.*الكائنات الثانوية للاستجابة
بالنسبة إلى كل معاملة HTTP يتم تنفيذها في خادم وكيل لواجهة برمجة التطبيقات، يتم إنشاء كائنَين لرسالة الاستجابة: أحدهما inbound (الاستجابة من خدمة الخلفية) والأخرى outbound (الاستجابة التي تم إرسالها إلى العميل).
يحتوي كائن السياق على عناصر ثانوية تمثّل رسالتَي الاستجابة هاتين: context.proxyResponse
وcontext.targetResponse
. وتتيح لك هذه الكائنات الوصول إلى الخصائص ضمن تدفق الاستجابة المحدد عند تنفيذ رمز JavaScript.
ملاحظة: يمكنك أيضًا استخدام الكائن الاختزالي response
للوصول إلى هذه السمات من مسار الاستجابة. يشير الكائن response
إلى context.proxyResponse
أو context.targetResponse
، بناءً على مكان تنفيذ رمز JavaScript في التدفق.
السياق.*خصائص عنصر الاستجابة
اسم الموقع | الوصف |
---|---|
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، من خلال
تحديد أسماء العناصر والسمات. لا يمكن اجتياز التسلسل الهرمي باستخدام البنية الأخرى.
تصحيح الأخطاء باستخدام عبارات 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);
httpمرجع العميل
يعرض عميل HTTP طريقتين: get()
وsend()
.
httpClient.get()
طريقة ملائمة لطلبات HTTP GET
البسيطة، مع عدم دعم عناوين HTTP.
الاستخدام
var exchangeObj = httpClient.get(url);
المرتجعات
وتُرجع الطريقة كائن exchange
. لا يحتوي هذا الكائن على سمات، ويعرض الطرق التالية:
isError()
: (منطقي) تعرض القيمةtrue
إذا تعذّر على httpClient الاتصال بالخادم. يؤدي رمزا حالة HTTP4xx
و5xx
إلىisError()
false
، نظرًا لاكتمال الاتصال وعرض رمز استجابة صالح. وإذا عرَضَisError()
الخطأtrue
، سيؤدي استدعاءgetResponse()
إلى عرض رمز JavaScriptundefined
.isSuccess()
: (منطقية) تعرضtrue
إذا كان الإرسال قد اكتمل بنجاح.isComplete()
: (منطقية) تعرضtrue
إذا اكتمل الطلب.waitForComplete()
: لإيقاف سلسلة المحادثات مؤقتًا حتى اكتمال الطلب (بنجاح أو خطأ).getResponse()
: (كائن) يعرض كائن الاستجابة إذا كانhttpClient.send()
كاملاً وناجحًا. ويحتوي الكائن المعروض على الطرق والخصائص نفسها التي يتضمّنها الكائن content.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.
مواضيع ذات صلة
- سياسة JavaScript
- نموذج عنصر JavaScript
- للحصول على النماذج والتعليمات الأساسية، يُرجى الاطّلاع على الخوادم الوكيلة لواجهة برمجة التطبيقات للبرمجة باستخدام JavaScript.
- لتعمل نماذج رموز JavaScript، يمكنك الاطّلاع على نماذج Apigee Edge على GitHub.
مقالات في منتدى Apigee
يمكنك العثور على هذه المقالات ذات الصلة في منتدى Apigee: