Antipattern: استدعاء طلبات بيانات من واجهة برمجة تطبيقات لإدارة الاستدعاءات من خادم وكيل لواجهة برمجة التطبيقات

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X.
info

يتضمّن Edge أداة قوية تُعرف باسم "واجهات برمجة التطبيقات للإدارة" تقدّم خدمات مثل:

  • نشر خوادم وكيل واجهة برمجة التطبيقات أو إلغاء نشرها
  • ضبط المضيفين الظاهريين ومخازن المفاتيح ومخازن الشهادات الموثوق بها وما إلى ذلك
  • إنشاء الكيانات أو حذفها أو تعديلها، مثل KeyValueMaps ومنتجات واجهة برمجة التطبيقات وتطبيقات المطوّرين والمطوّرين ومفاتيح المستهلكين وما إلى ذلك
  • استرداد معلومات عن هذه الكيانات

يمكن الوصول إلى هذه الخدمات من خلال مكوّن يُعرف باسم خادم الإدارة في منصة Apigee Edge. ويمكن استدعاء هذه الخدمات بسهولة باستخدام طلبات بسيطة لواجهة برمجة التطبيقات للإدارة.

في بعض الأحيان، قد نحتاج إلى استخدام خدمة واحدة أو أكثر من هذه الخدمات من خوادم وكيل واجهة برمجة التطبيقات في وقت التشغيل. ويرجع ذلك إلى أنّ الكيانات، مثل KeyValueMaps ورموز OAuth المميزة للوصول ومنتجات واجهة برمجة التطبيقات وتطبيقات المطوّرين والمطوّرين ومفاتيح المستهلكين وما إلى ذلك، تحتوي على معلومات مفيدة في شكل أزواج مفتاح/قيمة أو سمات مخصّصة أو كجزء من ملفها الشخصي.

على سبيل المثال، يمكنك تخزين المعلومات التالية في KeyValueMap لجعلها أكثر أمانًا وإتاحة الوصول إليها في وقت التشغيل:

  • عناوين URL للوجهة الخلفية
  • خصائص البيئة
  • بيانات الاعتماد الأمنية للأنظمة الخلفية أو الأنظمة الخارجية

وبالمثل، قد تحتاج إلى الحصول على قائمة بمنتجات واجهة برمجة التطبيقات أو عنوان البريد الإلكتروني للمطوّر في وقت التشغيل. ستتوفّر هذه المعلومات كجزء من الملف الشخصي لتطبيقات المطوّرين.

يمكن استخدام كل هذه المعلومات بشكل فعّال في وقت التشغيل لتفعيل سلوك ديناميكي في السياسات أو الرمز المخصّص ضمن Apigee Edge.

نمط غير مستحسن

يُفضّل استخدام واجهات برمجة التطبيقات للإدارة وهي مفيدة للمهام الإدارية، ويجب عدم استخدامها لتنفيذ أي منطق في وقت التشغيل في مسار خوادم وكيل واجهة برمجة التطبيقات. ويرجع ذلك إلى ما يلي:

  • يؤدي استخدام واجهات برمجة التطبيقات للإدارة للوصول إلى معلومات عن الكيانات، مثل KeyValueMaps أو رموز OAuth المميزة للوصول أو لأي غرض آخر من خوادم وكيل واجهة برمجة التطبيقات، إلى الاعتماد على خوادم الإدارة.
  • لا تشكّل خوادم الإدارة جزءًا من مكوّن وقت تشغيل Edge، وبالتالي قد لا تكون متاحة بشكل كبير.
  • قد لا يتم أيضًا توفير خوادم الإدارة ضمن الشبكة أو مركز البيانات نفسهما، وبالتالي قد يؤدي ذلك إلى حدوث حالات تأخير في الشبكة في وقت التشغيل.
  • يتم تخزين الإدخالات مؤقتًا في خوادم الإدارة لفترة أطول، لذا قد لا نتمكّن من الاطّلاع على أحدث البيانات على الفور في خوادم وكيل واجهة برمجة التطبيقات إذا أجرينا عمليات كتابة وقراءة خلال فترة قصيرة.
  • يؤدي ذلك إلى زيادة عدد عمليات الانتقال بين الشبكات في وقت التشغيل.

في عينة التعليمات البرمجية أدناه، يتم إجراء طلب بيانات من واجهة برمجة التطبيقات للإدارة من خلال رمز JavaScript المخصّص لاسترداد المعلومات من KeyValueMap:

var response = httpClient.send('https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/keyvaluemaps/kvm_name')

إذا كان خادم الإدارة غير متاح، سيتعذّر تنفيذ رمز JavaScript الذي يستدعي طلب واجهة برمجة التطبيقات للإدارة. ويؤدي ذلك لاحقًا إلى تعذُّر طلب بيانات من واجهة برمجة التطبيقات.

التأثير

  • يؤدي ذلك إلى الاعتماد بشكل إضافي على خوادم الإدارة في وقت التشغيل. وسيؤثر أي عطل في خوادم الإدارة في طلبات واجهة برمجة التطبيقات.
  • يجب تخزين بيانات اعتماد المستخدمين لواجهات برمجة التطبيقات للإدارة إما محليًا أو في مخزن آمن مثل Encrypted KVM.
  • تأثيرات الأداء بسبب استدعاء خدمة الإدارة عبر الشبكة
  • قد لا تظهر القيم المعدَّلة على الفور بسبب انتهاء صلاحية ذاكرة التخزين المؤقت لفترة أطول في خوادم الإدارة.

أفضل ممارسة

تتوفّر طرق أكثر فعالية لاسترداد المعلومات من الكيانات، مثل KeyValueMaps ومنتجات واجهة برمجة التطبيقات وتطبيقات المطوّرين والمطوّرين ومفاتيح المستهلكين وما إلى ذلك في وقت التشغيل. وفي ما يلي بعض الأمثلة على ذلك:

  • استخدِم سياسة KeyValueMapOperations للوصول إلى المعلومات من KeyValueMaps. في ما يلي نموذج رمز برمجي يوضّح كيفية استرداد المعلومات من KeyValueMap:
    <!-- /antipatterns/examples/2-6.xml -->
    <KeyValueMapOperations mapIdentifier="urlMap" async="false"
        continueOnError="false" enabled="true" name="GetURLKVM">
      <DisplayName>GetURLKVM</DisplayName>
      <ExpiryTimeInSecs>86400</ExpiryTimeInSecs>
      <Scope>environment</Scope>
      <Get assignTo="urlHosti" index="2">
        <Key>
          <Parameter>urlHost_1</Parameter>
        </Key>
      </Get>
    </KeyValueMapOperations>
  • للوصول إلى معلومات عن منتجات واجهة برمجة التطبيقات وتطبيقات المطوّرين والمطوّرين ومفاتيح المستهلكين وما إلى ذلك. في خادم وكيل واجهة برمجة التطبيقات، يمكنك إجراء أي مما يلي:
    • إذا كان مسار خادم وكيل واجهة برمجة التطبيقات يتضمّن سياسة VerifyAPIKey، يمكنك الوصول إلى المعلومات باستخدام متغيّرات المسار التي يتم ملؤها كجزء من هذه السياسة. في ما يلي نموذج رمز برمجي يوضّح كيفية استرداد اسم تطبيق المطوّر والمعلومات عن المستخدم الذي أنشأه باستخدام JavaScript:
      <!-- /antipatterns/examples/2-7.xml -->
      print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name"));
      print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
    • إذا كان مسار خادم وكيل واجهة برمجة التطبيقات لا يتضمّن سياسة VerifyAPIKey، يمكنك الوصول إلى الـ ملفات الشخصية لمنتجات واجهة برمجة التطبيقات وتطبيقات المطوّرين وما إلى ذلك باستخدام سياستَي AccessEntity وExtractVariables السياسات:
      1. استرداد الملف الشخصي لتطبيق المطوّر باستخدام سياسة AccessEntity:
        <!-- /antipatterns/examples/2-8.xml -->
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <AccessEntity async="false" continueOnError="false" enabled="true" name="GetDeveloperApp">
          <DisplayName>GetDeveloperApp</DisplayName>
          <EntityType value="app"></EntityType>
          <EntityIdentifier ref="developer.app.name" type="appname"/>
          <SecondaryIdentifier ref="developer.id" type="developerid"/>
        </AccessEntity>
      2. استخراج appId من تطبيق المطوّر باستخدام سياسة ExtractVariables:
        <!-- /antipatterns/examples/2-9.xml -->
        <ExtractVariables name="Extract-Developer App-Info">
          <!--
            The source element points to the variable populated by AccessEntity policy.
            The format is <policy-type>.<policy-name>
            In this case, the variable contains the whole developer profile.
          -->
          <Source>AccessEntity.GetDeveloperApp"</Source>
          <VariablePrefix>developerapp</VariablePrefix>
          <XMLPayload>
            <Variable name="appld" type="string">
              <!-- You parse elements from the developer profile using XPath. -->
              <XPath>/App/AppId</XPath>
            </Variable>
          </XMLPayload>
        </ExtractVariables>

محتوى إضافي للقراءة