مرجع پیکربندی پروکسی API

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

به عنوان توسعه‌دهنده‌ای که با Apigee Edge کار می‌کند، فعالیت‌های اصلی توسعه شما شامل پیکربندی API Proxies است که به عنوان پروکسی برای APIها یا سرویس‌های backend عمل می‌کنند. این سند مرجعی از تمام عناصر پیکربندی موجود برای شما هنگام ساخت API Proxies است.

اگر در حال یادگیری نحوه ساخت پروکسی‌های API هستید، توصیه می‌شود با موضوع «ساخت یک پروکسی API ساده» شروع کنید.

رایج‌ترین روش‌های ویرایش پیکربندی‌های پروکسی عبارتند از:

توسعه محلی پیکربندی‌های پروکسی

شما می‌توانید پیکربندی‌های پروکسی خود را دانلود کنید تا بتوانید آنها را در یک دستگاه محلی ویرایش کنید. پس از اتمام کار، نتایج را در Edge آپلود می‌کنید. این رویکرد به شما امکان می‌دهد پیکربندی‌های پروکسی را در کنترل منبع، نسخه‌بندی و سایر گردش‌های کاری مشترک خود ادغام کنید. علاوه بر این، با کار بر روی پیکربندی پروکسی به صورت محلی، می‌توانید از ویرایشگر XML و ابزارهای اعتبارسنجی خود استفاده کنید.

این بخش نحوه استفاده از رابط کاربری برای دانلود پیکربندی پروکسی موجود، ویرایش آن و سپس آپلود مجدد آن به Edge برای استقرار را شرح می‌دهد. همچنین می‌توانید از apigeetool برای دانلود و استقرار پیکربندی پروکسی جدید (به ترتیب با استفاده از دستورات fetchproxy و deployproxy ) استفاده کنید.

برای ویرایش پیکربندی پروکسی به صورت محلی با استفاده از رابط کاربری:

  1. پیکربندی پروکسی فعلی را در رابط کاربری Edge دانلود کنید. (در نمای API Proxies، گزینه Project > Download Revision را انتخاب کنید.)
  2. روی دستگاه محلی خود، یک دایرکتوری جدید ایجاد کنید و فایل زیپ دانلود شده را در آن گسترش دهید.

    برای باز کردن فایل ZIP، می‌توانید از ابزاری مانند unzip استفاده کنید، همانطور که در مثال زیر نشان داده شده است:

    mkdir myappdir
    unzip ./my-app_app_rev3_2019_04_20.zip -d myappdir

    محتوای بسط‌یافته‌ی فایل ZIP باید مشابه ساختار شرح داده شده در ساختار پروکسی API باشد.

  3. در صورت لزوم، فایل‌های منبع را ویرایش کنید. برای شرح فایل‌های منبع در پیکربندی پروکسی، به فایل‌های پیکربندی و ساختار دایرکتوری یک پروکسی API مراجعه کنید.

    برای مثال، برای فعال کردن نظارت بر سلامت در پروکسی API خود، فایل پیکربندی TargetEndpoint را در دایرکتوری /apiproxy/targets/ ویرایش کنید. فایل پیش‌فرض در این دایرکتوری default.xml است، اگرچه اگر از targetهای شرطی استفاده کنید، ممکن است فایل‌هایی با نام‌های مختلف وجود داشته باشد.

    در این حالت، اگر فایل پیکربندی TargetEndpoint و دایرکتوری آن وجود ندارند، آنها را ایجاد کنید.

  4. پس از اتمام ویرایش فایل‌های پیکربندی پروکسی، حتماً تغییرات خود را ذخیره کنید.
  5. به دایرکتوری جدیدی که هنگام گسترش فایل‌های ZIP ایجاد کردید (ریشه فایل‌های پیکربندی گسترش‌یافته) بروید.

    برای مثال، اگر فایل‌ها را در دایرکتوری /myappdir گسترش داده‌اید، همانطور که در مثال زیر نشان داده شده است، به آن دایرکتوری بروید:

    cd myappdir

    قبل از بایگانی مجدد فایل‌های پیکربندی پروکسی، باید به این دایرکتوری بروید زیرا نمی‌خواهید دایرکتوری /myappdir در فایل زیپ وجود داشته باشد. دایرکتوری سطح بالا در فایل زیپ باید /apiproxy باشد.

  6. فایل‌های پیکربندی پروکسی، شامل فایل‌های جدید یا تغییر یافته را دوباره بایگانی کنید. می‌توانید از ابزاری مانند zip استفاده کنید، همانطور که در مثال زیر نشان داده شده است:
    zip my-new-proxy.zip -r .

    دایرکتوری سطح بالا در فایل ZIP باید /apiproxy باشد.

    هیچ الزام خاصی برای نام فایل ZIP وجود ندارد. برای مثال، نیازی نیست شماره ویرایش را افزایش دهید یا تاریخ را در نام فایل مشخص کنید، اما انجام این کار می‌تواند برای اشکال‌زدایی یا کنترل منبع مفید باشد.

    Edge هنگام آپلود پیکربندی پروکسی جدید، شماره اصلاح آن را برای شما افزایش می‌دهد.

  7. پیکربندی پروکسی جدید را با استفاده از رابط کاربری Edge آپلود کنید. (در نمای API Proxies ، گزینه Project > Upload a New Revision را انتخاب کنید.)

    اگر با خطایی مانند Bundle is invalid. Empty bundle. مواجه شدید، مطمئن شوید که دایرکتوری سطح بالای فایل ZIP شما /apiproxy است. اگر اینطور نیست، فایل‌های پیکربندی پروکسی خود را از ریشه دایرکتوری گسترش‌یافته دوباره بایگانی کنید.

    پس از آپلود پیکربندی پروکسی جدید شما، Edge شماره ویرایش را یک واحد افزایش می‌دهد و آن را در نمای خلاصه ویرایش نمایش می‌دهد.

    اج پس از آپلود نسخه جدید به همراه رابط کاربری، آن را برای شما مستقر نمی‌کند.

  8. نسخه جدید خود را مستقر کنید.

برای اطلاعات بیشتر به آموزش: نحوه دانلود پروکسی با استفاده از رابط کاربری و 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

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

ساختار دایرکتوری که apiproxy ریشه آن است را نشان می‌دهد. مستقیماً زیر دایرکتوری apiproxy دایرکتوری‌های policies، proxies، resources و targets و همچنین فایل weatherapi.xml قرار دارند.

فایل‌های پیکربندی و ساختار دایرکتوری یک پروکسی 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 طراحی شده است. ناموجود خیر

پروکسی اندپوینت

تصویر زیر جریان درخواست/پاسخ را نشان می‌دهد:

یک کلاینت را نشان می‌دهد که یک سرویس HTTP را فراخوانی می‌کند. درخواست قبل از پردازش توسط سرویس HTTP، از نقطه پایانی پروکسی و سپس از نقطه پایانی هدف عبور می‌کند. پاسخ قبل از بازگشت به کلاینت، از نقطه پایانی هدف و سپس از نقطه پایانی پروکسی عبور می‌کند.

/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 (برای مثال /weather ) است که به URL پایه یک پروکسی API (برای مثال، http://apifactory-test.apigee.net ) اضافه می‌شود. BasePath باید در یک محیط منحصر به فرد باشد. منحصر به فرد بودن آن هنگام تولید یا وارد کردن یک پروکسی API تأیید می‌شود.

استفاده از یک wildcard در مسیرهای پایه

شما می‌توانید از یک یا چند کاراکتر "*" در مسیرهای پایه پروکسی API استفاده کنید. برای مثال، یک مسیر پایه /team/*/members به ​​کلاینت‌ها اجازه می‌دهد تا https://[host]/team/ blue /members و https://[host]/team/ green /members فراخوانی کنند، بدون اینکه نیازی به ایجاد پروکسی‌های API جدید برای پشتیبانی از تیم‌های جدید داشته باشید. توجه داشته باشید که /**/ پشتیبانی نمی‌شود.

مهم: Apigee از استفاده از کاراکتر "*" به عنوان اولین عنصر یک مسیر پایه پشتیبانی نمی‌کند. برای مثال، این مورد پشتیبانی نمی‌شود: /*/search . شروع مسیر پایه با "*" می‌تواند به دلیل نحوه شناسایی مسیرهای معتبر توسط Edge منجر به خطاهای غیرمنتظره شود.

/ بله
VirtualHost

یک پروکسی API را با URL های پایه خاص برای یک محیط مرتبط می کند. VirtualHost یک پیکربندی نامگذاری شده است که یک یا چند URL را برای یک محیط تعریف می کند.

VirtualHost های نامگذاری شده که برای یک ProxyEndpoint تعریف شده‌اند، دامنه‌ها و پورت‌هایی را که یک پروکسی API روی آنها قرار می‌گیرد، و به طور کلی، URL ای را که برنامه‌ها برای فراخوانی یک پروکسی API استفاده می‌کنند، تعیین می‌کنند.

به طور پیش‌فرض، دو VirtualHost با نام‌های مختلف برای یک محیط تعریف شده‌اند: default و secure . یک سازمان همچنین می‌تواند دامنه‌های سفارشی تعریف کند. برای اطمینان از اینکه یک پروکسی API فقط از طریق HTTPS در دسترس است، به عنوان مثال، VirtualHost را در HTTPProxyConnection روی secure تنظیم کنید.

پیش‌فرض خیر
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 تحت دایرکتوری /targets است.

با نامگذاری یک 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>

نقطه پایانی هدف

یک کلاینت را نشان می‌دهد که یک سرویس HTTP را فراخوانی می‌کند. درخواست قبل از پردازش توسط سرویس HTTP، از نقطه پایانی پروکسی و سپس از نقطه پایانی هدف عبور می‌کند. پاسخ قبل از بازگشت به کلاینت، از نقطه پایانی هدف و سپس از نقطه پایانی پروکسی عبور می‌کند.

یک 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 را پیاده‌سازی می‌کند، تعریف می‌کند.

<ResourceURL>node://server.js</ResourceURL>

این اسکریپت باید به فایل‌های منبع پروکسی 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 معتبر نیست.

به طور پیش‌فرض، مقدار مشخص شده دقیقاً با نام مشترک گواهی هدف مطابقت دارد. برای مثال، استفاده از *.myhost.com به عنوان مقدار برای <CommonName> تنها در صورتی با نام میزبان هدف مطابقت و اعتبارسنجی می‌کند که مقدار دقیق *.myhost.com به عنوان نام مشترک در گواهی هدف مشخص شده باشد.

به صورت اختیاری، Apigee می‌تواند با استفاده از ویژگی wildcardMatch تطبیق را با wildcardها انجام دهد.

برای مثال، یک نام مشترک که به صورت abc.myhost.com در گواهی هدف مشخص شده است، در صورتی که عنصر <CommonName> به صورت زیر مشخص شده باشد، تطبیق داده شده و اعتبارسنجی می‌شود:

<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:password

TargetEndpoint با متعادل‌سازی بار هدف

TargetEndpointها با استفاده از سه الگوریتم متعادل‌سازی بار، از متعادل‌سازی بار در چندین TargetServer با نام‌های مختلف پشتیبانی می‌کنند.

برای دستورالعمل‌های دقیق، به متعادل‌سازی بار در سرورهای backend مراجعه کنید.

سیاست‌ها

دایرکتوری /policies ‎ در یک پروکسی API شامل تمام سیاست‌های موجود برای اتصال به Flows در پروکسی API است.

عناصر پیکربندی سیاست

نام توضیحات پیش‌فرض الزامی است؟
Policy
name

نام داخلی سیاست. کاراکترهایی که می‌توانید در نام استفاده کنید به موارد زیر محدود شده‌اند: A-Za-z0-9._\-$ % . با این حال، رابط کاربری مدیریت Edge محدودیت‌های بیشتری را اعمال می‌کند، مانند حذف خودکار کاراکترهایی که الفبایی-عددی نیستند.

در صورت تمایل، از عنصر <DisplayName> برای برچسب‌گذاری سیاست در ویرایشگر پروکسی رابط کاربری مدیریت با یک نام متفاوت به زبان طبیعی استفاده کنید.

ناموجود بله
enabled

برای اعمال سیاست، روی true تنظیم کنید.

برای "خاموش کردن" سیاست، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان متصل باقی بماند، اجرا نخواهد شد.

درست خیر
continueOnError

برای بازگرداندن خطا در صورت عدم موفقیت یک سیاست، روی false تنظیم کنید. این رفتار برای اکثر سیاست‌ها مورد انتظار است.

برای ادامه اجرای جریان حتی پس از شکست یک سیاست، روی true تنظیم شود.

نادرست خیر
async

توجه : این ویژگی باعث نمی‌شود که سیاست به صورت ناهمگام اجرا شود. در بیشتر موارد، این مورد را با مقدار پیش‌فرض false رها کنید.

وقتی روی true تنظیم شود، اجرای سیاست به یک نخ متفاوت منتقل می‌شود و نخ اصلی را برای رسیدگی به درخواست‌های اضافی آزاد می‌گذارد. هنگامی که پردازش آفلاین کامل شد، نخ اصلی برمی‌گردد و مدیریت جریان پیام را به پایان می‌رساند. در برخی موارد، تنظیم async روی true عملکرد پروکسی API را بهبود می‌بخشد. با این حال، استفاده بیش از حد از async می‌تواند با تغییر بیش از حد نخ، به عملکرد آسیب برساند.

برای استفاده از رفتار ناهمزمان در پروکسی‌های API، به مدل شیء جاوا اسکریپت مراجعه کنید.

نادرست خیر

پیوست سیاست

تصویر زیر توالی اجرای جریان‌های پروکسی API را نشان می‌دهد:

کلاینتی را نشان می‌دهد که یک سرویس HTTP را فراخوانی می‌کند. درخواست با ProxyEndpoint و TargetEndpoint مواجه می‌شود که هر کدام شامل مراحلی هستند که سیاست‌ها را فعال می‌کنند. پس از اینکه سرویس HTTP پاسخ را برمی‌گرداند، پاسخ قبل از بازگشت به کلاینت توسط TargetEndpoint و سپس ProxyEndpoing پردازش می‌شود. همانند درخواست، پاسخ توسط سیاست‌ها در مراحلی پردازش می‌شود.

همانطور که در بالا نشان داده شده است:

سیاست‌ها به عنوان مراحل پردازش به 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، جریان‌ها را به ترتیب زیر اجرا می‌کند:

درخواست خط لوله:

  1. درخواست پروکسی PreFlow
  2. جریان‌های شرطی درخواست پروکسی (اختیاری)
  3. درخواست پروکسی PostFlow
  4. درخواست هدف PreFlow
  5. جریان‌های شرطی درخواست هدف (اختیاری)
  6. درخواست هدف PostFlow

خط لوله پاسخ:

  1. پیش جریان پاسخ هدف
  2. جریان‌های شرطی پاسخ هدف (اختیاری)
  3. جریان پس از پاسخ هدف
  4. پیش جریان پاسخ پروکسی
  5. جریان‌های شرطی پاسخ پروکسی (اختیاری)
  6. پاسخ پروکسی PostFlow
  7. پاسخ 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.