Antipattern: یک پروکسی را در یک پروکسی با استفاده از کد سفارشی یا به عنوان یک هدف فراخوانی کنید

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

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

ضدالگو

فراخوانی یک API Proxy از دیگری، چه با استفاده از HTTPTargetConnection در نقطه پایانی هدف و چه با استفاده از کد جاوا اسکریپت سفارشی، منجر به پرش شبکه اضافی می‌شود.

فراخوانی پروکسی ۲ از پروکسی ۱ با استفاده از HTTPTargetConnection

نمونه کد زیر با استفاده از HTTPTargetConnection، پروکسی ۲ را از پروکسی ۱ فراخوانی می‌کند:

<!-- /antipatterns/examples/2-1.xml -->
<HTTPTargetConnection>
  <URL>http://myorg-test.apigee.net/proxy2</URL>
</HTTPTargetConnection>

فراخوانی پروکسی ۲ از پروکسی ۱ از طریق کد جاوا اسکریپت

نمونه کد بعدی، پروکسی ۲ را از پروکسی ۱ با استفاده از جاوا اسکریپت فراخوانی می‌کند:

<!-- /antipatterns/examples/2-2.xml -->
var response = httpClient.send('http://myorg-test.apigee.net/proxy2);
response.waitForComplete();

جریان کد

برای درک اینکه چرا این یک عیب ذاتی دارد، باید مسیری را که یک درخواست طی می‌کند، همانطور که در نمودار زیر نشان داده شده است، درک کنیم:

شکل ۱ : جریان کد

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

در نمونه‌های کد بالا، فراخوانی پروکسی ۲ از پروکسی ۱ به این معنی است که درخواست باید در زمان اجرا از طریق مسیر سنتی (یعنی Router > MP) مسیریابی شود. این شبیه به فراخوانی یک API از یک کلاینت است که در نتیجه باعث ایجاد چندین جهش شبکه می‌شود که به تأخیر می‌افزاید. با توجه به اینکه درخواست پروکسی ۱ قبلاً به MP "رسیده است"، این جهش‌ها غیرضروری هستند.

تأثیر

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

بهترین روش

  • از ویژگی زنجیره‌سازی پروکسی برای فراخوانی یک پروکسی API از پروکسی دیگر استفاده کنید. زنجیره‌سازی پروکسی کارآمدتر است زیرا از اتصال محلی برای ارجاع به نقطه پایانی هدف (یک پروکسی API دیگر) استفاده می‌کند.

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

    <!-- /antipatterns/examples/2-3.xml -->
    <LocalTargetConnection>
      <APIProxy>proxy2</APIProxy>
      <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>

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

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

مطالعه بیشتر