مدل شی جاوا اسکریپت

شما در حال مشاهده اسناد 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() است که می توانید از آن برای خروجی اطلاعات اشکال زدایی به ابزار Edge Trace استفاده کنید. عبارات Debug with JavaScript print() را ببینید.

شیء خواص

هنگام استفاده از a در پیکربندی خط مشی، کد جاوا اسکریپت می تواند با استفاده از متغیر 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 در دسترس است. 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 یک ویژگی راحت خواندن/نوشتن است که پارامترهای طرح، میزبان، پورت، مسیر و پرس و جو را برای 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
جاوا اسکریپت زیر:
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

جاوا اسکریپت زیر:

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 که در یک پراکسی API اجرا می‌شود، دو شی پیام پاسخ ایجاد می‌شود: یکی ورودی (پاسخ از سرویس پشتیبان) و دیگری خروجی (پاسخی که به مشتری ارسال می‌شود).

شی context دارای اشیاء فرزندی است که این پیام‌های پاسخ را نشان می‌دهند: context.proxyResponse و context.targetResponse . این اشیاء به شما امکان می دهند به خصوصیاتی در جریان پاسخ دسترسی داشته باشید که در زمان اجرای کد جاوا اسکریپت در محدوده است.

توجه: شما همچنین می توانید response شی مختصر برای دسترسی به این ویژگی ها از یک جریان پاسخ استفاده کنید. شی response به context.proxyResponse یا context.targetResponse اشاره دارد، بسته به اینکه کد جاوا اسکریپت شما در کجای جریان اجرا می شود.

زمینه. *خواص شیء پاسخ

نام ملک توضیحات
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 را می توان در زمینه رشته استفاده کرد و جاوا اسکریپت آنها را مجبور به تبدیل به رشته می کند. در حالت قبلی ( *.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 برمی گرداند. کدهای وضعیت HTTP 4xx و 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);

استفاده از خط مشی جاوا اسکریپت

از خط مشی جاوا اسکریپت برای پیوست کردن کد جاوا اسکریپت سفارشی به یک جریان پروکسی استفاده کنید. به خط مشی جاوا اسکریپت مراجعه کنید.

موضوعات مرتبط

مقالات انجمن Apigee

می توانید این مقالات مرتبط را در انجمن Apigee بیابید: