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

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

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

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

التأثير

  • لتقديم تبعية إضافية إلى خوادم الإدارة أثناء وقت التشغيل. أي إخفاق في ستؤثر خوادم الإدارة في طلبات بيانات من واجهة برمجة التطبيقات.
  • يجب تخزين بيانات اعتماد المستخدم لواجهات برمجة تطبيقات الإدارة إما محليًا أو في متجر آمن مثل خوارزمية 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، يمكنك حينها الوصول إلى الملفات الشخصية لمنتجات واجهة برمجة التطبيقات وتطبيقات المطورين وما إلى ذلك باستخدام كيان الوصول ومتغيرات الاستخراج السياسات:
      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 من DeveloperApp باستخدام سياسة OutputVariables:
        <!-- /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>
        

مراجع إضافية