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

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

يمتلك Edge أداة قوية تسمى "واجهات برمجة التطبيقات للإدارة" والتي توفر خدمات مثل:

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

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

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

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

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

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

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

مضادة للأنماط

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

  • إنّ استخدام واجهات برمجة التطبيقات للإدارة للوصول إلى معلومات عن الكيانات، مثل KeyValueSpace أو رموز الدخول عبر 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.
  • الآثار المترتبة على الأداء بسبب استدعاء خدمة الإدارة عبر الشبكة.
  • قد لا تظهر القيم المعدّلة على الفور بسبب انتهاء صلاحية ذاكرة التخزين المؤقت في خوادم الإدارة لفترة أطول.

أفضل ممارسة

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

  • استخدِم سياسة KeyValueMapOperations للوصول إلى المعلومات من KeyValueSpace. في ما يلي رمز نموذجي يوضّح كيفية استرداد المعلومات من 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>
    
  • للوصول إلى معلومات عن منتجات واجهة برمجة التطبيقات أو تطبيقات المطوّرين أو المطوّرين أو مفاتيح المستهلك أو غير ذلك في الخادم الوكيل لواجهة برمجة التطبيقات، يمكنك تنفيذ أيّ مما يلي:
    • إذا كان تدفق الخادم الوكيل لواجهة برمجة التطبيقات يتضمن سياسة التحقّق من واجهة برمجة التطبيقات، يمكنك الوصول إلى المعلومات باستخدام متغيّرات التدفق التي تمت تعبئتها كجزء من هذه السياسة. في ما يلي رمز نموذجي يوضّح كيفية استرداد اسم تطبيق مطوّر برامج ومعلومات تم إنشاؤه من خلال 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"));
      
    • إذا لم يتضمّن تدفق الخادم الوكيل لواجهة برمجة التطبيقات سياسة التحقّق من واجهة برمجة التطبيقات، يمكنك في هذه الحالة الوصول إلى الملفات الشخصية لمنتجات واجهة برمجة التطبيقات وتطبيقات المطوّرين وما إلى ذلك باستخدام سياستَي "كيان الوصول" و"استخراج المتغيّرات":
      1. استرداد الملف الشخصي لتطبيق DeveloperApp باستخدام سياسة 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 من DeveloperApp باستخدام سياسة ExitVariables:
        <!-- /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>
        
        .

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