درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
ازنظر مفهومی، متغیرهای جاریسازی اشیایی هستند که میتوانید از درون خطمشیها یا ابزارهای کمکی (مثل ابزار ابزار ردیابی) به آنها دسترسی داشته باشید. اینها به شما امکان میدهند وضعیت مرتبط با تراکنش میانای برنامهسازی کاربردی را که Apigee Edge پردازش کرده است حفظ کنید.
متغیرهای جریان چیست؟
متغیرهای جریان در بافت جریان پراکسی API وجود دارند و وضعیت را در تراکنش API ردیابی میکنند، همانگونه که متغیرهای نامگذاریشده وضعیت را در برنامه نرمافزاری ردیابی میکنند. متغیرهای جریان اطلاعاتی مانند موارد زیر را ذخیره میکنند:
- نشانی IP، سرایندها، مسیر نشانی وب، و بار ارسالی از برنامه درخواستکننده
- اطلاعات سیستم مثل تاریخ و زمان دریافت درخواست توسط Edge
- دادههای استخراجشده هنگام اجرای خطمشی. برای مثال، پساز اجرای خطمشیای که یک نشان OAuth را اعتبارسنجی میکند، Edge متغیرهای جریانی ایجاد میکند که اطلاعاتی مانند نام برنامه درخواستکننده را در خود نگه میدارند.
- اطلاعات مربوط به پاسخ سیستم هدف
برخیاز متغیرها در Edge «ساخته شدهاند» و هرگاه درخواست API دریافت شود، بهطور خودکار تکمیل میشوند. این متغیرها درطول تراکنش API دردسترس هستند. همچنین میتوانید بااستفاده از خطمشیهایی مثل خطمشی AssignMessage، یا در کد جاوا اسکریپت، Node.js، و جاوا، متغیرهای سفارشی خودتان را ایجاد کنید.
همانطور که خواهید دید، متغیرها محدوده دارند و اینکه در کجا دردسترس هستند تا حدودی به زمانی که در جریان پراکسی API ایجاد میشوند بستگی دارد. بهطورکلی، وقتی متغیری ایجاد میشود، برای همه خطمشیها و کدهایی که بعداً در جریان تراکنش «میانای برنامهسازی کاربردی» اجرا میشوند دردسترس است.
متغیرهای جریان چگونه استفاده میشوند؟
متغیرهای جریان در خطمشیها و جریانهای شرطی استفاده میشوند:
- خطمشیها میتوانند وضعیت را از متغیرهای جریان بازیابی کنند و از آنها برای انجام کارشان استفاده کنند.
برای مثال، یک خطمشی VerifyJWT میتواند کد را برای درستیسنجی از متغیر جاریسازی بازیابی کند و سپس درستیسنجی را روی آن انجام دهد. بهعنوان مثال دیگر، یک خطمشی جاوا اسکریپت میتواند متغیرهای جریان را بازیابی کند و دادههای موجود در آن متغیرها را کدبندی کند.
- جریانهای شرطی میتوانند به متغیرهای جریان برای هدایت جریان یک «میانای برنامهسازی کاربردی»
ازطریق Edge ارجاع دهند، تقریباً شبیه به روشی که دستور switch در برنامهنویسی کار میکند.
برای مثال، خطمشی برگرداندن خطا ممکن است فقط زمانی اجرا شود که متغیر جریان خاصی تنظیم شده باشد. درنهایت، میتوانید متغیرهای جریان را در برنامه هدف Node.js دریافت و تنظیم کنید.
بیایید به نمونههایی از نحوه استفاده از متغیرها در هریک از این زمینهها نگاهی بیندازیم.
متغیرهای جریان در خطمشیها
برخیاز خطمشیها متغیرهای جریان را بهعنوان ورودی میگیرند.
برای مثال، خطمشی AssignMessage زیر مقدار متغیر جاریسازی client.ip را میگیرد و آن را در سرایند درخواست بهنام My-Client-IP قرار میدهد. اگر به جریان درخواست اضافه شود، این خطمشی سرصفحهای را تنظیم میکند
که به هدف زیرینه ارسال میشود. اگر در جریان پاسخ تنظیم شود، سرایند به
برنامه مشتری برگردانده میشود.
<AssignMessage name="set-ip-in-header"> <AssignTo createNew="false" transport="http" type="request">request</AssignTo> <Set> <Headers> <Header name="My-Client-IP">{client.ip}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
برای مثال دیگر، وقتی خطمشی سهمیه اجرا میشود، چندین متغیر جاری با مقادیر مربوط به خطمشی تکمیل میشود. یکی از این متغیرها ratelimit.my-quota-policy.used.count نام دارد (که در آن my-quota-policy نام خطمشی سهمیهای است که به آن علاقهمندید).
ممکن است بعداً یک جریان شرطی اجرا کنید که میگوید «اگر تعداد سهمیه فعلی کمتر از ۵۰٪ حداکثر باشد و بین ۹ صبح تا ۵ بعدازظهر باشد، سهمیه دیگری را اعمال کن.» این شرط ممکن است به مقدار شمارش سهمیه کنونی و به متغیر جریانی بهنام system.time بستگی داشته باشد که یکی از متغیرهای توکار Edge است.
متغیرهای جریان در جریانهای شرطی
جریانهای شرطی متغیرهای جریان را ارزیابی میکنند و پراکسیها را قادر میسازند بهصورت پویا عمل کنند. شرایط معمولاً برای تغییر رفتار جاریسازیها، مراحل، و قوانین مسیر استفاده میشود.
در اینجا جاریسازی شرطی وجود دارد که مقدار متغیر request.verb را در مرحله جاریسازی پراکسی ارزیابی میکند. در این مورد، اگر فعل درخواست POST باشد، خطمشی VerifyAPIKey اجرا میشود. این الگوی رایجی است که در پیکربندیهای پراکسی میانای برنامهسازی کاربردی استفاده میشود.
<PreFlow name="PreFlow">
<Request>
<Step>
<Condition>request.verb equals "POST"</Condition>
<Name>VerifyApiKey</Name>
</Step>
</Request>
</PreFlow>اکنون ممکن است بپرسید متغیرهایی مثل request.verb،
client.ip، و system.time از کجا میآیند؟ چه زمانی نمونهسازی میشوند و
با مقدار پر میشوند؟ برای کمک به شما در درک اینکه متغیرها چه زمانی ایجاد میشوند و چه زمانی برای شما دردسترس هستند، درک حوزه متغیر جاریسازی را ببینید.
متغیرهای جریان در کد جاوا اسکریپت که با خطمشی جاوا اسکریپت فراخوانی شده است
با خطمشی جاوا اسکریپت، میتوانید کد جاوا اسکریپت را از درون زمینه جاریسازی پراکسی API اجرا کنید. جاوا اسکریپتی که توسط این خطمشی اجرا میشود از Apigee مدل شیء جاوا اسکریپت استفاده میکند که به کد سفارشی شما امکان میدهد به اشیای درخواست، پاسخ، و زمینه مرتبط با جریان پراکسی API که کد شما در آن اجرا میشود دسترسی داشته باشد. برای مثال، این کد سرصفحه پاسخ را با مقدار بهدستآمده از متغیر جاری target.name تنظیم میکند.
context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));این تکنیک استفاده از جاوا اسکریپت برای خواندن و تنظیم متغیرها مشابه کاری است که میتوانید با خطمشی AssignMessage (که قبلاً نشان داده شد) انجام دهید. این فقط روش دیگری برای انجام همان انواع کارها در Edge است. نکته مهمی که باید بهخاطر داشته باشید این است که جاوا اسکریپت اجراشده توسط خطمشی جاوا اسکریپت به همه متغیرهای جریانی که وجود دارند و در محدوده جریان پراکسی API هستند دسترسی دارد.
متغیرهای جریان در کد Node.js
با الزام کردن واحد apigee-access، میتوانید متغیرهای جریان را از
در کد Node.js که در Edge مستقر شده است تنظیم و به آنها دسترسی پیدا کنید.
در اینجا مثال سادهای آورده شده است که در آن متغیری بهنام custom.foo روی مقدار
Bar تنظیم شده است. پساز تنظیم، این متغیر جدید برای هر خطمشی یا کد دیگری که در جریان پراکسی پساز اجرای کد Node.js رخ میدهد دردسترس قرار میگیرد.
var http = require('http'); var apigee = require('apigee-access'); http.createServer(function (request, response) { apigee.setVariable(request, "custom.foo", "Bar"); response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World\n'); }).listen(8124); console.log('Server running at http://127.0.0.1:8124/');
در دسترسی به متغیرهای جاری در Node.js میتوانید درباره استفاده از apigee-access برای کار با متغیرها بیشتر بخوانید.
درک محدوده متغیر جریان
دامنه متغیر مربوط به جریان یا «چرخه عمر» کلی تماس با پراکسی API است.
دیداریسازی کردن جریان کارگزار میانای برنامهسازی کاربردی
برای درک محدوده متغیر جریان، مهم است که نحوه جریان پیامها در میانای برنامهسازی کاربردی را درک یا تجسم کنید. پراکسی API از مجموعهای از مراحل پردازش پیام تشکیل شده است که بهعنوان یک جریان سازماندهی شدهاند. در هر مرحله از جریان پراکسی، پراکسی اطلاعات دردسترس خود را ارزیابی میکند و تصمیم میگیرد که چه کاری انجام دهد. در این مسیر، کارگزار نیابتی ممکن است کد خطمشی را اجرا کند یا انشعاب شرطی را انجام دهد.
شکل زیر این توالی جریانها را نشان میدهد. توجه کنید که جریانها از چهار بخش اصلی تشکیل شدهاند: ProxyEndpoint درخواست، TargetEndpoint درخواست، TargetEndpoint پاسخ، و ProxyEndpoint پاسخ.

ساختار این جریان را در ذهن داشته باشید زیرا در ادامه این موضوع به کاوش متغیرهای جریان میپردازیم.
نحوه ارتباط محدوده متغیر با جریان پراکسی
بهمحض اینکه بتوانید جریان پیامها را ازطریق پراکسی، همانطور که قبلاً توضیح داده شد، تجسم کنید، میتوانید شروع به درک محدوده متغیر کنید. منظور ما از محدوده، نقطهای در چرخه حیات جریان پراکسی است که متغیر برای اولینبار نمونهسازی میشود.
برای مثال، اگر خطمشیای به بخش درخواست ProxyEndpoint پیوست کرده باشید، آن خطمشی نمیتواند به هیچ متغیری که در محدوده بخش درخواست TargetEndpoint قرار دارد دسترسی داشته باشد. دلیل این امر این است که بخش درخواست TargetEndpoint جریان هنوز اجرا نشده است، بنابراین کارگزار API فرصتی برای پر کردن متغیرها در آن حوزه نداشته است.
جدول زیر مجموعه کامل دامنههای متغیر را فهرست میکند و نشان میدهد که در جریان پراکسی چه زمانی دردسترس قرار میگیرند.
| حوزه متغیر | جایی که این متغیرها پر میشوند |
|---|---|
| درخواست نیابتی | بخش درخواست ProxyEndpoint |
| درخواست هدف | بخش درخواست TargetEndpoint |
| پاسخ هدف | بخش پاسخ TargetEndpoint |
| پاسخ نیابتی | بخش پاسخ ProxyEndpoint |
| همیشه دردسترس است | بهمحض اینکه کارگزار یک درخواست دریافت میکند. این متغیرها در کل چرخه حیات جریان پراکسی دردسترس هستند. |
برای مثال، متغیر داخلی Edge بهنام client.ip وجود دارد. این متغیر دارای
محدوده «درخواست پراکسی» است. بهطور خودکار با نشانی IP کارخواهی که با پراکسی تماس گرفته است تکمیل میشود. وقتی درخواستی برای اولینبار به ProxyEndpoint میرسد، این متغیر پر میشود و در کل چرخه حیات جریان پراکسی دردسترس میماند.
متغیر داخلی دیگری بهنام target.url وجود دارد. قلمرو این متغیر
«درخواست هدف» است. این متغیر در بخش درخواست TargetEndpoint با نشانی وب درخواست ارسالشده به هدف زیرینه پر میشود. اگر بخواهید در بخش درخواست ProxyEndpoint به target.url دسترسی پیدا کنید، مقدار NULL دریافت خواهید کرد. اگر سعی کنید این متغیر را قبلاز اینکه در محدوده باشد تنظیم کنید،
کارگزار هیچ کاری انجام نمیدهد—خطایی تولید نمیکند و متغیر را تنظیم نمیکند.
در اینجا یک مثال ساده آورده شده است که نشان میدهد چگونه درباره محدوده متغیر فکر کنید. فرض کنید میخواهید کل محتوای یک شیء درخواست (سرایندها، پارامترها، بدنه) را کپی کنید و آن را به بار پاسخ اختصاص دهید تا به برنامه فراخواننده برگردانده شود. میتوانید از خطمشی AssignMessage برای این کار استفاده کنید. کد خطمشی به این شکل است:
<AssignMessage name="CopyRequestToResponse"> <AssignTo type="response" createNew="false">response</AssignTo> <Copy source="request"/> </AssignMessage>
این خطمشی بهسادگی شیء request را کپی میکند و آن را به شیء response اختصاص میدهد. اما این خطمشی باید در کجای جریان پراکسی قرار گیرد؟ پاسخ این است که باید در پاسخ TargetEndpoint قرار گیرد، زیرا محدوده متغیر پاسخ «پاسخ هدف» است.
متغیرهای جریان ارجاعی
همه متغیرهای داخلی در Apigee Edge از قرارداد نامگذاری نقطهای پیروی میکنند. این قرارداد
تعیین هدف متغیر را آسانتر میکند. برای مثال
system.time.hour و request.content.
Apigee پیشوندهای مختلفی را برای سازماندهی مناسب متغیرهای مربوطه رزرو میکند. این پیشوندها شامل موارد زیر میشود: شامل:
requestresponsesystemtarget
برای ارجاع دادن به متغیر در خطمشی، آن را در آکولاد قرار دهید. برای مثال،
خطمشی AssignMessage زیر مقدار متغیر client.ip را میگیرد و
آن را در سرایند درخواست بهنام Client-IP قرار میدهد.
<AssignMessage name="set-ip-in-header"> <AssignTo createNew="false" transport="http" type="request">request</AssignTo> <Set> <Headers> <Header name="Client-IP">{client.ip}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
در جاریسازیهای شرطی، نیازی به استفاده از آکولاد نیست. شرایط مثال زیر
متغیر request.header.accept را ارزیابی میکند:
<Step>
<Condition>request.header.accept = "application/json"</Condition>
<Name>XMLToJSON</Name>
</Step>همچنین میتوانید در کد جاوا اسکریپت و جاوا به متغیرهای جاریسازی ارجاع دهید. برای اطلاعات بیشتر، به اینجا مراجعه کنید:
نوع داده متغیرهای جاری
هر دارایی متغیر جریان نوع دادهای کاملاً تعریفشده دارد، مثل «رشته»، «طولانی»، «عدد صحیح»، «منطقی»، یا «مجموعه». انواع دادههای فهرستشده را میتوانید در مرجع متغیرهای جریان پیدا کنید. برای متغیرهایی که توسط یک خطمشی ایجاد شدهاند، برای اطلاعات نوع داده به موضوع مرجع خطمشی خاص مراجعه کنید.
متغیرهایی که بهصورت دستی ایجاد میکنید نوعی را که هنگام ایجاد به آنها داده شده است میپذیرند و به انواع مقادیر مجاز بستگی دارند. برای مثال، متغیرهای ایجادشده در کد Node.js به «عدد»، «رشته»، «بولی»، «تهی»، یا «تعریفنشده» محدود میشوند.
استفاده از متغیرهای جریان در خطمشیها
بسیاری از خطمشیها متغیرهای جریان را بهعنوان بخشی از اجرای عادی خود ایجاد میکنند. سند مرجع خطمشی همه این متغیرهای مختص خطمشی را مستند میکند.
هنگام کار با پراکسیها و خطمشیها، حتماً به مرجع خطمشی مراجعه کنید تا متوجه شوید کدام متغیرها ایجاد شدهاند و برای چه مواردی استفاده میشوند. برای مثال، خطمشی سهمیه مجموعهای از متغیرها را ایجاد میکند که حاوی اطلاعاتی درباره تعداد سهمیه و محدودیتها، زمان انقضا، و غیره است.
برخیاز متغیرهای خطمشی برای اشکالزدایی مفید هستند. برای مثال، میتوانید از ابزار ابزار ردیابی استفاده کنید تا ببینید کدام متغیرها در نمونهای خاص در جریان پراکسی تنظیم شدهاند.
خطمشی ExtractVariables به شما امکان میدهد متغیرهای سفارشی را با دادههای استخراجشده از پیامها تکمیل کنید. میتوانید پارامترهای پُرسمان، سرایندها، و دادههای دیگر را استخراج کنید. برای مثال، میتوانید پیامهای درخواست و پاسخ را بااستفاده از الگوها تجزیه کنید تا دادههای خاصی را از پیامها استخراج کنید.
در مثال زیر، «استخراج متغیرها» پیام پاسخ را تجزیه میکند و دادههای خاصی را که از پاسخ گرفته شده است ذخیره میکند. این خطمشی دو متغیر سفارشی،
geocoderesponse.latitude و geocoderesponse.longitude، ایجاد میکند و
مقادیری را به آنها اختصاص میدهد.
<ExtractVariables name="ParseGeocodingResponse"> <Source>response</Source> <VariablePrefix>geocoderesponse</VariablePrefix> <JSONPayload> <Variable name="latitude"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
دوباره یادآوری میکنیم که بسیاری از خطمشیها متغیرها را بهطور خودکار ایجاد میکنند. میتوانید در بافت جریان پراکسی به این متغیرها دسترسی داشته باشید و این متغیرها در «مرجع خطمشی» در زیر هر موضوع خطمشی جداگانه مستند شدهاند.
کار کردن با متغیرهای جریان در کد جاوا اسکریپت
میتوانید مستقیماً در کد جاوا اسکریپت که در بافت کارگزار نیابتی API اجرا میشود به متغیرها دسترسی داشته باشید و آنها را تنظیم کنید. ازطریق Apigee مدل شیء جاوا اسکریپت، جاوا اسکریپت اجراشده در Edge دسترسی مستقیم به متغیرهای جریان پراکسی دارد.
برای دسترسی به متغیرها در کد جاوا اسکریپت، روشهای getter/setter را در هریک از این اشیا فراخوانی کنید:
contextproxyRequestproxyResponsetargetRequesttargetResponse
همانطور که میبینید، این مرجعهای شیء به بخشهای آشنای مدل جریان پراکسی که قبلاً در تصویرسازی جریان پراکسی API توضیح داده شده است، نگاشت میشوند.
شیء context با متغیرهای دردسترس «جهانی»، مثل متغیرهای سیستم، مطابقت دارد. برای مثال، میتوانید getVariable() را در شیء context فراخوانی کنید
تا سال جاری را دریافت کنید:
var year = context.getVariable('system.time.year');
بههمین ترتیب، میتوانید با setVariable() تماس بگیرید تا مقدار متغیر سفارشی یا هریک از متغیرهای
نوشتنی آماده را تنظیم کنید. در اینجا، متغیر سفارشیای بهنام
organization.name.myorg ایجاد میکنیم و مقداری را به آن اختصاص میدهیم.
var org = context.setVariable('organization.name.myorg', value);
چون این متغیر با شیء context ایجاد شده است، برای
همه بخشهای جاریسازی دردسترس خواهد بود (اساساً، این مثل ایجاد یک متغیر جهانی است).
همچنین میتوانید متغیرهای جاریسازی پراکسی را در کد Java که با خطمشی JavaCallout اجرا میکنید دریافت/تنظیم کنید.
دسترسی به متغیرهای جریان در برنامههای Node.js
میتوانید متغیرهای جاریسازی را از کد Node.js که در Edge مستقر شده است دریافت، تنظیم، و حذف کنید. تنها کاری که باید انجام دهید این است که واحد apigee-access را در کدتان «الزامی» کنید. برای جزئیات، دسترسی به متغیرهای جاری در Node.js را ببینید.
آنچه باید بهخاطر داشته باشید
در اینجا چند نکته مهم درباره متغیرهای جریان وجود دارد که باید بهخاطر داشته باشید:
- برخیاز متغیرهای «آماده استفاده» بهطور خودکار توسط خود کارگزار نمونهسازی و تکمیل میشوند. این موارد در مرجع متغیرهای جریان مستند شدهاند.
- میتوانید متغیرهای سفارشی ایجاد کنید که برای استفاده در جریان پراکسی دردسترس هستند. میتوان بااستفاده از خطمشیهایی مثل خطمشی AssignMessage و خطمشی JavaScript، و در کد Node.js متغیر ایجاد کرد.
- متغیرها محدوده دارند. برای مثال، برخیاز متغیرها وقتی اولین پراکسی درخواستی از برنامه دریافت میکند بهطور خودکار تکمیل میشوند. متغیرهای دیگر در بخش جریان پاسخ پراکسی تکمیل میشوند. این متغیرهای پاسخ تا زمانی که بخش پاسخ اجرا نشود تعریفنشده باقی میمانند.
- وقتی خطمشیها اجرا میشوند، میتوانند متغیرهای خاص خطمشی را ایجاد و تکمیل کنند. مستندات مربوط به هر خطمشی، همه این متغیرهای مربوط به خطمشی خاص را فهرست میکند.
- جریانهای شرطی معمولاً یک یا چند متغیر را ارزیابی میکنند. اگر میخواهید جریانهای مشروط ایجاد کنید، باید متغیرها را درک کنید.
- بسیاری از خطمشیها از متغیرها بهعنوان ورودی یا خروجی استفاده میکنند. شاید متغیری که توسط یک خطمشی ایجاد شده است بعداً توسط خطمشی دیگری استفاده شود.
- بااستفاده از جاوا اسکریپت مستقیم (و مدل شیء جاوا اسکریپت ما) یا خطمشی JavaCallout که کد را در Edge اجرا میکند، میتوانید بسیاری از متغیرهای جریان را از داخل Node.js دریافت و تنظیم کنید.
نمونههای کد مربوط
نمونههای کارگزار API در GitHub موجود است و بهراحتی قابل بارگیری و استفاده است. برای کسب اطلاعات درباره بارگیری و استفاده از نمونهها، استفاده از پراکسیهای نمونه میانای برنامهسازی کاربردی را ببینید. برای شرح نمونههای کارگزار API و کاری که انجام میدهند، فهرست نمونهها را ببینید.
پراکسیهای نمونه که استفاده از متغیرها و پردازش متغیرها را نشان میدهند عبارتاند از:
- متغیرها - نشان میدهد چگونه متغیرها را براساس محتوای پیام JSON و XML و انتقال استخراج و تنظیم کنید.
- policy-mashup-cookbook - برنامه کاملی که از ترکیب خطمشی برای فراخوانی دو میانای برنامهسازی کاربردی عمومی استفاده میکند، نتایج را ترکیب میکند، و پاسخ غنیشدهای برای برنامه کاربر تولید میکند. برای اطلاعات بیشتر درباره این نمونه، استفاده از ترکیب خطمشی را ببینید.
- conditional-policy - اجرای خطمشی شرطی ساده را براساس مقادیر متغیر پیادهسازی میکند.
موضوعات مرتبط
- همه متغیرهایی که بهطور خودکار در یک پراکسی API پر میشوند در مرجع متغیرهای جریان فهرست شدهاند. این مرجع همچنین نوع و دامنه هر متغیر را فهرست میکند.
- اگر میخواهید بدانید یک خطمشی خاص کدام متغیرها را پر میکند، به موضوع مرجع برای آن خطمشی مراجعه کنید. برای مثال، متغیرهای جریان را در مرجع خطمشی سهمیه ببینید.