درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
وقتی برای یک پراکسی API درخواست میکنید، میتوانید هریک یا همه اطلاعات زیر را ارسال کنید، بسته به روش پیکربندی پراکسی API:
- سرایندهای درخواست
- پارامترهای پُرسمان
- اطلاعات فرم
- پایهبارهای XML یا JSON
- URIs منبع
بهطور پیشفرض، همه دادههای موجود در درخواست بدون تغییر از ProxyEndpoint به TargetEndpoint منتقل میشود. بنابراین، وقتی TargetEndpoint درخواست را به سرور زیرینه ارسال میکند، همه اطلاعات موجود در درخواست اصلی به سرویس زیرینه منتقل میشود.
همین امر برای پاسخی که Edge از سرویس زیرینه دریافت میکند نیز صادق است. بهطور پیشفرض، همه دادههای دریافتی در پاسخ بدون تغییر به برنامهای که درخواست را ایجاد کرده است ارسال میشود.
دادههای درخواست چگونه به سرور پشتیبان منتقل میشود؟
تصویر زیر تعریف پراکسی API را نشان میدهد:

برای این پراکسی میانای برنامهسازی کاربردی:
- میزبان مجازی پراکسی میانای برنامهسازی کاربردی: «پیشفرض»
- دامنه تعریفشده توسط میزبان مجازی: «http://myOrg-prod.apigee.net»
- مسیر پایه پراکسی: «/v1/weather»
- TargetEndpoint مشخصشده توسط قانون مسیر: «پیشفرض»
- نشانی وب مقصد: «http://weather.yahooapis.com»
برنامه کارخواه بااستفاده از فرمان زیر، درخواست GET را به پراکسی API ارسال میکند:
curl
curl -X GET http://myOrg-prod.apigee.net/v1/weather/forecastrss?w=12797282
توجه داشته باشید که این درخواست حاوی منبع «forecastrss» و یک پارامتر پُرسمان است،
w. Edge درخواست را همانطور که در زیر نشان داده شده است تجزیه میکند و بخشهایی از درخواست را به متغیرهای جاریسازی اختصاص میدهد:
{request.verb} {proxy.basepath}/{proxy.pathsuffix}?{request.querystring}متغیرهای جاری با مقادیر زیر تنظیم میشوند:
-
request.verb: «دریافت» -
proxy.basepath: «/v1/weather» -
proxy.pathsuffix: «forecastrss» -
request.querystring: «w=12797282»
سپس TargetEndpoint بااستفاده از اطلاعات درخواست، درخواستی به سرویس زیرینه ارسال میکند:
{request.verb} {target.basepath}/{proxy.pathsuffix}?{request.querystring}توجه کنید که چگونه پارامترهای منبع و پُرسمان مشخصشده در درخواست بهطور خودکار در درخواست به سرور زیرینه گنجانده میشوند. از تعریف TargetEndpoint، درخواست سپس به این شکل است:
curl -X GET http://weather.yahooapis.com/forecastrss?w=12797282
مانند پارامترهای پُرسمان، هر سرایند یا پارامتر فرمی که در درخواست به پراکسی API قرار میدهید به سرور زیرینه منتقل میشود. برای مثال، درخواست زیر را که شامل سرایند است ایجاد میکنید:
curl -X GET -H 'Content-type:application/xml' http://myOrg-prod.apigee.net/v1/weather/forecastrss?w=12797282
یا درخواستی در فرم زیر برای افزودن سرایند و دادههای فرم:
curl -X POST -H "Content-type:application/json" -d \
'{"email" : "janetutorialxml@example.com",
"firstName" : "Jane",
"lastName" : "Tutorial",
"userName" : "jtutorialxml"
}' \
http://myOrg-prod.apigee.net/v1/register/user
در هر دو مثال، سرایندها و دادههای فرم بدون تغییر به سرویس زیرینه منتقل میشوند. سرایندهای
با متغیرهای جاریسازی مثل request.headers.count و
request.headers.names نشان داده میشوند. دادههای فرم با متغیرهای جاری مثل
request.formparam.count و request.formparam.names نشان داده میشود.
دادههای پاسخ چگونه برگردانده میشود؟
بهطور پیشفرض، همه دادههایی که Edge از سرویس زیرینه در پاسخ دریافت میکند بدون تغییر به برنامهای که درخواست را آغاز کرده است ارسال میشود. همانطور که در بالا برای درخواست توضیح داده شد، دادههای برگرداندهشده در پاسخ ازطریق متغیرهای جاری در Edge قابلدسترس است. برای اطلاعات بیشتر، مرجع متغیرهای جریان را ببینید.
دسترسی به دادههای درخواست و پاسخ در پراکسی API
در بسیاری از موارد، میخواهید دادههای درخواست را قبلاز ارسال به سرور زیرینه تغییر دهید. برای مثال:
- برای برداشتن اطلاعات امنیتی که Edge برای اعتبارسنجی درخواستها استفاده میکند. این اطلاعات توسط سرویس زیرینه موردنیاز نیست.
- برای افزودن دادههای ارسالشده به سرویس زیرینه، برای مثال برای ردیابی کاربران یا جمعآوری تجزیهوتحلیلها.
- برای پردازش مشروط درخواست براساس دادههای درخواست. برای مثال، یک پراکسی API میتواند چندین TargetEndpoints داشته باشد. TargetEndpoint مورداستفاده درخواست براساس دادههای درخواست تعیین میشود. سپس آن دادهها را از درخواست جدا میکنید و آن را به سرویس زیرینه ارسال میکنید.
همین امر برای دادههای موجود در پاسخ نیز صادق است. بهعنوان بخشی از پردازش پاسخ، پراکسی API ممکن است بخواهد دادهها را قبلاز برگرداندن به برنامه درخواستکننده تغییر دهد.
دسترسی به پیامهای درخواست دسترسی
میتوانید از خطمشیها برای دسترسی به بخشهایی از پیام درخواست و تغییر آنها استفاده کنید. این بخشها شامل موارد زیر میشود:
- سرایندها
- پارامترهای پُرسمان
- پارامترهای فرم
- نشانی IP منبع
- متن اصلی پیام HTTP
در یک جریان عادی، پساز پردازش درخواست، پراکسی درخواست تبدیلشده را به هدف ارسال میکند.
خطمشیها میتوانند متغیرهای درخواست را بررسی کنند، سپس براساس محتوای آن متغیرها، درخواست را تبدیل یا رد کنند. خطمشیها با تنظیم متغیرهای مناسب، درخواست را تبدیل میکنند، برای مثال متغیرهای مربوط به سرایندهای درخواست.
دسترسی به پیامهای پاسخ
خطمشیها بااستفاده از متغیرهایی که برای پیام پاسخ اعمال میشود میتوانند به عناصر پیام دسترسی داشته باشند، ازجمله سرایند، پارامترهای پُرسمان، و پارامترهای فرم، نشانی IP منبع، متن پیام HTTP، و غیره.
کارگزار پیام پاسخی دریافت میکند، سپس براساس شرایط ارزیابیشده در پاسخ، مجموعهای از خطمشیها را روی آن اعمال میکند که میتواند پاسخ را اصلاح یا تبدیل کند.
خطمشیها میتوانند متغیرهای پاسخ را بررسی کنند، سپس براساس محتوای آن متغیرها، درخواست را تبدیل یا رد کنند. خطمشیها با تنظیم متغیرهای مناسب، برای مثال متغیرهای مربوط به سرایندهای پاسخ، پاسخ را تبدیل میکنند.
خطمشیهای رایج برای دسترسی به متغیرهای جریان
Edge چندین خطمشی تعریف میکند که میتوانید از آنها برای پردازش دادههای درخواست و پاسخ استفاده کنید. این خطمشیها شامل موارد زیر است:
- خطمشی AssignMessage: پیامهای درخواست یا پاسخ HTTP را درطول جریان کارگزار پراکسی API ایجاد یا اصلاح میکند. متغیرهای جریان جدید را نیز ایجاد و پر میکند.
- خطمشی ExtractVariables: محتوا را از پیامها، ازجمله سرایندها، مسیرهای نشانی وب، دادهبارها، و پارامترهای پُرسمان، برای استفاده در عبارت شرطی استخراج میکند. سپس خطمشی الگوی نوشتاری را روی محتوای پیام اعمال میکند و درصورت یافتن مطابقت، متغیر تعیینشدهای را تنظیم میکند.
- خطمشی JSONtoXML و خطمشی XMLtoJSON: پیامها را از قالب «نشانگذاری شیء جاوا اسکریپت» (JSON) به قالب «زبان نشانهگذاری توسعهپذیر» (XML) تبدیل میکند، یا برعکس.
- خطمشی JavaCallout، خطمشی JavaScript، خطمشی PythonScript، خطمشی RegularExpressionProtection: این خطمشیها به شما امکان میدهند برای دسترسی به متغیرهای جاریسازی حاوی دادههای درخواست و پاسخ، نوشتار بنویسید.