متغیرهای درخواست و پاسخ

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

وقتی درخواستی به یک پروکسی API ارسال می‌کنید، می‌توانید بسته به نحوه پیکربندی پروکسی API، هر یک یا همه اطلاعات زیر را ارسال کنید:

  • درخواست سربرگ‌ها
  • پارامترهای پرس و جو
  • داده‌های فرم
  • بارهای داده XML یا JSON
  • آدرس‌های منبع (URI)

به طور پیش‌فرض، تمام داده‌های موجود در یک درخواست بدون تغییر از ProxyEndpoint به TargetEndpoint ارسال می‌شوند. بنابراین، هنگامی که TargetEndpoint درخواستی را به سرور backend ارسال می‌کند، تمام اطلاعات موجود در درخواست اصلی به سرویس backend ارسال می‌شود.

همین امر در مورد پاسخی که Edge از سرویس backend دریافت می‌کند نیز صادق است. به طور پیش‌فرض، تمام داده‌های دریافتی در پاسخ بدون تغییر به برنامه‌ای که درخواست را ایجاد کرده است، ارسال می‌شوند.

چگونه داده‌های درخواست به سرور backend ارسال می‌شوند؟

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

درخواست از کلاینت HTTP که از طریق Proxy Endpoint به Target Endpoint در backend ارسال می‌شود تا به سرویس HTTP برسد. نمونه‌هایی از proxy end و target endpoint ارائه شده است.

برای این پروکسی API:

  • میزبان مجازی پروکسی API: "پیش‌فرض"
  • دامنه تعریف شده توسط میزبان مجازی: "http://myOrg-prod.apigee.net"
  • مسیر پایه پروکسی: "/v1/weather"
  • نقطه هدف (TargetEndpoint) توسط قانون مسیر مشخص شده است: "پیش‌فرض"
  • آدرس اینترنتی هدف: "http://weather.yahooapis.com"

یک برنامه‌ی کلاینت با استفاده از دستور curl زیر، یک درخواست GET به پروکسی API ارسال می‌کند:

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 : "پیش‌بینی‌کننده"
  • request.querystring : "w=12797282"

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

{request.verb} {target.basepath}/{proxy.pathsuffix}?{request.querystring}

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

curl -X GET http://weather.yahooapis.com/forecastrss?w=12797282

مانند پارامترهای پرس و جو، هر هدر یا پارامتر فرمی که در درخواست به پروکسی API وارد می‌کنید، به سرور backend منتقل می‌شود. برای مثال، درخواست زیر را که شامل یک هدر است، ارسال می‌کنید:

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

در هر دو مثال، هدرها و داده‌های فرم بدون تغییر به سرویس backend منتقل می‌شوند. هدرها توسط متغیرهای جریان مانند request.headers.count و request.headers.names نمایش داده می‌شوند. داده‌های فرم توسط متغیرهای جریان مانند request.formparam.count و request.formparam.names نمایش داده می‌شوند.

داده‌های پاسخ چگونه برگردانده می‌شوند؟

به طور پیش‌فرض، تمام داده‌هایی که Edge از سرویس backend در پاسخ دریافت می‌کند، بدون تغییر به برنامه‌ای که درخواست را ایجاد کرده است، ارسال می‌شوند. همانطور که در بالا برای درخواست توضیح داده شد، داده‌های برگردانده شده در پاسخ از طریق متغیرهای جریان در Edge قابل دسترسی هستند. برای اطلاعات بیشتر، به مرجع متغیرهای جریان مراجعه کنید.

دسترسی به داده‌های درخواست و پاسخ در یک پروکسی API

مواقع زیادی وجود دارد که می‌خواهید داده‌های درخواست را قبل از ارسال به سرور backend تغییر دهید. برای مثال:

  • برای حذف اطلاعات امنیتی مورد استفاده توسط Edge برای اعتبارسنجی درخواست‌ها. این اطلاعات توسط سرویس backend مورد نیاز نیست.
  • برای افزودن داده‌های ارسال شده به سرویس backend، به عنوان مثال برای ردیابی کاربران یا جمع‌آوری تجزیه و تحلیل.
  • برای پردازش مشروط درخواست بر اساس داده‌های درخواست. به عنوان مثال، یک پروکسی API می‌تواند چندین TargetEndpoint داشته باشد. TargetEndpoint مورد استفاده توسط درخواست توسط داده‌های درخواست تعیین می‌شود. سپس قبل از ارسال آن به سرویس backend، آن داده‌ها را از درخواست حذف می‌کنید.

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

پیام‌های درخواست دسترسی

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

  • سربرگ‌ها
  • پارامترهای پرس و جو
  • پارامترهای فرم
  • آدرس IP منبع
  • متن پیام HTTP

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

سیاست‌ها می‌توانند متغیرهای درخواست را بررسی کنند، سپس درخواست را بر اساس محتوای آن متغیرها تغییر شکل دهند یا رد کنند. سیاست‌ها با تنظیم متغیرهای مناسب، به عنوان مثال متغیرهای مربوط به هدرهای درخواست، درخواست را تغییر شکل می‌دهند.

دسترسی به پیام‌های پاسخ

با استفاده از متغیرهایی که برای پیام پاسخ اعمال می‌شوند، سیاست‌ها می‌توانند به اجزای پیام از جمله هدر، پارامترهای پرس‌وجو و پارامترهای فرم، آدرس IP منبع، بدنه پیام HTTP و غیره دسترسی پیدا کنند.

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

سیاست‌ها می‌توانند متغیرهای پاسخ را بررسی کنند، سپس درخواست را بر اساس محتوای آن متغیرها تغییر شکل دهند یا رد کنند. سیاست‌ها با تنظیم متغیرهای مناسب، به عنوان مثال متغیرهای مربوط به هدرهای پاسخ، پاسخ را تغییر شکل می‌دهند.

سیاست‌های رایج برای دسترسی به متغیرهای جریان

Edge چندین سیاست تعریف می‌کند که می‌توانید برای پردازش داده‌های درخواست و پاسخ از آنها استفاده کنید. این سیاست‌ها عبارتند از:

  • سیاست AssignMessage : پیام‌های درخواست یا پاسخ HTTP را در طول جریان پروکسی API ایجاد یا اصلاح می‌کند. همچنین متغیرهای جریان جدید را ایجاد و مقداردهی می‌کند.
  • سیاست ExtractVariables : استخراج محتوا از پیام‌ها، شامل هدرها، مسیرهای URI، فایل‌های داده و پارامترهای پرس‌وجو، برای استفاده در یک عبارت شرط. سپس این سیاست یک الگوی متنی را به محتوای پیام اعمال می‌کند و پس از یافتن یک مورد منطبق، یک متغیر تعیین‌شده را تنظیم می‌کند.
  • سیاست JSONtoXML و سیاست XMLtoJSON : پیام‌ها را از قالب نشانه‌گذاری شیء جاوا اسکریپت (JSON) به قالب زبان نشانه‌گذاری توسعه‌پذیر (XML) یا برعکس تبدیل می‌کند.
  • سیاست JavaCallout ، سیاست JavaScript ، سیاست PythonScript ، سیاست RegularExpressionProtection : این سیاست‌ها به شما امکان می‌دهند اسکریپتی بنویسید تا به متغیرهای جریان حاوی داده‌های درخواست و پاسخ دسترسی پیدا کنید.