شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
به عنوان یک توسعه دهنده که با Apigee Edge کار می کند، فعالیت های توسعه اولیه شما شامل پیکربندی پراکسی های API است که به عنوان پراکسی برای API ها یا خدمات باطن عمل می کنند. این سند مرجع تمام عناصر پیکربندی است که هنگام ساختن پراکسی های API در دسترس شماست.
اگر در حال یادگیری نحوه ساخت پراکسی های API هستید، توصیه می شود با مبحث ساخت یک پراکسی ساده API شروع کنید.
رایجترین روشهای ویرایش تنظیمات پروکسی عبارتند از:
- استفاده از ویرایشگر XML در رابط کاربری Edge
- پیکربندی را دانلود کنید و آن را به صورت محلی ویرایش کنید، همانطور که در توسعه محلی تنظیمات پروکسی توضیح داده شده است.
توسعه محلی تنظیمات پروکسی
میتوانید پیکربندیهای پراکسی خود را دانلود کنید تا بتوانید آنها را در یک دستگاه محلی ویرایش کنید. وقتی کارتان تمام شد، نتایج را در Edge آپلود میکنید. این رویکرد به شما امکان میدهد پیکربندیهای پراکسی را در کنترل منبع، نسخهسازی و سایر گردشهای کاری مشترک خود ادغام کنید. علاوه بر این، با کار بر روی یک پیکربندی پروکسی به صورت محلی، میتوانید از ویرایشگر XML و ابزار اعتبارسنجی خود استفاده کنید.
این بخش نحوه استفاده از رابط کاربری را برای دانلود یک پراکسی مخدوش موجود، ویرایش و سپس آپلود مجدد آن به Edge برای استقرار توضیح میدهد. همچنین می توانید از apigeetool برای دانلود و استقرار یک پیکربندی پراکسی جدید استفاده کنید (به ترتیب با استفاده از دستورات fetchproxy
و deployproxy
.)
برای ویرایش یک پیکربندی پروکسی به صورت محلی با استفاده از رابط کاربری:
- پیکربندی پراکسی فعلی را در رابط کاربری Edge دانلود کنید. (در نمای API Proxies، Project > Download Revision را انتخاب کنید.)
- در دستگاه محلی خود، یک دایرکتوری جدید ایجاد کنید و فایل ZIP دانلود شده را در آن گسترش دهید.
برای گسترش فایل ZIP، می توانید از ابزاری مانند
unzip
استفاده کنید، همانطور که در مثال زیر نشان داده شده است:mkdir myappdir
unzip ./my-app_app_rev3_2019_04_20.zip -d myappdir
محتویات گسترش یافته فایل ZIP باید مشابه ساختار توصیف شده در ساختار پروکسی API باشد.
- فایل های منبع را در صورت لزوم ویرایش کنید. برای توضیح فایلهای منبع در یک پیکربندی پراکسی، به فایلهای پیکربندی و ساختار دایرکتوری یک پروکسی API مراجعه کنید.
به عنوان مثال، برای فعال کردن نظارت بر سلامت در پروکسی API خود، فایل پیکربندی TargetEndpoint را در فهرست
/apiproxy/targets/
ویرایش کنید. فایل پیش فرض در این دایرکتوریdefault.xml
است، اگرچه اگر از اهداف شرطی استفاده کنید ممکن است فایل هایی با نام های مختلف وجود داشته باشد.در این حالت، اگر فایل پیکربندی TargetEndpoint و دایرکتوری آن وجود نداشت، آنها را ایجاد کنید.
- پس از اتمام ویرایش فایل های پیکربندی پروکسی، حتما تغییرات خود را ذخیره کنید.
- به دایرکتوری جدیدی که هنگام گسترش فایلهای ZIP (ریشه فایلهای پیکربندی توسعهیافته) ایجاد کردهاید، تغییر دهید.
به عنوان مثال، اگر فایل ها را در پوشه
/myappdir
گسترش داده اید، همانطور که در مثال زیر نشان می دهد، به آن دایرکتوری تغییر دهید:cd myappdir
شما باید قبل از بایگانی مجدد فایل های پیکربندی پروکسی خود را به این دایرکتوری تغییر دهید زیرا نمی خواهید پوشه
/myappdir
در فایل ZIP گنجانده شود. دایرکتوری سطح بالای فایل ZIP باید/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 شماره ویرایش را افزایش میدهد و آن را در نمای Revision Summary نمایش میدهد.
Edge نسخه جدید را پس از آپلود با رابط کاربری برای شما اجرا نمی کند.
- بازبینی جدید خود را اجرا کنید.
برای اطلاعات بیشتر به آموزش: نحوه بارگیری یک پروکسی با استفاده از رابط کاربری و API مدیریت در انجمن Apigee مراجعه کنید.
ساختار پروکسی API
یک پروکسی API از پیکربندی زیر تشکیل شده است:
پیکربندی پایه | تنظیمات پیکربندی اولیه برای یک پراکسی API. به پیکربندی پایه مراجعه کنید. |
پیکربندی ProxyEndpoint | تنظیمات اتصال HTTP ورودی (از درخواست برنامهها به Apigee Edge)، جریانهای درخواست و پاسخ، و پیوستهای خطمشی. ProxyEndpoint را ببینید. |
پیکربندی TargetEndpoint | تنظیمات اتصال HTTP خروجی (از Apigee Edge تا سرویس Backend)، جریانهای درخواست و پاسخ، و پیوستهای خطمشی. به TargetEndpoint مراجعه کنید. |
جریان می یابد | خطوط لوله درخواست و پاسخ ProxyEndpoint و TargetEndpoint که می توان خط مشی ها را به آنها پیوست کرد. جریان ها را ببینید. |
سیاست ها | فایلهای پیکربندی با فرمت XML که با طرحهای خطمشی Apigee Edge مطابقت دارند. به سیاست ها مراجعه کنید. |
منابع | اسکریپت ها، فایل های JAR و فایل های XSLT که توسط خط مشی ها برای اجرای منطق سفارشی ارجاع می شوند. منابع را ببینید. |
ساختار و محتویات دایرکتوری پروکسی API
اجزای جدول بالا توسط فایل های پیکربندی در ساختار دایرکتوری زیر تعریف شده اند:
فایل های پیکربندی و ساختار دایرکتوری یک پروکسی API
این بخش فایل های پیکربندی و ساختار دایرکتوری یک پروکسی API را توضیح می دهد.
پیکربندی پایه
/apiproxy/weatherapi.xml
پیکربندی پایه برای یک پراکسی API، که نام پراکسی API را مشخص می کند. نام باید در یک سازمان منحصر به فرد باشد.
پیکربندی نمونه:
<APIProxy name="weatherapi"> </APIProxy>
عناصر پیکربندی پایه
نام | توضیحات | پیش فرض | مورد نیاز؟ |
---|---|---|---|
APIProxy | |||
name | نام پروکسی API، که باید در یک سازمان منحصر به فرد باشد. کاراکترهایی که مجاز به استفاده در نام هستید به موارد زیر محدود می شود: A-Za-z0-9_- | N/A | بله |
revision | شماره بازبینی پیکربندی پروکسی API. شما نیازی به تنظیم صریح شماره ویرایش ندارید، زیرا Apigee Edge به طور خودکار نسخه فعلی پراکسی API را ردیابی می کند. | N/A | خیر |
ConfigurationVersion | نسخه ای از طرح پیکربندی پروکسی API که این پروکسی API با آن مطابقت دارد. تنها مقدار پشتیبانی شده در حال حاضر majorVersion 4 و minorVersion 0 است. این تنظیم ممکن است در آینده برای فعال کردن تکامل فرمت پروکسی API استفاده شود. | 4.0 | خیر |
Description | شرح متنی پروکسی API. در صورت ارائه، توضیحات در رابط کاربری مدیریت Edge نمایش داده می شود. | N/A | خیر |
DisplayName | یک نام کاربرپسند که ممکن است با ویژگی name پیکربندی پروکسی API متفاوت باشد. | N/A | خیر |
Policies | فهرستی از خط مشی ها در فهرست /policies این پراکسی API. شما معمولاً فقط زمانی این عنصر را می بینید که پراکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شود. این صرفاً یک تنظیم "مانیفست" است که برای مشاهده محتویات پراکسی API طراحی شده است. | N/A | خیر |
ProxyEndpoints | فهرستی از ProxyEndpoints در فهرست /proxies این پراکسی API. شما معمولاً فقط زمانی این عنصر را می بینید که پراکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شود. این صرفاً یک تنظیم "مانیفست" است که برای مشاهده محتویات پراکسی API طراحی شده است. | N/A | خیر |
Resources | لیستی از منابع (جاوا اسکریپت، پایتون، جاوا، XSLT) در دایرکتوری /resources این پراکسی API. شما معمولاً فقط زمانی این عنصر را می بینید که پراکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شود. این صرفاً یک تنظیم "مانیفست" است که برای مشاهده محتویات پراکسی API طراحی شده است. | N/A | خیر |
Spec | مشخصات OpenAPI که با پراکسی API مرتبط است را شناسایی می کند. این مقدار روی یک URL یا مسیری در ذخیرهسازی مشخصات تنظیم میشود. توجه : فروشگاه مشخصات فقط در تجربه New Edge موجود است. برای اطلاعات بیشتر درباره فروشگاه مشخصات، به مدیریت و اشتراکگذاری مشخصات مراجعه کنید. | N/A | خیر |
TargetServers | فهرستی از TargetServers که در هر TargetEndpointهای این پراکسی API ارجاع شده است. شما معمولاً فقط زمانی این عنصر را می بینید که پراکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شود. این صرفاً یک تنظیم "مانیفست" است که برای مشاهده محتویات پراکسی API طراحی شده است. | N/A | خیر |
TargetEndpoints | فهرستی از TargetEndpoints در فهرست /targets این پراکسی API. شما معمولاً فقط زمانی این عنصر را می بینید که پراکسی API با استفاده از رابط کاربری مدیریت Edge ایجاد شود. این صرفاً یک تنظیم "مانیفست" است که برای مشاهده محتویات پراکسی API طراحی شده است. | N/A | خیر |
ProxyEndpoint
تصویر زیر جریان درخواست/پاسخ را نشان می دهد:
/apiproxy/proxies/default.xml
پیکربندی ProxyEndpoint رابط ورودی (رو به مشتری) را برای یک پروکسی API تعریف می کند. هنگامی که یک ProxyEndpoint را پیکربندی میکنید، یک پیکربندی شبکه را تنظیم میکنید که مشخص میکند چگونه برنامههای سرویس گیرنده ("برنامهها") باید API پروکسی را فراخوانی کنند.
نمونه پیکربندی 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._\-$ % . | N/A | بله |
PreFlow | خطمشیها را در جریان PreFlow یک درخواست یا پاسخ تعریف میکند. | N/A | بله |
Flows | خط مشی ها را در جریان های مشروط یک درخواست یا پاسخ تعریف می کند. | N/A | بله |
PostFlow | خطمشیها را در جریان PostFlow یک درخواست یا پاسخ تعریف میکند. | N/A | بله |
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> تعریف کرد. | N/A | خیر |
FaultRules | نحوه واکنش ProxyEndpoint به یک خطا را مشخص می کند. یک قانون خطا دو مورد را مشخص می کند:
رسیدگی به عیوب را ببینید. | N/A | خیر |
DefaultFaultRule | هر گونه خطا (سیستم، حمل و نقل، پیام یا خط مشی) را که به صراحت توسط قانون خطای دیگری کنترل نمی شود، کنترل می کند. رسیدگی به عیوب را ببینید. | N/A | خیر |
RouteRule | مقصد پیام های درخواست ورودی را پس از پردازش توسط خط لوله درخواست ProxyEndpoint تعیین می کند. معمولاً RouteRule به پیکربندی TargetEndpoint با نام اشاره می کند، اما می تواند مستقیماً به یک URL نیز اشاره کند. | ||
Name | ویژگی مورد نیاز، که نامی برای RouteRule ارائه می کند. کاراکترهایی که مجاز به استفاده در نام هستید به موارد زیر محدود می شود: A-Za-z0-9._\-$ % . برای مثال، Cat2 %_ یک نام قانونی است. | N/A | بله |
Condition | یک دستور شرطی اختیاری که برای مسیریابی پویا در زمان اجرا استفاده می شود. RouteRules شرطی مفید هستند، به عنوان مثال، برای فعال کردن مسیریابی مبتنی بر محتوا برای پشتیبانی از نسخه پشتیبان. | N/A | خیر |
TargetEndpoint | یک رشته اختیاری که پیکربندی TargetEndpoint با نام را مشخص می کند. یک TargetEndpoint با نام هر TargetEndpoint است که در همان پراکسی API در زیر پوشه با نامگذاری TargetEndpoint، نشان میدهید که پیامهای درخواست پس از پردازش توسط خط لوله درخواست ProxyEndpoint کجا باید ارسال شوند. توجه داشته باشید که این یک تنظیم اختیاری است. یک ProxyEndpoint ممکن است مستقیماً یک URL را فراخوانی کند. به عنوان مثال، یک منبع جاوا اسکریپت یا جاوا، که در نقش یک کلاینت HTTP عمل می کند، ممکن است وظیفه اصلی TargetEndpoint را انجام دهد، یعنی ارسال درخواست ها به یک سرویس پشتیبان. | N/A | خیر |
URL | یک رشته اختیاری که یک آدرس شبکه خروجی را تعریف میکند که توسط ProxyEndpoint فراخوانی میشود، و از هر گونه پیکربندی TargetEndpoint که ممکن است در زیر /targets ذخیره شود دور میزند. | N/A | خیر |
نحوه پیکربندی 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 را می توان برای پشتیبانی از مسیریابی پویا در زمان اجرا زنجیره ای کرد. درخواستهای ورودی را میتوان به پیکربندیهای TargetEndpoint با نام، مستقیماً به URLها یا ترکیبی از این دو، بر اساس سرصفحههای HTTP، محتوای پیام، پارامترهای پرس و جو یا اطلاعات زمینهای مانند زمان روز، منطقه محلی و غیره هدایت کرد.
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 پوچ را می توان برای پشتیبانی از سناریوهایی تعریف کرد که در آن پیام درخواست نیازی به ارسال به TargetEndpoint نیست. این زمانی مفید است که ProxyEndpoint تمام پردازشهای لازم را انجام میدهد، برای مثال با استفاده از جاوا اسکریپت برای فراخوانی یک سرویس خارجی یا بازیابی دادهها از جستجو در ذخیرهسازی کلید/مقدار سرویسهای API.
به عنوان مثال، موارد زیر یک مسیر تهی را تعریف می کنند:
<RouteRule name="GoNowhere"/>
مسیرهای تهی شرطی می توانند مفید باشند. در مثال زیر، یک مسیر تهی پیکربندی شده است تا زمانی اجرا شود که یک هدر HTTP request.header.X-DoNothing
دارای مقداری غیر از null
باشد.
<RouteRule name="DoNothingOnDemand"> <Condition>request.header.X-DoNothing != null</Condition> </RouteRule>
به یاد داشته باشید که RouteRules را می توان زنجیره ای کرد، بنابراین یک مسیر تهی شرطی معمولاً یکی از اجزای مجموعه ای از RouteRules است که برای پشتیبانی از مسیریابی شرطی طراحی شده است.
استفاده عملی از یک مسیر تهی شرطی برای پشتیبانی از حافظه پنهان خواهد بود. با استفاده از مقدار متغیری که توسط خط مشی Cache تنظیم شده است، می توانید یک پراکسی API را برای اجرای مسیر تهی هنگامی که ورودی از حافظه پنهان ارائه می شود، پیکربندی کنید.
<RouteRule name="DoNothingUnlessTheCacheIsStale"> <Condition>lookupcache.LookupCache-1.cachehit is true</Condition> </RouteRule>
TargetEndpoint
TargetEndpoint معادل خروجی ProxyEndpoint است. یک TargetEndpoint به عنوان سرویس گیرنده برای یک سرویس پشتیبان یا API عمل می کند - درخواست ها را ارسال می کند و پاسخ ها را دریافت می کند.
یک پروکسی API نیازی به هیچ نقطه هدفی ندارد. ProxyEndpoints را می توان برای فراخوانی مستقیم URL ها پیکربندی کرد. یک پراکسی API بدون TargetEndpoint معمولاً حاوی یک ProxyEndpoint است که مستقیماً یک سرویس پشتیبان را فراخوانی می کند یا برای فراخوانی یک سرویس با استفاده از جاوا یا جاوا اسکریپت پیکربندی شده است.
پیکربندی 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 می تواند یک هدف را به یکی از روش های زیر فراخوانی کند:
- HTTPTargetConnection برای تماسهای HTTP(S).
- LocalTargetConnection برای زنجیره محلی پروکسی به پروکسی
- ScriptTarget برای تماس با اسکریپت Node.js میزبان Edge
فقط یکی از اینها را در TargetEndpoint پیکربندی کنید.
نام | توضیحات | پیش فرض | مورد نیاز؟ |
---|---|---|---|
TargetEndpoint | |||
name | نام TargetEndpoint، که باید در پیکربندی پراکسی API منحصر به فرد باشد. نام TargetEndPoint در ProxyEndpoint RouteRule برای هدایت درخواستها برای پردازش خروجی استفاده میشود. کاراکترهایی که مجاز به استفاده در نام هستید به موارد زیر محدود می شود: A-Za-z0-9._\-$ % . | N/A | بله |
PreFlow | خطمشیها را در جریان PreFlow یک درخواست یا پاسخ تعریف میکند. | N/A | بله |
Flows | خط مشی ها را در جریان های مشروط یک درخواست یا پاسخ تعریف می کند. | N/A | بله |
PostFlow | خطمشیها را در جریان PostFlow یک درخواست یا پاسخ تعریف میکند. | N/A | بله |
HTTPTargetConnection | با عناصر فرزند خود، دسترسی به منبع پشتیبان را از طریق HTTP مشخص می کند. اگر از HTTPTargetConnection استفاده می کنید، انواع دیگر اتصالات هدف (ScriptTarget یا LocalTargetConnection) را پیکربندی نکنید. | ||
URL | آدرس شبکه سرویس پشتیبان را که TargetEndpoint پیام های درخواستی را به آن فوروارد می کند، تعیین می کند. | N/A | خیر |
LoadBalancer | یک یا چند پیکربندی TargetServer با نام را تعریف می کند. پیکربندیهای TargetServer نامگذاری شده را میتوان برای متعادلسازی بار استفاده کرد که ۲ یا چند اتصال پیکربندی نقطه پایانی را تعریف میکند. همچنین میتوانید از TargetServers برای جدا کردن پیکربندیهای پراکسی API از نشانیهای اینترنتی نقاط پایانی خدمات باطن استفاده کنید. به تعادل بار در سرورهای باطن مراجعه کنید. | N/A | خیر |
Properties | مجموعه ای از تنظیمات پیکربندی اختیاری HTTP را می توان به عنوان ویژگی های <TargetEndpoint> تعریف کرد. | N/A | خیر |
SSLInfo | به صورت اختیاری تنظیمات TLS/SSL را در TargetEndpoint برای کنترل اتصال TLS/SSL بین پراکسی API و سرویس هدف تعریف کنید. به پیکربندی TLS/SSL TargetEndpoint مراجعه کنید. | N/A | خیر |
LocalTargetConnection | با عناصر فرزند خود، منبعی را مشخص میکند که باید به صورت محلی به آن دسترسی پیدا کرد و ویژگیهای شبکه مانند متعادلسازی بار و پردازشگرهای پیام را دور زد. برای مشخص کردن منبع هدف، عنصر فرزند APIProxy (با عنصر ProxyEndpoint) یا عنصر فرزند مسیر را وارد کنید. برای اطلاعات بیشتر، به زنجیره زدن پراکسیهای API با هم مراجعه کنید. اگر از LocalTargetConnection استفاده می کنید، انواع دیگر اتصالات هدف (HTTPTargetConnection یا ScriptTarget) را پیکربندی نکنید. | ||
APIProxy | نام یک پراکسی API را برای استفاده به عنوان هدف برای درخواست ها مشخص می کند. پراکسی هدف باید در همان سازمان و محیطی باشد که درخواست های ارسال کننده پروکسی است. این یک جایگزین برای استفاده از عنصر Path است. | N/A | خیر |
ProxyEndpoint | با APIProxy برای تعیین نام ProxyEndpoint پروکسی مورد نظر استفاده می شود. | N/A | خیر |
Path | مسیر نقطه پایانی یک پراکسی API را برای استفاده به عنوان هدف برای درخواست ها مشخص می کند. پراکسی هدف باید در همان سازمان و محیطی باشد که درخواست های ارسال کننده پروکسی است. این یک جایگزین برای استفاده از APIProxy است. | N/A | خیر |
FaultRules | نحوه واکنش TargetEndpoint به یک خطا را مشخص می کند. یک قانون خطا دو مورد را مشخص می کند:
رسیدگی به عیوب را ببینید. | N/A | خیر |
DefaultFaultRule | هر گونه خطا (سیستم، حمل و نقل، پیام یا خط مشی) را که به صراحت توسط FaultRule دیگری کنترل نمی شود، کنترل می کند. رسیدگی به عیوب را ببینید. | N/A | خیر |
ScriptTarget | |||
ResourceURL | نوع منبع (گره) و نام اسکریپت اصلی Node.js را که عملکرد TargetEndpoint را پیاده سازی می کند، تعریف می کند. اسکریپت باید با فایل های منبع پروکسی API شما همراه باشد. به افزودن Node.js به یک پراکسی API موجود مراجعه کنید. اگر از ScriptTarget استفاده می کنید، انواع دیگر اتصالات هدف (HTTPTargetConnection یا LocalTargetConnection) را پیکربندی نکنید. | N/A | بله |
EnvironmentVariable | به صورت اختیاری متغیرهای محیط را به اسکریپت اصلی Node.js منتقل کنید. به درک پشتیبانی Edge برای ماژولهای Node.js مراجعه کنید. | N/A | خیر |
Arguments | به صورت اختیاری آرگومان ها را به اسکریپت اصلی Node.js ارسال کنید. به درک پشتیبانی Edge برای ماژولهای Node.js مراجعه کنید. | N/A | خیر |
پیکربندی TLS/SSL TargetEndpoint
TargetEndpoints اغلب نیاز به مدیریت اتصالات HTTPS با زیرساخت باطن ناهمگن دارند. به همین دلیل، تعدادی از تنظیمات پیکربندی TLS/SSL پشتیبانی می شوند.
عناصر پیکربندی TLS/SSL TargetEndpoint
نام | توضیحات | پیش فرض | مورد نیاز؟ |
---|---|---|---|
SSLInfo | |||
Enabled | نشان می دهد که آیا TLS/SSL برای نقطه پایانی فعال است یا خیر. مقدار پیش فرض true است اگر <URL> پروتکل HTTPS را مشخص کند، و اگر <URL> HTTP را مشخص کند، false . | درست است اگر <URL> HTTPS را مشخص کند | خیر |
TrustStore | یک فروشگاه کلید حاوی گواهیهای سرور قابل اعتماد. | N/A | خیر |
ClientAuthEnabled | تنظیمی که احراز هویت مشتری خروجی را روشن میکند (TLS/SSL دو طرفه) | نادرست | خیر |
KeyStore | یک فروشگاه کلید حاوی کلیدهای خصوصی که برای احراز هویت مشتری خروجی استفاده می شود | N/A | بله (اگر ClientAuthEnabled درست باشد) |
KeyAlias | نام مستعار کلید کلید خصوصی که برای احراز هویت مشتری خروجی استفاده می شود | N/A | بله (اگر ClientAuthEnabled درست باشد) |
Ciphers | رمزهای پشتیبانی شده برای TLS/SSL خروجی. اگر هیچ رمزی مشخص نشده باشد، تمام رمزهای موجود برای JVM مجاز خواهند بود. برای محدود کردن رمزها، عناصر زیر را اضافه کنید که رمزهای پشتیبانی شده را فهرست می کند: <Ciphers> <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher> <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher> </Ciphers> | N/A | خیر |
Protocols | پروتکل های پشتیبانی شده برای TLS/SSL خروجی. اگر هیچ پروتکلی مشخص نشده باشد، تمام پروتکل های موجود برای JVM مجاز خواهند بود. برای محدود کردن پروتکلها، عناصر زیر را که پروتکلهای پشتیبانیشده را فهرست میکنند، اضافه کنید: <Protocols> <Protocol>TLSv1.1</Protocol> <Protocol>TLSv1.2</Protocol> </Protocols> | N/A | خیر |
CommonName | در صورت مشخص شدن، مقداری که نام مشترک گواهی هدف با آن اعتبارسنجی می شود. این مقدار فقط برای تنظیمات TargetEndpoint و TargetServer معتبر است. برای پیکربندی VirtualHost معتبر نیست. به طور پیش فرض، مقدار مشخص شده دقیقاً با نام مشترک گواهی هدف مطابقت دارد. به عنوان مثال، استفاده از به صورت اختیاری، Apigee میتواند با استفاده از ویژگی به عنوان مثال، اگر عنصر <CommonName> به صورت زیر مشخص شود، یک نام معمولی که به عنوان <CommonName wildcardMatch="true">*.myhost.com</CommonName> | N/A | خیر |
نمونه 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 به باطن (Cloud و Private Cloud) مراجعه کنید.
استفاده از متغیرهای جریان برای تنظیم مقادیر TLS/SSL به صورت پویا
شما همچنین می توانید به صورت پویا جزئیات TLS/SSL را برای پشتیبانی از الزامات زمان اجرا انعطاف پذیر تنظیم کنید. به عنوان مثال، اگر پراکسی شما به دو هدف بالقوه متفاوت (یک هدف آزمایشی و یک هدف تولید) متصل شود، میتوانید از پروکسی API خود بخواهید که به طور برنامهریزی محیطی را که در حال فراخوانی است تشخیص دهد و بهطور پویا ارجاعها را به keystore و truststore مناسب تنظیم کنید. مقاله انجمن Apigee زیر این سناریو را با جزئیات بیشتری توضیح میدهد و نمونههای پراکسی API قابل اجرا را ارائه میکند: https://community.apigee.com/articles/21424/dynamic-sslinfo-for-targetendpoint-using-variable.html .
در مثال زیر از نحوه تنظیم تگ <SSLInfo>
در پیکربندی TargetEndpoint، مقادیر را می توان در زمان اجرا ارائه کرد، به عنوان مثال، یک Java Callout، یک خط مشی جاوا اسکریپت، یا یک خط مشی Assign 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 for Private Cloud، هنگام پیکربندی TLS/SSL با استفاده از مقادیر استاتیک یا با استفاده از متغیرهای جریان، این احتمال وجود دارد که مجبور شوید پردازشگرهای پیام را مجددا راه اندازی کنید.
برای اطلاعات بیشتر، بهروزرسانی گواهی TLS را ببینید.
با این حال، میتوانید بهصورت اختیاری، TargetEndpoint را به گونهای پیکربندی کنید که به جای آن از یک مرجع به keystore یا truststore استفاده کند. مزیت استفاده از مرجع این است که میتوانید مرجع را بهروزرسانی کنید تا به یک فروشگاه کلید یا Truststore دیگر برای بهروزرسانی گواهی TLS/SSL بدون نیاز به راهاندازی مجدد پردازشگرهای پیام اشاره کند.
به عنوان مثال، نشان داده شده در زیر یک TargetEndpoint است که از یک مرجع به keystore استفاده می کند:
<SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://keystoreref</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo>
برای ایجاد مرجع با نام keystoreref از فراخوانی POST API زیر استفاده کنید:
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 و نوع آن را مشخص می کند.
برای مشاهده مرجع از تماس GET API زیر استفاده کنید:
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 با متعادل کردن بار هدف
TargetEndpoints از تعادل بار در چندین TargetServer با نام با استفاده از سه الگوریتم متعادل کننده بار پشتیبانی می کند.
برای دستورالعمل های دقیق، به تعادل بار در سرورهای باطن مراجعه کنید.
سیاست ها
دایرکتوری /policies
در یک پراکسی API شامل تمام خط مشی های موجود برای پیوست شدن به جریان ها در پراکسی API است.
عناصر پیکربندی خط مشی
نام | توضیحات | پیش فرض | مورد نیاز؟ |
---|---|---|---|
Policy | |||
name | نام داخلی سیاست. نویسه هایی که می توانید در نام استفاده کنید محدود به: در صورت تمایل، از عنصر | N/A | بله |
enabled | برای اجرای خط مشی روی برای "خاموش کردن" خط مشی، روی | درست است | خیر |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | خیر |
async | توجه : این ویژگی باعث نمی شود که خط مشی به صورت ناهمزمان اجرا شود. در بیشتر موارد، این را با پیش فرض وقتی روی برای استفاده از رفتار ناهمزمان در پراکسی های API، مدل شی جاوا اسکریپت را ببینید. | نادرست | خیر |
پیوست خط مشی
تصویر زیر دنباله اجرای جریان های پروکسی API را نشان می دهد:
همانطور که در بالا نشان داده شده است:
خطمشیها به عنوان مراحل پردازش به جریانها پیوست میشوند. نام خطمشی برای ارجاع به خطمشی که باید بهعنوان مرحله پردازش اجرا شود، استفاده میشود. فرمت پیوست خط مشی به شرح زیر است:
<Step><Name>MyPolicy</Name></Step>
خطمشیها به ترتیبی که به یک جریان متصل میشوند اجرا میشوند. به عنوان مثال:
<Step><Name>FirstPolicy</Name></Step> <Step><Name>SecondPolicy</Name></Step>
عناصر پیکربندی پیوست خط مشی
نام | توضیحات | پیش فرض | مورد نیاز؟ |
---|---|---|---|
Step | |||
Name | نام سیاستی که باید با تعریف این مرحله اجرا شود. | N/A | بله |
Condition | یک بیانیه مشروط که تعیین می کند آیا این سیاست اجرا می شود یا خیر. اگر یک خط مشی دارای یک شرط مرتبط باشد، سیاست فقط در صورتی اجرا می شود که عبارت شرطی درست ارزیابی شود. | N/A | خیر |
جریان می یابد
ProxyEndpoint و TargetEndpoint خط لوله ای را برای پردازش پیام درخواست و پاسخ تعریف می کنند. خط لوله پردازش از یک جریان درخواست و یک جریان پاسخ تشکیل شده است. هر جریان درخواست و جریان پاسخ به یک PreFlow، یک یا چند جریان اختیاری «شرطی» یا «نام» و یک PostFlow تقسیم میشود.
- PreFlow: همیشه اجرا می شود. قبل از هر جریان شرطی اجرا می شود.
- PostFlow: همیشه اجرا می شود. پس از هر جریان شرطی اجرا می شود.
علاوه بر این، می توانید یک PostClientFlow را به ProxyEndpoint اضافه کنید که پس از بازگشت پاسخ به برنامه مشتری درخواست کننده اجرا می شود. فقط خط مشی MessageLogging و Google Stackdriver Logging Extension را می توان به این جریان پیوست. 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 Flow ها را به ترتیب زیر اجرا می کند:
خط لوله درخواست:
- درخواست پراکسی PreFlow
- جریانهای مشروط درخواست پروکسی (اختیاری)
- درخواست پروکسی PostFlow
- PreFlow درخواست هدف
- جریانهای مشروط درخواست هدف (اختیاری)
- درخواست هدف PostFlow
خط لوله پاسخ:
- پاسخ هدف PreFlow
- جریانهای شرطی پاسخ هدف (اختیاری)
- پاسخ هدف PostFlow
- PreFlow پاسخ پروکسی
- جریانهای مشروط پاسخ پراکسی (اختیاری)
- پاسخ پروکسی PostFlow
- پاسخ PostClientFlow (اختیاری)
فقط جریانهایی که پیوستهای خطمشی دارند باید در پیکربندیهای ProxyEndpoint یا TargetEndpoint پیکربندی شوند. PreFlow و PostFlow فقط باید در یک پیکربندی ProxyEndpoint یا TargetEndpoint مشخص شوند که یک خط مشی باید در طول پردازش PreFlow یا PostFlow اعمال شود.
برخلاف جریانهای شرطی، ترتیب عناصر PreFlow و PostFlow مهم نیست - پراکسی API همیشه هر کدام را در نقطه مناسبی از خط لوله اجرا میکند، صرف نظر از اینکه کجا در پیکربندی نقطه پایانی ظاهر میشوند.
جریان های مشروط
ProxyEndpoints و TargetEndpoints از تعداد نامحدودی از جریانهای شرطی پشتیبانی میکنند (همچنین به عنوان «جریانهای نامگذاری شده» نیز شناخته میشوند.
پروکسی API شرایط مشخص شده در جریان شرطی را آزمایش می کند و در صورت برقراری شرایط، مراحل پردازش در جریان شرطی توسط پراکسی API اجرا می شود. اگر شرط برآورده نشود، مراحل پردازش در جریان شرطی دور می زند. جریان های شرطی به ترتیب تعریف شده در پراکسی API ارزیابی می شوند و اولین موردی که شرط آن برآورده شده است اجرا می شود.
با تعریف جریان های شرطی، توانایی اعمال مراحل پردازش در یک پروکسی API بر اساس موارد زیر را به دست می آورید:
- درخواست URI
- فعل HTTP (GET/PUT/POST/DELETE)
- مقدار پارامتر پرس و جو، هدر و پارامتر فرم
- بسیاری از انواع دیگر شرایط
به عنوان مثال، جریان شرطی زیر مشخص می کند که تنها زمانی اجرا می شود که مسیر منبع درخواست /accesstoken
باشد. هر درخواست ورودی با مسیر /accesstoken
باعث می شود که این جریان به همراه هر سیاستی که به جریان متصل است اجرا شود. اگر مسیر درخواست شامل پسوند /accesstoken
نباشد، جریان اجرا نمیشود (اگرچه ممکن است یک جریان شرطی دیگر).
<Flows> <Flow name="TokenEndpoint"> <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> </Flow> </Flows>
عناصر پیکربندی جریان
نام | توضیحات | پیش فرض | مورد نیاز؟ |
---|---|---|---|
Flow | یک خط لوله پردازش درخواست یا پاسخ که توسط یک ProxyEndpoint یا TargetEndpoint تعریف شده است | ||
Name | نام منحصر به فرد جریان. | N/A | بله |
Condition | یک عبارت شرطی که روی یا تعداد بیشتری از متغیرها را به درست یا نادرست ارزیابی می کند. همه Flow ها به غیر از انواع PreFlow و PostFlow از پیش تعریف شده باید یک شرط برای اجرای خود تعریف کنند. | N/A | بله |
Request | خط لوله مرتبط با پردازش پیام درخواست | N/A | خیر |
Response | خط لوله مرتبط با پردازش پیام پاسخ | N/A | خیر |
پردازش مرحله ای
ترتیب متوالی جریان های شرطی توسط Apigee Edge اعمال می شود. جریان های شرطی از بالا به پایین اجرا می شوند. اولین جریان شرطی که شرط آن true
ارزیابی می شود اجرا می شود و فقط یک جریان شرطی اجرا می شود.
به عنوان مثال، در پیکربندی Flow زیر، هر درخواست ورودی که شامل پسوند مسیر /first
یا /second
نباشد، باعث میشود ThirdFlow
اجرا شود و سیاستی به نام 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>
منابع
«منابع» (فایلهای منبع برای استفاده در پراکسیهای API) اسکریپتها، کدها و تبدیلهای XSL هستند که میتوانند با استفاده از خطمشیها به جریانها پیوست شوند. اینها در بخش «اسکریپتها» ویرایشگر پراکسی API در رابط کاربری مدیریت ظاهر میشوند.
فایل های منبع را برای انواع منابع پشتیبانی شده ببینید.
منابع را می توان در یک پروکسی API، یک محیط یا یک سازمان ذخیره کرد. در هر مورد، یک منبع با نام در یک خط مشی ارجاع داده می شود. خدمات API نام را با حرکت از پروکسی API، به محیط، به سطح سازمان حل می کند.
یک منبع ذخیره شده در سطح سازمان می تواند توسط سیاست ها در هر محیطی ارجاع داده شود. منبعی که در سطح محیط ذخیره شده است را می توان توسط سیاست های موجود در آن محیط ارجاع داد. منبعی که در سطح پراکسی API ذخیره شده است را فقط می توان توسط سیاست های موجود در آن پراکسی API ارجاع داد.