درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
این موضوع درباره «مدل شیء جاوا اسکریپت Apigee Edge» بحث میکند. اگر قصد دارید از خطمشی JavaScript برای افزودن JavaScript سفارشی به پراکسی API استفاده کنید، مهم است که این مدل را درک کنید.
درباره مدل شیء جاوا اسکریپت Edge
مدل شیء جاوا اسکریپت Apigee Edge اشیایی را با داراییهای مرتبط تعریف میکند که برای کد جاوا اسکریپت که در جریان پراکسی Apigee Edge اجرا میشود دردسترس هستند. از خطمشی JavaScript برای پیوست کردن این کد سفارشی به جریان پراکسی API استفاده میکنید.
اشیاء تعریفشده توسط این مدل در جریان پراکسی API دارای محدوده هستند، که به این معنی است که برخیاز اشیاء و خصوصیات فقط در نقاط خاصی از جریان دردسترس هستند. وقتی جاوا اسکریپت شما اجرا میشود، یک محدوده برای اجرا ایجاد میشود. در آن محدوده، این ارجاعهای شیء ایجاد میشود:
- زمینه: شیئی که دسترسی به زمینه پیام را فراهم میکند
- درخواست: مخففی که امکان دسترسی به شیء درخواست را فراهم میکند
- پاسخ: مخففی که امکان دسترسی به شیء درخواست را فراهم میکند
- crypto: توابع درهمساز مختلفی را ارائه میدهد
- چاپ: تابعی برای انتشار برونداد
- داراییها: دسترسی خواندن به داراییهای پیکربندی در خطمشی را مجاز میکند
شیء زمینهای
شیء context گستره جهانی دارد. این متغیر در همه جای جریان پراکسی API دردسترس است. چهار شیء فرزند دارد: proxyRequest، proxyResponse،
targetRequest، targetResponse. این اشیای فرزند در محدوده درخواست و پاسخ محیطی، درخواست و پاسخ پراکسی، یا درخواست و پاسخ هدف قرار میگیرند. برای مثال، اگر خطمشی جاوا اسکریپت در بخش نقطه پایانی پراکسی جریان اجرا شود،
آنگاه اشیای context.proxyRequest و context.proxyResponse در
محدوده هستند. اگر جاوا اسکریپت در جریان هدف اجرا شود، اشیای 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 تنظیم شده باشد. این ثابت برای اجرای کد مختص حوزه مفید است. «دریافتکننده» به شما امکان میدهد متغیرهای جریان را دریافت کنید و «تنظیمکننده» به شما امکان میدهد متغیرهای جریان را تنظیم کنید. این متغیرها معمولاً در جریان پراکسی دردسترس هستند و میتوانند توسط خطمشیهای دیگر مصرف شوند.
برای جزئیات بیشتر و مثالها، مرجع شیء زمینهای زیر را ببینید.
شیء رمزارز
شیء رمزنگاری پشتیبانی رمزنگاری پایه و با عملکرد بالا را به «مدل شیء جاوا اسکریپت» اضافه میکند. برای جزئیات بیشتر و مثالها، مرجع شیء رمزنگاری را در زیر ببینید.
درخواست و پاسخ اشیا
اشیاء request و response ارجاعهای کوتهنویسیشده به درخواست و پاسخ محیطی هستند، یا درخواست و پاسخ پراکسی یا درخواست و
پاسخ هدف. اشیا ارجاعشده توسط این متغیرها به زمینهای که خطمشی جاوا اسکریپت در آن اجرا میشود بستگی دارد. اگر JavaScript در جریان نقطه پایانی پراکسی اجرا شود، متغیرهای درخواست و پاسخ به context.proxyRequest و context.proxyResponse اشاره میکنند. اگر جاوا اسکریپت در یک جریان هدف اجرا شود، متغیرها به context.targetRequest و context.targetResponse اشاره میکنند.
تابع print()
مدل شیء جاوا اسکریپت شامل تابع print() است که میتوانید از آن برای برونداد اطلاعات اشکالزدایی
به ابزار «پیگیری Edge» استفاده کنید. به اشکالزدایی با دستورات JavaScript print() مراجعه کنید.
شیء خصوصیات
هنگام استفاده از عنصر properties به مقادیر آن داراییها دسترسی پیدا کند.
برای مثال، اگر پیکربندی جاوا اسکریپت شما حاوی موارد زیر باشد:
<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 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)); }
مرجع شیء رمزارز
شیء رمزنگاری به شما امکان میدهد توابع درهمسازی رمزنگاری پایه را در جاوا اسکریپت انجام دهید.
شیء رمزارز دارای محدوده جهانی است. این متغیر در همه جای جریان پراکسی API دردسترس است. «رمزنگاری» به شما امکان میدهد با این اشیای درهمسازی کار کنید:
- 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])
پارامترها
- قالب - (رشته) پیادهسازی زیرین برای این پارامتر java.text.SimpleDateFormat است. برای مثال: 'yyyy-MM-DD HH:mm:ss.SSS'
- منطقه زمانی - (رشته، اختیاری) پیادهسازی زیربنایی برای این پارامتر java.util.TimeZone است. این پارامتر همان پیشفرض است: UTC
- زمان - (عدد، اختیاری) مقدار مُهر زمان یونیکس برای قالببندی. پیشفرض: زمان فعلی
مثالها
زمان فعلی را تا میلیثانیه دریافت کنید:
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'; }
مرجع شیء زمینهای
برای هر تراکنش درخواست/پاسخ اجراشده توسط پراکسی API، یک شی context ایجاد میشود. شیء context روشهایی را برای دریافت، تنظیم، و برداشتن متغیرهای مربوط به هر تراکنش آشکار میکند.
متغیرها ویژگیهای مختص به یک تراکنش را تعریف میکنند. زمان روز، منطقه جغرافیایی
کارخواه درخواستکننده، عامل کاربر کارخواه درخواستکننده، و نشانی وب سرویس هدف همگی نمونههایی از متغیرهایی هستند که در context دردسترس هستند. بنابراین،
context برای ساختن منطقی که برای اجرای رفتار سفارشی به این داراییها متکی است مفید است.
به مرجع متغیرهای جاریسازی و خطمشی استخراج متغیرها مراجعه کنید.
زمینه خلاصه شیء
این جدول بهطور خلاصه شیء زمینهای و فرزندان آن را توصیف میکند و داراییهایی را که به هریک از آنها پیوند داده شده است فهرست میکند.
| نام | شرح | مشخصات |
|---|---|---|
context |
پوششی برای زمینه خط لوله پردازش پیام و درخواست و پاسخ جریانهایی که توسط ProxyEndpoint و TargetEndpoint اجرا میشوند. | جریان، جلسه |
context.proxyRequest |
شیئی که پیام درخواست ورودی به ProxyEndpoint را نشان میدهد (از برنامه درخواستکننده به پراکسی API) | سرایندها، پارامترهای پُرسمان، روش، بدنه، نشانی وب |
context.targetRequest |
شیئی که پیام درخواست خروجی را از TargetEndpoint نشان میدهد (از پراکسی API به سرویس زیرینه). | سرایندها، پارامترهای پُرسمان، روش، بدنه، نشانی وب |
context.targetResponse |
شیئی که نشاندهنده پیام پاسخ هدف ورودی (از سرویس زیرینه به پراکسی API) است | سرایندها، محتوا، وضعیت |
context.proxyResponse |
شیئی که نشاندهنده پیام پاسخ پراکسی خروجی (از پراکسی API به برنامه درخواستکننده) است | سرایندها، محتوا، وضعیت |
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);
مثال
سناریو رایج برای تنظیم متغیر زمانی است که یک پراکسی API باید نشانی وب هدف را بهصورت پویا بنویسد. «جاوا اسکریپت» زیر مقدار متغیری بهنام USER.name را دریافت میکند،
آن مقدار را بهعنوان پارامتر پُرسمان به نشانی وب
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 رشتهای است که جریان پراکسی «میانای برنامهسازی کاربردی» کنونی را شناسایی میکند. این دارایی برای نشان دادن «جریانی» که «جاوا اسکریپت» به آن پیوست شده است استفاده میشود. مقادیر پشتیبانیشده
عبارتاند از:
PROXY_REQ_FLOWPROXY_RESP_FLOWTARGET_REQ_FLOWTARGET_RESP_FLOW
هر نام «جریان» شامل «جریان پیشاز جریان اصلی»، «جریان پساز جریان اصلی»، و هر «جریان» شرطی تعریفشده در ProxyEndpoints یا TargetEndpoints میشود.
این دارایی اختیاری زمانی مفید است که جاوا اسکریپت مشترک در بیشاز یک «جریان» اجرا شود، اما ممکن است رفتار آن بسته به «جریانی» که در آن اجرا میشود متفاوت باشد. از دارایی «جریان» برای واحدهای جاوا اسکریپت که برای استفاده مجدد در چندین پراکسی API درنظر گرفته شدهاند استفاده کنید، که در آن کد باید «جریان» فعلی را قبلاز اجرای منطق بررسی کند.
مثال
سرایند HTTP را فقط در «جریان درخواست هدف» تنظیم کنید:
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['key'] = 123;
مقدار را از جلسه دریافت کنید:
var value = context.session['key']; // 123
فرزندان شیء زمینهای
همانطور که در زیر نشان داده شده است، «جریان» کامل کارگزار نیابت API شامل چهار مرحله متمایز است که هرکدام شیء پیام مرتبطی دارد که فرزند شیء زمینهای است:
-
context.proxyRequest: پیام درخواست ورودی که از کارخواه درخواستکننده دریافت شده است. context.targetRequest: پیام درخواست خروجی که به سرویس زیرینه ارسال شده است.-
context.proxyResponse: پیام پاسخ برونسپاری به کارخواه درخواستکننده برگردانده شد. context.targetResponse: پیام درخواست ورودی که از سرویس زیرینه دریافت شده است.

بخشهای زیر روشها و خواص این اشیا را توصیف میکند:
context.*Request child objects
برای هر تراکنش HTTP که در یک پراکسی API اجرا میشود، دو شیء پیام درخواست ایجاد میشود: یکی ورودی (درخواست از مشتری) و دیگری خروجی (درخواست تولیدشده توسط پراکسی API و ارسالشده به هدف زیرینه).
شیء context دارای اشیای فرزندی است که این پیامهای درخواست را نشان میدهند:
context.proxyRequest و context.targetRequest. این اشیا به شما امکان میدهند
به داراییهای درون جریان درخواست که در محدوده زمانی اجرای کد جاوا اسکریپت شما است
دسترسی داشته باشید.
توجه: همچنین میتوانید از شیء کوتهنویسی request برای دسترسی به این داراییها در جریان درخواست استفاده کنید. شیء request به context.proxyRequest یا context.targetRequest اشاره میکند، بسته به اینکه کد جاوا اسکریپت شما در کجای جریان اجرا میشود.
context.*Request خصوصیات شیء فرزند
| نام دارایی | شرح |
|---|---|
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 جاوا اسکریپت زیر: 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.*Response child objects
برای هر تراکنش HTTP که در یک پراکسی API اجرا میشود، دو شیء پیام پاسخ ایجاد میشود: یکی ورودی (پاسخ از سرویس زیرینه) و دیگری خروجی (پاسخ ارسالشده به مشتری).
شیء زمینهای دارای اشیای فرزندی است که این پیامهای پاسخ را نشان میدهند:
context.proxyResponse و context.targetResponse. این اشیا به شما امکان میدهند
به داراییهای موجود در جریان پاسخ که هنگام اجرای کد جاوا اسکریپت شما
در محدوده است دسترسی پیدا کنید.
توجه: همچنین میتوانید از شیء کوتهنویسی response برای دسترسی به
این داراییها از جریان پاسخ استفاده کنید. شیء response به context.proxyResponse یا context.targetResponse اشاره میکند، بسته به اینکه کد جاوا اسکریپت شما در کجای جریان اجرا میشود.
context.*خصوصیتهای شیء «پاسخ»
| نام دارایی | شرح |
|---|---|
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
بااستفاده از نماد .asXML، روشی آسان برای پیمایش در سند XML وجود دارد.
این بخش نحوه استفاده از این نمادگذاری و تفاوت آن با
request.content و context.proxyRequest.content را توضیح میدهد.
برای مثال:
request.content.asXML
یا
context.proxyRequest.content.asXML
هر دو فرم *.content و *.content.asXML را میتوان در بافت رشتهای استفاده کرد و جاوا اسکریپت آنها را به رشته تبدیل میکند. در حالت اول
(*.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() در جاوا اسکریپت
اگر از خطمشی جاوا اسکریپت برای اجرای کد جاوا اسکریپت سفارشی استفاده میکنید، توجه داشته باشید که میتوانید از تابع 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 پیدا کنید.
ساختن پیامهای نوشتاری جاوا اسکریپت با httpClient
از httpClient برای ایجاد چندین درخواست HTTP موازی و ناهمزمان به هر نشانی وب
از درون کد سفارشی جاوا اسکریپت که در جریان پراکسی API اجرا میشود استفاده کنید.
شیء httpClient توسط مدل شیء جاوا اسکریپت Apigee Edge آشکار میشود.
درباره httpClient
شیء httpClient ازطریق مدل شیء جاوا اسکریپت درمعرض کد جاوا اسکریپت سفارشی اجراشده در Apigee Edge قرار میگیرد. برای پیوست کردن جاوا اسکریپت سفارشی به پراکسی API، از
خطمشی جاوا اسکریپت استفاده میکنید. وقتی خطمشی اجرا میشود، کد جاوا اسکریپت سفارشی اجرا میشود.
شیء httpClient برای توسعه خدمات ترکیبی یا
ترکیبها مفید است. برای مثال، میتوانید چندین فراخوانی زیرینه را در یک روش API ادغام کنید.
این شیء معمولاً بهعنوان جایگزینی برای خطمشی «دعوت به سرویس» استفاده میشود.
در اینجا یک الگوی استفاده اولیه آورده شده است. یک شیء «درخواست» نمونهسازی کنید، نشانی وبی (برای مثال، برای
سرویس زیرینهای که میخواهید با آن تماس بگیرید) به آن اختصاص دهید، و با آن شیء
درخواست، 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(): (بولی) اگر httpClient نتواند به سرور متصل شود،trueرا برمیگرداند. رمزهای وضعیت اچتیتیپی4xxو5xxمنجر بهisError()falseمیشود، زیرا اتصال تکمیل شده است و رمز پاسخ معتبری برگردانده شده است. اگرisError()مقدارtrueرا برگرداند، تماس باgetResponse()مقدار جاوا اسکریپت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 سفارشی به جریان پراکسی استفاده کنید. خطمشی جاوا اسکریپت را ببینید.
موضوعات مرتبط
- خطمشی جاوا اسکریپت
- شیء جاوا اسکریپت مدل
- برای نمونههای اولیه و دستورالعملها، برنامهنویسی میانای برنامهسازی کاربردی کارگزاران با جاوا اسکریپت را ببینید.
- برای نمونههای کد جاوا اسکریپت کاری، نمونههای Apigee Edge را در GitHub ببینید.
مقالات انجمن Apigee
این مقالههای مرتبط را میتوانید در انجمن Apigeeپیدا کنید: