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

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

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

الگوی بد

فراخوانی یک «پراکسی API» از پراکسی دیگر بااستفاده از 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();

جریان کد

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

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

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

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

تأثیر

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

روال مطلوب

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

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

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

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

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

مطالعه بیشتر