شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
این موضوع در مورد مدل شی جاوا اسکریپت Apigee Edge بحث می کند. اگر قصد دارید از خط مشی جاوا اسکریپت برای افزودن جاوا اسکریپت سفارشی به پروکسی API استفاده کنید، درک این مدل بسیار مهم است.
درباره مدل شی جاوا اسکریپت Edge
مدل شی جاوا اسکریپت Apigee Edge اشیایی را با ویژگی های مرتبط تعریف می کند که برای اجرای کد جاوا اسکریپت در جریان پروکسی Apigee Edge در دسترس هستند. شما از خط مشی جاوا اسکریپت برای پیوست کردن این کد سفارشی به یک جریان پروکسی API استفاده می کنید.
اشیاء تعریف شده توسط این مدل دارای محدوده در جریان پروکسی API هستند، به این معنی که اشیاء و خصوصیات خاص فقط در نقاط خاصی از جریان در دسترس هستند. هنگامی که جاوا اسکریپت شما اجرا می شود، یک محدوده برای اجرا ایجاد می شود. در آن محدوده، این ارجاعات شی ایجاد می شوند:
- context : شییی که دسترسی به متن پیام را فراهم می کند
- درخواست : مختصری است که اجازه دسترسی به شی درخواست را می دهد
- پاسخ : مختصری است که اجازه دسترسی به شی درخواست را می دهد
- crypto : توابع هش مختلفی را ارائه می دهد
- print : تابعی برای انتشار خروجی
- خواص : دسترسی خواندن به ویژگی های پیکربندی روی خط مشی را امکان پذیر می کند
شی زمینه
شی context
دارای دامنه جهانی است. در همه جا در جریان پروکسی API در دسترس است. دارای چهار شیء فرزند است: proxyRequest
، proxyResponse
، targetRequest
، targetResponse
. این اشیاء فرزند به درخواست و پاسخ محیط، یا درخواست و پاسخ پراکسی یا درخواست و پاسخ هدف، محدوده می شوند. برای مثال، اگر خط مشی جاوا اسکریپت در قسمت انتهایی پروکسی جریان اجرا شود، اشیاء context.proxyRequest
و context.proxyResponse
در محدوده هستند. اگر جاوا اسکریپت در یک جریان هدف اجرا شود، اشیاء context.targetRequest
و context.targetResponse
در محدوده هستند.
آبجکت context
نیز دارای خواص و متدهایی است که در این مبحث به تفصیل توضیح داده شده است. به عنوان مثال، مثال کد جاوا اسکریپت زیر از ویژگی 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
، ارجاعات کوتاهی به درخواست و پاسخ محیط هستند، یا درخواست و پاسخ پروکسی یا درخواست و پاسخ هدف. اشیایی که این متغیرها به آنها اشاره می کنند به زمینه ای که سیاست جاوا اسکریپت در آن اجرا می شود بستگی دارد. اگر جاوا اسکریپت در جریان یک نقطه پایانی پروکسی اجرا شود، متغیرهای درخواست و پاسخ به context.proxyRequest
و context.proxyResponse
اشاره می کنند. اگر جاوا اسکریپت در یک جریان هدف اجرا شود، متغیرها به context.targetRequest
و context.targetResponse
اشاره می کنند.
تابع print().
مدل شی جاوا اسکریپت شامل یک تابع print()
است که می توانید از آن برای خروجی اطلاعات اشکال زدایی به ابزار Edge Trace استفاده کنید. عبارات Debug with JavaScript print() را ببینید.
شیء خواص
هنگام استفاده از aproperties
به مقادیر آن ویژگی ها دسترسی پیدا کند.
به عنوان مثال، اگر پیکربندی جاوا اسکریپت شما شامل موارد زیر باشد:
<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 در دسترس است. Crypto به شما امکان می دهد با این اشیاء هش کار کنید:
- SHA-1
- SHA256
- SHA512
- MD5
کار با اشیاء SHA-1
شما می توانید اشیاء SHA-1 را ایجاد کنید، آنها را به روز کنید و آنها را به مقادیر hex و 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 را ایجاد کنید، آنها را به روز کنید و آنها را به مقادیر hex و 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 را ایجاد کنید، آنها را به روز کنید و آنها را به مقادیر hex و 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 ایجاد کنید، آنها را به روز کنید و آنها را به مقادیر hex و 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 - (String) پیاده سازی اساسی برای این پارامتر java.text.SimpleDateFormat است. برای مثال: 'yyyy-MM-DD HH:mm:ss.SSS'
- منطقه زمانی - (رشته، اختیاری) اجرای اساسی برای این پارامتر java.util.TimeZone است. این پارامتر همان Default است: UTC
- time - (تعداد، اختیاری) یک مقدار زمان یونیکس برای قالب بندی. پیش فرض: زمان فعلی
نمونه ها
دریافت زمان فعلی، به میلی ثانیه:
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
متدهایی را برای دریافت، تنظیم و حذف متغیرهای مربوط به هر تراکنش نشان می دهد.
متغیرها ویژگی های خاص یک تراکنش را تعریف می کنند. زمان روز، محلی مشتری درخواستکننده، عامل کاربر مشتری درخواستکننده، و URL سرویس هدف، همگی نمونههایی از متغیرهایی هستند که در context
موجود هستند. بنابراین، context
برای ساخت منطقی مفید است که بر این ویژگی ها برای اجرای رفتار سفارشی متکی است.
مرجع متغیرهای جریان و سیاست استخراج متغیرها را ببینید.
خلاصه شی زمینه
این جدول به طور خلاصه شی زمینه و فرزندان آن را توصیف می کند و ویژگی هایی را که به هر یک محدود شده اند فهرست می کند.
نام | توضیحات | خواص |
---|---|---|
context | یک پوشش برای زمینه خط لوله پردازش پیام و جریان های درخواست و پاسخ که توسط ProxyEndpoint و TargetEndpoint اجرا می شوند. | جریان، جلسه |
context. proxyRequest | یک شی که نشان دهنده پیام درخواست ورودی به ProxyEndpoint (از برنامه درخواست کننده به پراکسی API) است. | هدرها، پارامترهای پرس و جو، روش، بدنه، آدرس اینترنتی |
context. targetRequest | یک شی که نشان دهنده پیام درخواست خروجی از TargetEndpoint (از پراکسی API به سرویس Backend) است. | هدرها، پارامترهای پرس و جو، روش، بدنه، آدرس اینترنتی |
context. targetResponse | یک شی که پیام پاسخ هدف ورودی را نشان می دهد (از سرویس backend تا پراکسی 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 باید به صورت پویا URL هدف را بنویسد. جاوا اسکریپت زیر مقدار متغیری به نام 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
رشته ای است که جریان پراکسی API فعلی را مشخص می کند. این ویژگی برای نشان دادن جریانی که جاوا اسکریپت به آن متصل است استفاده می شود. مقادیر پشتیبانی شده عبارتند از:
-
PROXY_REQ_FLOW
-
PROXY_RESP_FLOW
-
TARGET_REQ_FLOW
-
TARGET_RESP_FLOW
هر نام Flow شامل PreFlow، PostFlow و هر جریان مشروط تعریف شده در ProxyEndpoints یا TargetEndpoints است.
این ویژگی اختیاری زمانی مفید است که جاوا اسکریپت رایج در بیش از یک جریان اجرا شود، اما ممکن است بسته به جریانی که در آن اجرا میشود، رفتار آن را تغییر دهد. از ویژگی Flow برای ماژول های جاوا اسکریپت که برای استفاده مجدد در چندین پراکسی API در نظر گرفته شده است استفاده کنید، که در آن کد برای بررسی جریان فعلی قبل از اجرای منطق لازم است.
مثال
یک هدر HTTP را فقط روی جریان targetRequest تنظیم کنید:
if (context.flow=="TARGET_REQ_FLOW") { context.targetRequest.headers['TARGET-HEADER-X']='foo'; }
محتوا را فقط روی ProxyResponse Flow تنظیم کنید:
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
: پیام درخواست ورودی دریافت شده از سرویس Backend.
بخش های زیر روش ها و ویژگی های این اشیاء را شرح می دهد:
زمینه. * درخواست اشیاء فرزند
برای هر تراکنش HTTP که در یک پراکسی API اجرا میشود، دو شیء پیام درخواست ایجاد میشود: یکی ورودی (درخواست مشتری) و دیگری خروجی (درخواستی که توسط پراکسی API ایجاد شده و به هدف پشتیبان ارسال میشود).
شی context
دارای اشیاء فرزندی است که این پیام های درخواست را نشان می دهد: context.proxyRequest
و context.targetRequest
. این اشیاء به شما امکان می دهند به خصوصیاتی در جریان درخواست دسترسی داشته باشید که در زمان اجرای کد جاوا اسکریپت در محدوده است.
توجه: همچنین می توانید request
شی مختصر برای دسترسی به این ویژگی ها در یک جریان درخواست استفاده کنید. شی request
به context.proxyRequest
یا context.targetRequest
اشاره دارد، بسته به اینکه کد جاوا اسکریپت شما در کجای جریان اجرا می شود.
زمینه. *ویژگی های شی فرزند را درخواست کنید
نام ملک | توضیحات |
---|---|
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 جاوا اسکریپت زیر: 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 که در یک پراکسی API اجرا میشود، دو شی پیام پاسخ ایجاد میشود: یکی ورودی (پاسخ از سرویس پشتیبان) و دیگری خروجی (پاسخی که به مشتری ارسال میشود).
شی context دارای اشیاء فرزندی است که این پیامهای پاسخ را نشان میدهند: context.proxyResponse
و context.targetResponse
. این اشیاء به شما امکان می دهند به خصوصیاتی در جریان پاسخ دسترسی داشته باشید که در زمان اجرای کد جاوا اسکریپت در محدوده است.
توجه: شما همچنین می توانید response
شی مختصر برای دسترسی به این ویژگی ها از یک جریان پاسخ استفاده کنید. شی response
به context.proxyResponse
یا context.targetResponse
اشاره دارد، بسته به اینکه کد جاوا اسکریپت شما در کجای جریان اجرا می شود.
زمینه. *خواص شیء پاسخ
نام ملک | توضیحات |
---|---|
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
را می توان در زمینه رشته استفاده کرد و جاوا اسکریپت آنها را مجبور به تبدیل به رشته می کند. در حالت قبلی ( *.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() برای خروجی اطلاعات اشکال زدایی به ابزار Trace استفاده کنید. این تابع مستقیماً از طریق مدل شی جاوا اسکریپت در دسترس است. به عنوان مثال:
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")); }
برای مشاهده خروجی، خروجی را از همه تراکنش ها در پایین پنجره Trace انتخاب کنید. همچنین می توانید خروجی را در ویژگی Trace به نام stepExecution-stdout
پیدا کنید.
ایجاد فراخوان جاوا اسکریپت با httpClient
از httpClient
برای ایجاد چندین درخواست HTTP موازی و ناهمزمان به هر URL از داخل کد جاوا اسکریپت سفارشی که در یک جریان پروکسی API اجرا می شود، استفاده کنید. شی httpClient
توسط مدل شی جاوا اسکریپت Apigee Edge در معرض دید قرار می گیرد.
درباره httpClient
شی httpClient
در معرض کد جاوا اسکریپت سفارشی در حال اجرا در Apigee Edge از طریق مدل شی جاوا اسکریپت قرار می گیرد. برای پیوست کردن جاوا اسکریپت سفارشی به یک پراکسی API، از خطمشی جاوا اسکریپت استفاده میکنید. هنگامی که این خط مشی اجرا می شود، کد جاوا اسکریپت سفارشی اجرا می شود.
شی httpClient
برای توسعه خدمات ترکیبی یا mashup مفید است. به عنوان مثال، می توانید چندین تماس باطن را در یک روش API واحد ادغام کنید. این شی معمولاً به عنوان جایگزینی برای خط مشی ServiceCallout استفاده می شود.
در اینجا یک الگوی استفاده اساسی آورده شده است. یک شی Request را نمونه سازی کنید، یک 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()
: (boolean) اگر httpClient قادر به اتصال به سرور نباشدtrue
برمی گرداند. کدهای وضعیت HTTP4xx
و5xx
منجر بهisError()
false
میشوند، زیرا اتصال کامل شد و یک کد پاسخ معتبر برگردانده شد. اگرisError()
true
را برگرداند، پس فراخوانیgetResponse()
جاوا اسکریپت راundefined
برمی گرداند. -
isSuccess()
: (boolean) اگر ارسال کامل و موفقیت آمیز بودtrue
را برمی گرداند. -
isComplete()
: (boolean) اگر درخواست کامل شده باشدtrue
را برمی گرداند. -
waitForComplete()
: رشته را تا زمانی که درخواست کامل شود (با موفقیت یا خطا) متوقف می کند. -
getResponse()
: (object) در صورتی کهhttpClient.send()
کامل و موفق بود، شی پاسخ را برمی گرداند. شیء برگشتی دارای متدها و خصوصیات یکسانی با شی context.proxyResponse است. خلاصه شی زمینه را ببینید. -
getError()
: (string) اگر تماس با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);
استفاده از خط مشی جاوا اسکریپت
از خط مشی جاوا اسکریپت برای پیوست کردن کد جاوا اسکریپت سفارشی به یک جریان پروکسی استفاده کنید. به خط مشی جاوا اسکریپت مراجعه کنید.
موضوعات مرتبط
- خط مشی جاوا اسکریپت
- مدل شی جاوا اسکریپت
- برای نمونهها و دستورالعملهای اولیه، برنامهنویسی پراکسیهای API با جاوا اسکریپت را ببینید.
- برای نمونههای کد جاوا اسکریپت، نمونههای Apigee Edge را در GitHub ببینید.
مقالات انجمن Apigee
می توانید این مقالات مرتبط را در انجمن Apigee بیابید: