شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
به عنوان توسعهدهندهای که با Apigee Edge کار میکند، فعالیتهای اصلی توسعه شما شامل پیکربندی API Proxies است که به عنوان پروکسی برای APIها یا سرویسهای backend عمل میکنند. این سند مرجعی از تمام عناصر پیکربندی موجود برای شما هنگام ساخت API Proxies است.
اگر در حال یادگیری نحوه ساخت پروکسیهای API هستید، توصیه میشود با موضوع «ساخت یک پروکسی API ساده» شروع کنید.
رایجترین روشهای ویرایش پیکربندیهای پروکسی عبارتند از:
- استفاده از ویرایشگر XML در رابط کاربری Edge
- پیکربندی را دانلود کنید و آن را به صورت محلی ویرایش کنید، همانطور که در بخش توسعه محلی پیکربندیهای پروکسی توضیح داده شده است.
توسعه محلی پیکربندیهای پروکسی
شما میتوانید پیکربندیهای پروکسی خود را دانلود کنید تا بتوانید آنها را در یک دستگاه محلی ویرایش کنید. پس از اتمام کار، نتایج را در Edge آپلود میکنید. این رویکرد به شما امکان میدهد پیکربندیهای پروکسی را در کنترل منبع، نسخهبندی و سایر گردشهای کاری مشترک خود ادغام کنید. علاوه بر این، با کار بر روی پیکربندی پروکسی به صورت محلی، میتوانید از ویرایشگر XML و ابزارهای اعتبارسنجی خود استفاده کنید.
این بخش نحوه استفاده از رابط کاربری برای دانلود پیکربندی پروکسی موجود، ویرایش آن و سپس آپلود مجدد آن به Edge برای استقرار را شرح میدهد. همچنین میتوانید از apigeetool برای دانلود و استقرار پیکربندی پروکسی جدید (به ترتیب با استفاده از دستورات fetchproxy و deployproxy ) استفاده کنید.
برای ویرایش پیکربندی پروکسی به صورت محلی با استفاده از رابط کاربری:
- پیکربندی پروکسی فعلی را در رابط کاربری Edge دانلود کنید. (در نمای API Proxies، گزینه Project > Download Revision را انتخاب کنید.)
- روی دستگاه محلی خود، یک دایرکتوری جدید ایجاد کنید و فایل زیپ دانلود شده را در آن گسترش دهید.
برای باز کردن فایل ZIP، میتوانید از ابزاری مانند
unzipاستفاده کنید، همانطور که در مثال زیر نشان داده شده است:mkdir myappdir
unzip ./my-app_app_rev3_2019_04_20.zip -d myappdirمحتوای بسطیافتهی فایل ZIP باید مشابه ساختار شرح داده شده در ساختار پروکسی API باشد.
- در صورت لزوم، فایلهای منبع را ویرایش کنید. برای شرح فایلهای منبع در پیکربندی پروکسی، به فایلهای پیکربندی و ساختار دایرکتوری یک پروکسی API مراجعه کنید.
برای مثال، برای فعال کردن نظارت بر سلامت در پروکسی API خود، فایل پیکربندی TargetEndpoint را در دایرکتوری
/apiproxy/targets/ویرایش کنید. فایل پیشفرض در این دایرکتوریdefault.xmlاست، اگرچه اگر از targetهای شرطی استفاده کنید، ممکن است فایلهایی با نامهای مختلف وجود داشته باشد.در این حالت، اگر فایل پیکربندی TargetEndpoint و دایرکتوری آن وجود ندارند، آنها را ایجاد کنید.
- پس از اتمام ویرایش فایلهای پیکربندی پروکسی، حتماً تغییرات خود را ذخیره کنید.
- به دایرکتوری جدیدی که هنگام گسترش فایلهای ZIP ایجاد کردید (ریشه فایلهای پیکربندی گسترشیافته) بروید.
برای مثال، اگر فایلها را در دایرکتوری
/myappdirگسترش دادهاید، همانطور که در مثال زیر نشان داده شده است، به آن دایرکتوری بروید:cd myappdir
قبل از بایگانی مجدد فایلهای پیکربندی پروکسی، باید به این دایرکتوری بروید زیرا نمیخواهید دایرکتوری
/myappdirدر فایل زیپ وجود داشته باشد. دایرکتوری سطح بالا در فایل زیپ باید/apiproxyباشد. - فایلهای پیکربندی پروکسی، شامل فایلهای جدید یا تغییر یافته را دوباره بایگانی کنید. میتوانید از ابزاری مانند
zipاستفاده کنید، همانطور که در مثال زیر نشان داده شده است:zip my-new-proxy.zip -r .
دایرکتوری سطح بالا در فایل ZIP باید
/apiproxyباشد.هیچ الزام خاصی برای نام فایل ZIP وجود ندارد. برای مثال، نیازی نیست شماره ویرایش را افزایش دهید یا تاریخ را در نام فایل مشخص کنید، اما انجام این کار میتواند برای اشکالزدایی یا کنترل منبع مفید باشد.
Edge هنگام آپلود پیکربندی پروکسی جدید، شماره اصلاح آن را برای شما افزایش میدهد.
- پیکربندی پروکسی جدید را با استفاده از رابط کاربری Edge آپلود کنید. (در نمای API Proxies ، گزینه Project > Upload a New Revision را انتخاب کنید.)
اگر با خطایی مانند Bundle is invalid. Empty bundle. مواجه شدید، مطمئن شوید که دایرکتوری سطح بالای فایل ZIP شما
/apiproxyاست. اگر اینطور نیست، فایلهای پیکربندی پروکسی خود را از ریشه دایرکتوری گسترشیافته دوباره بایگانی کنید.پس از آپلود پیکربندی پروکسی جدید شما، Edge شماره ویرایش را یک واحد افزایش میدهد و آن را در نمای خلاصه ویرایش نمایش میدهد.
اج پس از آپلود نسخه جدید به همراه رابط کاربری، آن را برای شما مستقر نمیکند.
- نسخه جدید خود را مستقر کنید.
برای اطلاعات بیشتر به آموزش: نحوه دانلود پروکسی با استفاده از رابط کاربری و API مدیریت در انجمن Apigee مراجعه کنید.
ساختار پروکسی API
یک پروکسی API شامل پیکربندی زیر است:
| پیکربندی پایه | تنظیمات پیکربندی اولیه برای یک پروکسی API. به پیکربندی پایه مراجعه کنید. |
| پیکربندی ProxyEndpoint | تنظیمات اتصال HTTP ورودی (از درخواست برنامهها به Apigee Edge)، جریانهای درخواست و پاسخ و پیوستهای سیاست. به ProxyEndpoint مراجعه کنید. |
| پیکربندی TargetEndpoint | تنظیمات اتصال HTTP خروجی (از Apigee Edge به سرویس backend)، جریانهای درخواست و پاسخ و پیوستهای سیاست. به TargetEndpoint مراجعه کنید. |
| جریانها | خطوط لوله درخواست و پاسخ ProxyEndpoint و TargetEndpoint که میتوان سیاستها را به آنها متصل کرد. به Flows مراجعه کنید. |
| سیاستها | فایلهای پیکربندی با فرمت XML که با طرحوارههای سیاست Apigee Edge مطابقت دارند. به بخش سیاستها مراجعه کنید. |
| منابع | اسکریپتها، فایلهای JAR و فایلهای XSLT که توسط سیاستها برای اجرای منطق سفارشی ارجاع داده میشوند. به منابع مراجعه کنید. |
ساختار و محتوای دایرکتوری پروکسی API
اجزای جدول بالا توسط فایلهای پیکربندی در ساختار دایرکتوری زیر تعریف میشوند:

فایلهای پیکربندی و ساختار دایرکتوری یک پروکسی API
این بخش فایلهای پیکربندی و ساختار دایرکتوری یک پروکسی API را توضیح میدهد.
پیکربندی پایه
/apiproxy/weatherapi.xml
پیکربندی پایه برای یک پروکسی API، که نام پروکسی API را تعریف میکند. این نام باید در یک سازمان منحصر به فرد باشد.
پیکربندی نمونه:
<APIProxy name="weatherapi"> </APIProxy>
عناصر پیکربندی پایه
| نام | توضیحات | پیشفرض | الزامی است؟ |
|---|---|---|---|
APIProxy | |||
name | نام پروکسی API، که باید در هر سازمان منحصر به فرد باشد. کاراکترهایی که مجاز به استفاده از آنها در نام هستید به موارد زیر محدود میشوند: A-Za-z0-9_- | ناموجود | بله |
revision | شماره ویرایش پیکربندی پروکسی API. نیازی نیست شماره ویرایش را به طور صریح تنظیم کنید، زیرا Apigee Edge به طور خودکار ویرایش فعلی پروکسی API را ردیابی میکند. | ناموجود | خیر |
ConfigurationVersion | نسخه طرح پیکربندی پروکسی API که این پروکسی API با آن مطابقت دارد. تنها مقدار پشتیبانی شده در حال حاضر majorVersion 4 و minorVersion 0 است. این تنظیم ممکن است در آینده برای فعال کردن تکامل قالب پروکسی API استفاده شود. | ۴.۰ | خیر |
Description | شرح متنی پروکسی API. در صورت ارائه، شرح در رابط کاربری مدیریت Edge نمایش داده میشود. | ناموجود | خیر |
DisplayName | یک نام کاربرپسند که ممکن است با ویژگی name در پیکربندی پروکسی API متفاوت باشد. | ناموجود | خیر |
Policies | فهرستی از سیاستها در دایرکتوری /policies این پروکسی API. معمولاً این عنصر را فقط زمانی مشاهده خواهید کرد که پروکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شده باشد. این صرفاً یک تنظیم «مانیفست» است که برای ارائه قابلیت مشاهده محتوای پروکسی API طراحی شده است. | ناموجود | خیر |
ProxyEndpoints | فهرستی از ProxyEndpointها در دایرکتوری /proxies این پروکسی API. معمولاً این عنصر را فقط زمانی مشاهده خواهید کرد که پروکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شده باشد. این صرفاً یک تنظیم «مانیفست» است که برای ارائه قابلیت مشاهده محتوای پروکسی API طراحی شده است. | ناموجود | خیر |
Resources | فهرستی از منابع (جاوااسکریپت، پایتون، جاوا، XSLT) در دایرکتوری /resources این پروکسی API. معمولاً این عنصر را فقط زمانی مشاهده خواهید کرد که پروکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شده باشد. این صرفاً یک تنظیم «مانیفست» است که برای ارائه قابلیت مشاهده محتوای پروکسی API طراحی شده است. | ناموجود | خیر |
Spec | مشخصات OpenAPI مرتبط با پروکسی API را شناسایی میکند. مقدار آن روی یک URL یا مسیری در مخزن مشخصات تنظیم میشود. توجه : مخزن مشخصات فقط در تجربه New Edge موجود است. برای اطلاعات بیشتر در مورد مخزن مشخصات، به مدیریت و اشتراکگذاری مشخصات مراجعه کنید. | ناموجود | خیر |
TargetServers | فهرستی از TargetServers که در هر TargetEndpoint این پروکسی API به آنها ارجاع داده شده است. معمولاً این عنصر را فقط زمانی مشاهده خواهید کرد که پروکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شده باشد. این صرفاً یک تنظیم «مانیفست» است که برای ارائه قابلیت مشاهده محتوای پروکسی API طراحی شده است. | ناموجود | خیر |
TargetEndpoints | فهرستی از TargetEndpointها در دایرکتوری /targets این پروکسی API. معمولاً این عنصر را فقط زمانی مشاهده خواهید کرد که پروکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شده باشد. این صرفاً یک تنظیم «مانیفست» است که برای ارائه قابلیت مشاهده محتوای پروکسی API طراحی شده است. | ناموجود | خیر |
پروکسی اندپوینت
تصویر زیر جریان درخواست/پاسخ را نشان میدهد:

/apiproxy/proxies/default.xml
پیکربندی ProxyEndpoint رابط ورودی (رو به کلاینت) را برای یک پروکسی API تعریف میکند. وقتی یک ProxyEndpoint را پیکربندی میکنید، در واقع پیکربندی شبکهای را تنظیم میکنید که نحوه فراخوانی API پروکسی شده توسط برنامههای کلاینت ('apps') را تعریف میکند.
پیکربندی نمونه ProxyEndpoint زیر در مسیر /apiproxy/proxies ذخیره میشود:
<ProxyEndpoint name="default">
<PreFlow/>
<Flows/>
<PostFlow/>
<HTTPProxyConnection>
<BasePath>/weather</BasePath>
<VirtualHost>default</VirtualHost>
</HTTPProxyConnection>
<FaultRules/>
<DefaultFaultRule/>
<RouteRule name="default">
<TargetEndpoint>default</TargetEndpoint>
</RouteRule>
</ProxyEndpoint>عناصر پیکربندی مورد نیاز در یک ProxyEndpoint پایه عبارتند از:
عناصر پیکربندی ProxyEndpoint
| نام | توضیحات | پیشفرض | الزامی است؟ |
|---|---|---|---|
ProxyEndpoint | |||
name | نام ProxyEndpoint. باید در پیکربندی پروکسی API، زمانی که (در موارد نادر) چندین ProxyEndpoint تعریف میشوند، منحصر به فرد باشد. کاراکترهایی که مجاز به استفاده از آنها در نام هستید به موارد زیر محدود میشوند: A-Za-z0-9._\-$ % . | ناموجود | بله |
PreFlow | سیاستهای موجود در جریان PreFlow یک درخواست یا پاسخ را تعریف میکند. | ناموجود | بله |
Flows | سیاستهای مربوط به جریانهای شرطی یک درخواست یا پاسخ را تعریف میکند. | ناموجود | بله |
PostFlow | سیاستهای موجود در جریان PostFlow یک درخواست یا پاسخ را تعریف میکند. | ناموجود | بله |
HTTPProxyConnection | آدرس شبکه و مسیر URI مرتبط با پروکسی API را تعریف میکند. | ||
BasePath | یک رشتهی الزامی که به طور منحصر به فرد مسیر URI مورد استفاده توسط Apigee Edge برای هدایت پیامهای ورودی به پروکسی API مناسب را مشخص میکند. BasePath یک قطعه URI (برای مثال استفاده از یک wildcard در مسیرهای پایه شما میتوانید از یک یا چند کاراکتر "*" در مسیرهای پایه پروکسی API استفاده کنید. برای مثال، یک مسیر پایه مهم: Apigee از استفاده از کاراکتر "*" به عنوان اولین عنصر یک مسیر پایه پشتیبانی نمیکند. برای مثال، این مورد پشتیبانی نمیشود: | / | بله |
VirtualHost | یک پروکسی API را با URL های پایه خاص برای یک محیط مرتبط می کند. VirtualHost یک پیکربندی نامگذاری شده است که یک یا چند URL را برای یک محیط تعریف می کند. VirtualHost های نامگذاری شده که برای یک ProxyEndpoint تعریف شدهاند، دامنهها و پورتهایی را که یک پروکسی API روی آنها قرار میگیرد، و به طور کلی، URL ای را که برنامهها برای فراخوانی یک پروکسی API استفاده میکنند، تعیین میکنند. به طور پیشفرض، دو VirtualHost با نامهای مختلف برای یک محیط تعریف شدهاند: | پیشفرض | خیر |
Properties | مجموعهای از تنظیمات پیکربندی HTTP اختیاری را میتوان به عنوان ویژگیهای یک <ProxyEndpoint> تعریف کرد. | ناموجود | خیر |
FaultRules | نحوه واکنش ProxyEndpoint به یک خطا را تعریف میکند. یک قانون خطا دو مورد را مشخص میکند:
به بخش مدیریت خطاها مراجعه کنید. | ناموجود | خیر |
DefaultFaultRule | هرگونه خطایی (سیستم، انتقال، پیامرسانی یا خطمشی) را که صریحاً توسط قانون خطای دیگری مدیریت نمیشوند، مدیریت میکند. به بخش مدیریت خطاها مراجعه کنید. | ناموجود | خیر |
RouteRule | مقصد پیامهای درخواست ورودی را پس از پردازش توسط خط لوله درخواست ProxyEndpoint تعریف میکند. معمولاً، RouteRule به پیکربندی TargetEndpoint نامگذاری شده اشاره میکند، اما میتواند مستقیماً به یک URL نیز اشاره کند. | ||
Name | ویژگی الزامی، که نامی برای RouteRule ارائه میدهد. کاراکترهایی که مجاز به استفاده از آنها در نام هستید به موارد زیر محدود میشوند: A-Za-z0-9._\-$ % . برای مثال، Cat2 %_ یک نام قانونی است. | ناموجود | بله |
Condition | یک دستور شرطی اختیاری که برای مسیریابی پویا در زمان اجرا استفاده میشود. به عنوان مثال، RouteRules شرطی برای فعال کردن مسیریابی مبتنی بر محتوا جهت پشتیبانی از نسخهبندی backend مفید هستند. | ناموجود | خیر |
TargetEndpoint | یک رشته اختیاری که پیکربندی TargetEndpoint نامگذاری شده را مشخص میکند. یک TargetEndpoint نامگذاری شده، هر TargetEndpoint تعریف شده در همان پروکسی API تحت دایرکتوری با نامگذاری یک TargetEndpoint، مشخص میکنید که پیامهای درخواست پس از پردازش توسط ProxyEndpoint request pipeline به کجا ارسال شوند. توجه داشته باشید که این یک تنظیم اختیاری است. یک ProxyEndpoint ممکن است مستقیماً یک URL را فراخوانی کند. برای مثال، یک منبع جاوا اسکریپت یا جاوا، که در نقش یک کلاینت HTTP عمل میکند، ممکن است وظیفه اصلی یک TargetEndpoint را انجام دهد، که ارسال درخواستها به یک سرویس backend است. | ناموجود | خیر |
| آدرس اینترنتی | یک رشته اختیاری که آدرس شبکه خروجی را که توسط ProxyEndpoint فراخوانی میشود، تعریف میکند و هرگونه پیکربندی TargetEndpoint را که ممکن است در /targets ذخیره شده باشد، دور میزند. | ناموجود | خیر |
نحوه پیکربندی RouteRules
یک TargetEndpoint نامگذاری شده به یک فایل پیکربندی در مسیر /apiproxy/targets اشاره دارد که RouteRule پس از پردازش توسط ProxyEndpoint، درخواست را به آن ارسال میکند.
برای مثال، RouteRule زیر به پیکربندی /apiproxy/targets/myTarget.xml اشاره دارد:
<RouteRule name="default"> <TargetEndpoint>myTarget</TargetEndpoint> </RouteRule>
فراخوانی مستقیم URL
یک ProxyEndpoint همچنین میتواند مستقیماً یک سرویس backend را فراخوانی کند. فراخوانی مستقیم URL، هرگونه پیکربندی TargetEndpoints نامگذاری شده را در /apiproxy/targets دور میزند. به همین دلیل، TargetEndpoint یک پیکربندی پروکسی API اختیاری است، اگرچه در عمل، فراخوانی مستقیم از ProxyEndpoint توصیه نمیشود.
برای مثال، RouteRule زیر یک فراخوانی HTTP به http://api.mycompany.com/v2 انجام میدهد.
<RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
مسیرهای شرطی
میتوان RouteRules را برای پشتیبانی از مسیریابی پویا در زمان اجرا، به صورت زنجیرهای تنظیم کرد. درخواستهای ورودی را میتوان بر اساس هدرهای HTTP، محتوای پیام، پارامترهای پرسوجو یا اطلاعات زمینهای مانند زمان روز، منطقه و غیره، به پیکربندیهای TargetEndpoint نامگذاری شده، مستقیماً به URLها یا به ترکیبی از این دو هدایت کرد.
RouteRules شرطی مانند سایر دستورات شرطی در Apigee Edge عمل میکنند. به مرجع شرایط و مرجع متغیرها مراجعه کنید.
برای مثال، ترکیب RouteRule زیر ابتدا درخواست ورودی را برای تأیید مقدار هدر HTTP ارزیابی میکند. اگر هدر HTTP routeTo دارای مقدار TargetEndpoint1 باشد، درخواست به TargetEndpoint ای با نام TargetEndpoint1 ارسال میشود. در غیر این صورت، درخواست ورودی به http://api.mycompany.com/v2 ارسال میشود.
<RouteRule name="MyRoute"> <Condition>request.header.routeTo = "TargetEndpoint1"</Condition> <TargetEndpoint>TargetEndpoint1</TargetEndpoint> </RouteRule> <RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
مسیرهای تهی
میتوان یک RouteRule با مقدار null تعریف کرد تا از سناریوهایی پشتیبانی کند که در آنها نیازی به ارسال پیام درخواست به TargetEndpoint نباشد. این مورد زمانی مفید است که ProxyEndpoint تمام پردازشهای لازم را انجام دهد، برای مثال با استفاده از جاوا اسکریپت برای فراخوانی یک سرویس خارجی یا بازیابی دادهها از یک جستجو در مخزن کلید/مقدار سرویسهای API.
برای مثال، کد زیر یک مسیر null را تعریف میکند:
<RouteRule name="GoNowhere"/>
مسیرهای شرطی null میتوانند مفید باشند. در مثال زیر، یک مسیر null طوری پیکربندی شده است که زمانی اجرا شود که یک request.header.X-DoNothing در هدر HTTP مقداری غیر از null داشته باشد.
<RouteRule name="DoNothingOnDemand"> <Condition>request.header.X-DoNothing != null</Condition> </RouteRule>
به یاد داشته باشید، RouteRules میتوانند به صورت زنجیرهای باشند، بنابراین یک Route با null شرطی معمولاً یکی از اجزای مجموعهای از RouteRules است که برای پشتیبانی از مسیریابی شرطی طراحی شدهاند.
یک کاربرد عملی از یک مسیر شرطی null، پشتیبانی از ذخیرهسازی (caching) است. با استفاده از مقدار متغیری که توسط سیاست Cache تنظیم شده است، میتوانید یک پروکسی API را پیکربندی کنید تا مسیر null را هنگام ارائه یک ورودی از حافظه پنهان (cache) اجرا کند.
<RouteRule name="DoNothingUnlessTheCacheIsStale"> <Condition>lookupcache.LookupCache-1.cachehit is true</Condition> </RouteRule>
نقطه پایانی هدف

یک TargetEndpoint معادل خروجی یک ProxyEndpoint است. یک TargetEndpoint به عنوان کلاینت برای یک سرویس backend یا API عمل میکند -- درخواستها را ارسال و پاسخها را دریافت میکند.
یک پروکسی API نیازی به TargetEndpoint ندارد. ProxyEndpointها را میتوان طوری پیکربندی کرد که URLها را مستقیماً فراخوانی کنند. یک پروکسی API بدون TargetEndpoint معمولاً حاوی یک ProxyEndpoint است که یا مستقیماً یک سرویس backend را فراخوانی میکند، یا طوری پیکربندی شده است که با استفاده از جاوا یا جاوا اسکریپت یک سرویس را فراخوانی کند.
پیکربندی TargetEndpoint
/targets/default.xml
TargetEndpoint اتصال خروجی از Apigee Edge به سرویس یا منبع دیگری را تعریف میکند.
در اینجا یک نمونه پیکربندی TargetEndpoint آورده شده است:
<TargetEndpoint name="default">
<PreFlow/>
<Flows/>
<PostFlow/>
<HTTPTargetConnection>
<URL>http://mocktarget.apigee.net</URL>
<SSLInfo/>
</HTTPTargetConnection>
<FaultRules/>
<DefaultFaultRule/>
<ScriptTarget/>
<LocalTargetConnection/>
</TargetEndpoint>عناصر پیکربندی TargetEndpoint
یک TargetEndpoint میتواند یک target را به یکی از روشهای زیر فراخوانی کند:
- HTTPTargetConnection برای فراخوانیهای HTTP(S)
- اتصال محلی برای زنجیرهسازی پروکسی به پروکسی محلی
- ScriptTarget برای فراخوانیهای یک اسکریپت Node.js میزبانیشده توسط Edge
فقط یکی از این موارد را در یک TargetEndpoint پیکربندی کنید.
| نام | توضیحات | پیشفرض | الزامی است؟ |
|---|---|---|---|
TargetEndpoint | |||
name | نام TargetEndpoint، که باید در پیکربندی پروکسی API منحصر به فرد باشد. نام TargetEndPoint در ProxyEndpoint RouteRule برای هدایت درخواستها برای پردازش خروجی استفاده میشود. کاراکترهایی که مجاز به استفاده از آنها در نام هستید به موارد زیر محدود میشوند: A-Za-z0-9._\-$ % . | ناموجود | بله |
PreFlow | سیاستهای موجود در جریان PreFlow یک درخواست یا پاسخ را تعریف میکند. | ناموجود | بله |
Flows | سیاستهای مربوط به جریانهای شرطی یک درخواست یا پاسخ را تعریف میکند. | ناموجود | بله |
PostFlow | سیاستهای موجود در جریان PostFlow یک درخواست یا پاسخ را تعریف میکند. | ناموجود | بله |
HTTPTargetConnection | با عناصر فرزند خود، دسترسی به منبع backend از طریق HTTP را مشخص میکند. اگر از HTTPTargetConnection استفاده میکنید، انواع دیگر اتصالات هدف (ScriptTarget یا LocalTargetConnection) را پیکربندی نکنید. | ||
URL | آدرس شبکه سرویس backend را که TargetEndpoint پیامهای درخواست را به آن ارسال میکند، تعریف میکند. | ناموجود | خیر |
LoadBalancer | یک یا چند پیکربندی TargetServer نامگذاری شده را تعریف میکند. پیکربندیهای TargetServer نامگذاری شده میتوانند برای متعادلسازی بار در تعریف دو یا چند اتصال پیکربندی نقطه پایانی استفاده شوند. همچنین میتوانید از TargetServers برای جدا کردن پیکربندیهای پروکسی API از URLهای نقاط پایانی سرویس backend استفاده کنید. به بخش متعادلسازی بار در سرورهای backend مراجعه کنید. | ناموجود | خیر |
Properties | مجموعهای از تنظیمات پیکربندی HTTP اختیاری را میتوان به عنوان ویژگیهای یک <TargetEndpoint> تعریف کرد. | ناموجود | خیر |
SSLInfo | به صورت اختیاری تنظیمات TLS/SSL را روی یک TargetEndpoint تعریف کنید تا اتصال TLS/SSL بین پروکسی API و سرویس هدف کنترل شود. به پیکربندی TLS/SSL TargetEndpoint مراجعه کنید. | ناموجود | خیر |
LocalTargetConnection | با عناصر فرزند خود، منبعی را مشخص میکند که باید به صورت محلی به آن دسترسی پیدا کرد و ویژگیهای شبکه مانند متعادلسازی بار و پردازندههای پیام را نادیده میگیرد. برای مشخص کردن منبع هدف، یا عنصر فرزند APIProxy (به همراه عنصر ProxyEndpoint) یا عنصر فرزند Path را اضافه کنید. برای اطلاعات بیشتر، به زنجیرهسازی پروکسیهای API با هم مراجعه کنید. اگر از LocalTargetConnection استفاده میکنید، انواع دیگر اتصالات هدف (HTTPTargetConnection یا ScriptTarget) را پیکربندی نکنید. | ||
APIProxy | نام یک پروکسی API را برای استفاده به عنوان هدف درخواستها مشخص میکند. پروکسی هدف باید در همان سازمان و محیطی باشد که پروکسی درخواستها را ارسال میکند. این یک جایگزین برای استفاده از عنصر مسیر است. | ناموجود | خیر |
ProxyEndpoint | به همراه APIProxy برای مشخص کردن نام ProxyEndpoint پروکسی هدف استفاده میشود. | ناموجود | خیر |
Path | مسیر پایانی یک پروکسی API را برای استفاده به عنوان هدف درخواستها مشخص میکند. پروکسی هدف باید در همان سازمان و محیطی باشد که پروکسی درخواستها را ارسال میکند. این یک جایگزین برای استفاده از APIProxy است. | ناموجود | خیر |
FaultRules | نحوه واکنش TargetEndpoint به یک خطا را تعریف میکند. یک قانون خطا دو مورد را مشخص میکند:
به بخش مدیریت خطاها مراجعه کنید. | ناموجود | خیر |
DefaultFaultRule | هرگونه خطایی (سیستم، انتقال، پیامرسانی یا خطمشی) را که صریحاً توسط FaultRule دیگری مدیریت نمیشوند، مدیریت میکند. به بخش مدیریت خطاها مراجعه کنید. | ناموجود | خیر |
ScriptTarget | |||
ResourceURL | نوع منبع (گره) و نام اسکریپت اصلی Node.js که قابلیت TargetEndpoint را پیادهسازی میکند، تعریف میکند. این اسکریپت باید به فایلهای منبع پروکسی API شما اضافه شود. به بخش افزودن Node.js به یک پروکسی API موجود مراجعه کنید. اگر از ScriptTarget استفاده میکنید، انواع دیگر اتصالات هدف (HTTPTargetConnection یا LocalTargetConnection) را پیکربندی نکنید. | ناموجود | بله |
EnvironmentVariable | به صورت اختیاری، متغیرهای محیطی را به اسکریپت اصلی Node.js منتقل کنید. به درک پشتیبانی Edge از ماژولهای Node.js مراجعه کنید. | ناموجود | خیر |
Arguments | به صورت اختیاری آرگومانها را به اسکریپت اصلی Node.js ارسال کنید. به درک پشتیبانی Edge از ماژولهای Node.js مراجعه کنید. | ناموجود | خیر |
پیکربندی TLS/SSL TargetEndpoint
نقاط هدف (TargetEndpoints) اغلب نیاز به مدیریت اتصالات HTTPS با زیرساختهای ناهمگن backend دارند. به همین دلیل، تعدادی از تنظیمات پیکربندی TLS/SSL پشتیبانی میشوند.
عناصر پیکربندی TLS/SSL TargetEndpoint
| نام | توضیحات | پیشفرض | الزامی است؟ |
|---|---|---|---|
SSLInfo | |||
Enabled | نشان میدهد که آیا TLS/SSL برای نقطه پایانی فعال است یا خیر. اگر <URL> پروتکل HTTPS را مشخص کند، مقدار پیشفرض true و اگر <URL> HTTP را مشخص کند، false . | اگر <URL> مشخص کننده HTTPS باشد، درست است. | خیر |
TrustStore | یک keystore حاوی گواهیهای سرور معتبر. | ناموجود | خیر |
ClientAuthEnabled | تنظیمی که احراز هویت کلاینت خروجی (TLS/SSL دوطرفه) را فعال میکند | نادرست | خیر |
KeyStore | یک فروشگاه کلید حاوی کلیدهای خصوصی که برای احراز هویت کلاینت خروجی استفاده میشود | ناموجود | بله (اگر ClientAuthEnabled مقدار true داشته باشد) |
KeyAlias | نام مستعار کلید خصوصی مورد استفاده برای احراز هویت کلاینت خروجی | ناموجود | بله (اگر ClientAuthEnabled مقدار true داشته باشد) |
Ciphers | رمزهای پشتیبانی شده برای TLS/SSL خروجی. اگر هیچ رمزی مشخص نشده باشد، تمام رمزهای موجود برای JVM مجاز خواهند بود. برای محدود کردن رمزها، عناصر زیر را که رمزهای پشتیبانی شده را فهرست میکنند، اضافه کنید: <Ciphers> <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher> <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher> </Ciphers> | ناموجود | خیر |
Protocols | پروتکلهای پشتیبانیشده برای TLS/SSL خروجی. اگر هیچ پروتکلی مشخص نشده باشد، تمام پروتکلهای موجود برای JVM مجاز خواهند بود. برای محدود کردن پروتکلها، عناصر زیر را که پروتکلهای پشتیبانیشده را فهرست میکنند، اضافه کنید: <Protocols> <Protocol>TLSv1.1</Protocol> <Protocol>TLSv1.2</Protocol> </Protocols> | ناموجود | خیر |
CommonName | در صورت مشخص شدن، مقداری که نام مشترک گواهی هدف در مقابل آن اعتبارسنجی میشود. این مقدار فقط برای پیکربندیهای TargetEndpoint و TargetServer معتبر است. برای پیکربندیهای VirtualHost معتبر نیست. به طور پیشفرض، مقدار مشخص شده دقیقاً با نام مشترک گواهی هدف مطابقت دارد. برای مثال، استفاده از به صورت اختیاری، Apigee میتواند با استفاده از ویژگی برای مثال، یک نام مشترک که به صورت <CommonName wildcardMatch="true">*.myhost.com</CommonName> | ناموجود | خیر |
نمونه TargetEndpoint با احراز هویت کلاینت خروجی فعال
<TargetEndpoint name="default">
<HttpTargetConnection>
<URL>https://myservice.com</URL>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>true</ClientAuthEnabled>
<KeyStore>myKeystore</KeyStore>
<KeyAlias>myKey</KeyAlias>
<TrustStore>myTruststore</TrustStore>
</SSLInfo>
</HttpTargetConnection>
</TargetEndpoint>برای دستورالعملهای دقیق، به پیکربندی TLS از Edge به backend (Cloud و Private Cloud) مراجعه کنید.
استفاده از متغیرهای جریان برای تنظیم پویای مقادیر TLS/SSL
همچنین میتوانید جزئیات TLS/SSL را به صورت پویا تنظیم کنید تا از الزامات زمان اجرا انعطافپذیر پشتیبانی کند. به عنوان مثال، اگر پروکسی شما به دو هدف بالقوه متفاوت (یک هدف آزمایشی و یک هدف عملیاتی) متصل شود، میتوانید پروکسی API خود را به صورت برنامهنویسی شده تشخیص دهید که کدام محیط را فراخوانی میکند و به صورت پویا ارجاعات را به keystore و truststore مناسب تنظیم کند. مقاله انجمن Apigee زیر این سناریو را با جزئیات بیشتری توضیح میدهد و نمونههایی از پروکسی API قابل استقرار را ارائه میدهد: SSLInfo پویا برای TargetEndpoint با استفاده از مرجع متغیر .
در مثال زیر که نحوه تنظیم برچسب <SSLInfo> در پیکربندی TargetEndpoint را نشان میدهد، مقادیر میتوانند در زمان اجرا، مثلاً توسط یک Java Callout، یک JavaScript policy یا یک Assign Message policy، ارائه شوند. از هر متغیر message که حاوی مقادیری است که میخواهید تنظیم کنید، استفاده کنید.
متغیرها فقط در عناصر زیر مجاز هستند.
<SSLInfo> <Enabled>{myvars.ssl.enabled}</Enabled> <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled> <KeyStore>{myvars.ssl.keystore}</KeyStore> <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias> <TrustStore>{myvars.ssl.trustStore}</TrustStore> </SSLInfo>
استفاده از ارجاعات برای تنظیم پویای مقادیر TLS/SSL
هنگام پیکربندی یک TargetEndpoint که از HTTPS استفاده میکند، باید مواردی را در نظر بگیرید که گواهی TLS/SSL منقضی میشود، یا تغییر در پیکربندی سیستم شما را ملزم به بهروزرسانی گواهی میکند. در نصب Edge برای Private Cloud، هنگام پیکربندی TLS/SSL با استفاده از مقادیر استاتیک یا با استفاده از متغیرهای جریان، این احتمال وجود دارد که مجبور شوید پردازندههای پیام را مجدداً راهاندازی کنید.
برای اطلاعات بیشتر، به بهروزرسانی گواهی TLS مراجعه کنید.
با این حال، میتوانید به صورت اختیاری TargetEndpoint را طوری پیکربندی کنید که به جای آن از یک ارجاع به keystore یا truststore استفاده کند. مزیت استفاده از یک ارجاع این است که میتوانید ارجاع را بهروزرسانی کنید تا به یک keystore یا truststore متفاوت اشاره کند تا گواهی TLS/SSL را بهروزرسانی کند، بدون اینکه نیاز به راهاندازی مجدد پردازندههای پیام باشد.
برای مثال، در زیر یک TargetEndpoint نشان داده شده است که از ارجاع به keystore استفاده میکند:
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>ref://keystoreref</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>از فراخوانی POST API زیر برای ایجاد مرجعی با نام keystoreref استفاده کنید:
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
-d '<ResourceReference name="keystoreref">
<Refers>myTestKeystore</Refers>
<ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:passwordاین ارجاع، نام و نوع کلید اصلی (keystore) را مشخص میکند.
برای مشاهده مرجع از فراخوانی API GET زیر استفاده کنید:
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:passwordبرای اینکه بعداً ارجاع را تغییر دهید تا به یک فروشگاه کلید متفاوت اشاره کند، و مطمئن شوید که نام مستعار همان نام است، از فراخوانی PUT زیر استفاده کنید:
curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
-d '<ResourceReference name="keystoreref">
<Refers>myNewKeystore</Refers>
<ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:passwordTargetEndpoint با متعادلسازی بار هدف
TargetEndpointها با استفاده از سه الگوریتم متعادلسازی بار، از متعادلسازی بار در چندین TargetServer با نامهای مختلف پشتیبانی میکنند.
برای دستورالعملهای دقیق، به متعادلسازی بار در سرورهای backend مراجعه کنید.
سیاستها
دایرکتوری /policies در یک پروکسی API شامل تمام سیاستهای موجود برای اتصال به Flows در پروکسی API است.
عناصر پیکربندی سیاست
| نام | توضیحات | پیشفرض | الزامی است؟ |
|---|---|---|---|
Policy | |||
name | نام داخلی سیاست. کاراکترهایی که میتوانید در نام استفاده کنید به موارد زیر محدود شدهاند: در صورت تمایل، از عنصر | ناموجود | بله |
enabled | برای اعمال سیاست، روی برای "خاموش کردن" سیاست، روی | درست | خیر |
continueOnError | برای بازگرداندن خطا در صورت عدم موفقیت یک سیاست، روی برای ادامه اجرای جریان حتی پس از شکست یک سیاست، روی | نادرست | خیر |
async | توجه : این ویژگی باعث نمیشود که سیاست به صورت ناهمگام اجرا شود. در بیشتر موارد، این مورد را با مقدار پیشفرض وقتی روی برای استفاده از رفتار ناهمزمان در پروکسیهای API، به مدل شیء جاوا اسکریپت مراجعه کنید. | نادرست | خیر |
پیوست سیاست
تصویر زیر توالی اجرای جریانهای پروکسی API را نشان میدهد:

همانطور که در بالا نشان داده شده است:
سیاستها به عنوان مراحل پردازش به Flows پیوست میشوند. نام سیاست برای ارجاع به سیاستی که قرار است به عنوان یک مرحله پردازش اجرا شود، استفاده میشود. قالب پیوست سیاست به شرح زیر است:
<Step><Name>MyPolicy</Name></Step>
سیاستها به ترتیبی که به یک جریان متصل میشوند، اجرا میشوند. برای مثال:
<Step><Name>FirstPolicy</Name></Step> <Step><Name>SecondPolicy</Name></Step>
عناصر پیکربندی پیوست سیاست
| نام | توضیحات | پیشفرض | الزامی است؟ |
|---|---|---|---|
Step | |||
Name | نام سیاستی که قرار است توسط این تعریف مرحله اجرا شود. | ناموجود | بله |
Condition | یک عبارت شرطی که تعیین میکند آیا سیاست اعمال میشود یا خیر. اگر یک سیاست دارای شرط مرتبط باشد، آن سیاست فقط در صورتی اجرا میشود که عبارت شرطی درست (true) باشد. | ناموجود | خیر |
جریانها
ProxyEndpoint و TargetEndpoint یک خط لوله برای پردازش پیام درخواست و پاسخ تعریف میکنند. یک خط لوله پردازش شامل یک جریان درخواست و یک جریان پاسخ است. هر جریان درخواست و جریان پاسخ به یک PreFlow، یک یا چند جریان اختیاری «شرطی» یا «نامگذاری شده» و یک PostFlow تقسیم میشود.
- پیش از جریان: همیشه اجرا میشود. قبل از هر جریان شرطی اجرا میشود.
- PostFlow: همیشه اجرا میشود. پس از هر جریان شرطی اجرا میشود.
علاوه بر این، میتوانید یک PostClientFlow به ProxyEndpoint اضافه کنید که پس از بازگشت پاسخ به برنامه کلاینت درخواستکننده اجرا میشود. فقط سیاست MessageLogging و افزونه Google Stackdriver Logging میتوانند به این جریان متصل شوند. PostClientFlow تأخیر پروکسی API را کاهش میدهد و اطلاعاتی را برای ثبت وقایع در دسترس قرار میدهد که تا پس از بازگشت پاسخ به کلاینت محاسبه نمیشوند، مانند client.sent.start.timestamp و client.sent.end.timestamp . این جریان در درجه اول برای اندازهگیری فاصله زمانی بین مهرهای زمانی شروع و پایان برای پیام پاسخ استفاده میشود.
یک ویدیوی آموزشی سریع تماشا کنید
ویدیو: این ویدیوی کوتاه را در مورد استفاده از ثبت پیام در PostClientFlow ببینید.
در اینجا مثالی از PostClientFlow به همراه سیاست ثبت پیام پیوست شده، آورده شده است.
...
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>
<PostClientFlow>
<Request/>
<Response>
<Step>
<Name>Message-Logging-1</Name>
</Step>
</Response>
</PostClientFlow>
...خط لوله پردازش پروکسی API، جریانها را به ترتیب زیر اجرا میکند:
درخواست خط لوله:
- درخواست پروکسی PreFlow
- جریانهای شرطی درخواست پروکسی (اختیاری)
- درخواست پروکسی PostFlow
- درخواست هدف PreFlow
- جریانهای شرطی درخواست هدف (اختیاری)
- درخواست هدف PostFlow
خط لوله پاسخ:
- پیش جریان پاسخ هدف
- جریانهای شرطی پاسخ هدف (اختیاری)
- جریان پس از پاسخ هدف
- پیش جریان پاسخ پروکسی
- جریانهای شرطی پاسخ پروکسی (اختیاری)
- پاسخ پروکسی PostFlow
- پاسخ PostClientFlow (اختیاری)
Only those Flows with policy attachments need to be configured in ProxyEndpoint or TargetEndpoint configurations. PreFlow and PostFlow need only be specified in a ProxyEndpoint or TargetEndpoint configuration when a policy needs to be enforced during PreFlow or PostFlow processing.
In contrast to conditional flows, the ordering of PreFlow and PostFlow elements is not important--the API proxy will always execute each at the appropriate point in the pipeline, regardless of where they appear in the Endpoint configuration.
Conditional Flows
ProxyEndpoints and TargetEndpoints support an unlimited number of conditional flows (also known as 'named flows').
The API proxy tests for the condition specified in the conditional flow and, if the condition is met, the processing steps in the conditional flow are executed by the API proxy. If the condition is not met, then the processing steps in the conditional flow are bypassed. Conditional flows are evaluated in the order defined in the API proxy and the first one whose condition is met is executed.
By defining conditional flows, you gain the ability to apply processing steps in an API proxy based on:
- درخواست آدرس اینترنتی
- HTTP verb (GET/PUT/POST/DELETE)
- Value of a query param, header, and form param
- Many other types of conditions
For example, the following conditional flow specifies that it is executed only when the request resource path is /accesstoken . Any inbound request with the path /accesstoken causes this flow to be executed, along with any policies that are attached to the flow. If the request path does not include the suffix /accesstoken , then the flow does not execute (although another conditional flow might).
<Flows>
<Flow name="TokenEndpoint">
<Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
<Request>
<Step>
<Name>GenerateAccessToken</Name>
</Step>
</Request>
</Flow>
</Flows>Flow Configuration Elements
| نام | توضیحات | پیشفرض | Required? |
|---|---|---|---|
Flow | A request or response processing pipeline defined by A ProxyEndpoint or TargetEndpoint | ||
Name | The unique name of the Flow. | ناموجود | بله |
Condition | A conditional statement that evaluates on or more variables to evaluate to true or false. All Flows other than the predefined PreFlow and PostFlow types must define a condition for their execution. | ناموجود | بله |
Request | The pipeline associated with Request message processing | ناموجود | خیر |
Response | The pipeline associated with Response message processing | ناموجود | خیر |
Step processing
The sequential ordering of conditional Flows is enforced by Apigee Edge. Conditional Flows execute from top to bottom. The first conditional Flow whose condition evaluates to true is executed, and only one conditional Flow is executed.
For example, in the following Flow configuration, any inbound request that does not include the path suffix /first or /second will cause the ThirdFlow to execute, enforcing the policy called Return404 .
<Flows>
<Flow name="FirstFlow">
<Condition>proxy.pathsuffix MatchesPath "/first"</Condition>
<Request>
<Step><Name>FirstPolicy</Name></Step>
</Request>
</Flow>
<Flow name="SecondFlow">
<Condition>proxy.pathsuffix MatchesPath "/second"</Condition>
<Request>
<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>
</Request>
</Flow>
<Flow name="ThirdFlow">
<Request>
<Step><Name>Return404</Name></Step>
</Request>
</Flow>
</Flows>منابع
"Resources" (resource files for use in API proxies) are scripts, code, and XSL transformations that can be attached to Flows using policies. These appear in the "Scripts" section of the API proxy editor in the management UI.
See Resource files for the supported resource types.
Resources can be stored in an API proxy, an environment, or an organization. In each case, a resource is referenced by name in a Policy. API Services resolves the name by moving from the API proxy, to environment, to organization level.
A resource stored at the organization level can be referenced by Policies in any environment. A resource stored at the environment level can be referenced by Policies in that environment. A resource stored at the API proxy level can be referenced only by Policies in that API proxy.