एंटीपैटर्न: एपीआई प्रॉक्सी से मैनेजमेंट एपीआई कॉल शुरू करें

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

Edge में "मैनेजमेंट एपीआई" नाम की एक दमदार सुविधा है. यह कई तरह की सेवाएं देती है:

  • एपीआई प्रॉक्सी को डिप्लॉय या डिप्लॉय करना
  • वर्चुअल होस्ट, कीस्टोर, और ट्रस्टस्टोर वगैरह कॉन्फ़िगर करना.
  • KeyValueMaps, एपीआई प्रॉडक्ट, डेवलपर ऐप्लिकेशन, डेवलपर, उपभोक्ता कुंजियों वगैरह को बनाना, मिटाना, और/या अपडेट करना
  • इन इकाइयों के बारे में जानकारी हासिल की जा रही है

इन सेवाओं को Apigee Edge प्लैटफ़ॉर्म में Management Server नाम के कॉम्पोनेंट के ज़रिए ऐक्सेस किया जा सकता है. इन सेवाओं को आसान मैनेजमेंट एपीआई कॉल की मदद से आसानी से चालू किया जा सकता है.

कभी-कभी हमें रनटाइम के दौरान API प्रॉक्सी की एक या ज़्यादा सेवाओं का इस्तेमाल करने की ज़रूरत पड़ सकती है. ऐसा इसलिए है, क्योंकि KeyValueMaps, OAuth ऐक्सेस टोकन, एपीआई प्रॉडक्ट, डेवलपर ऐप्लिकेशन, डेवलपर, उपभोक्ता कुंजी वगैरह जैसी इकाइयों में, की-वैल्यू पेयर, कस्टम एट्रिब्यूट या प्रोफ़ाइल के हिस्से के तौर पर काम की जानकारी होती है.

उदाहरण के लिए, नीचे दी गई जानकारी को KeyValueMap में संग्रहित किया जा सकता है, ताकि इसे रनटाइम के दौरान ज़्यादा सुरक्षित और ऐक्सेस किया जा सके:

  • बैक-एंड टारगेट के यूआरएल
  • एनवायरमेंट से जुड़ी प्रॉपर्टी
  • बैकएंड या तीसरे पक्ष के सिस्टम के सुरक्षा क्रेडेंशियल

इसी तरह, रनटाइम के दौरान हो सकता है कि आप एपीआई प्रॉडक्ट की सूची या डेवलपर का ईमेल पता लेना चाहें. यह जानकारी, डेवलपर ऐप्लिकेशन प्रोफ़ाइल के हिस्से के तौर पर उपलब्ध होगी.

इस पूरी जानकारी का इस्तेमाल रनटाइम के दौरान, नीतियों या Apigee Edge में कस्टम कोड में डाइनैमिक व्यवहार को चालू करने के लिए किया जा सकता है.

एंटीपैटर्न

मैनेजमेंट एपीआई को प्राथमिकता दी जाती है और एडमिन से जुड़े कामों के लिए उपयोगी होते हैं. इनका इस्तेमाल एपीआई प्रॉक्सी फ़्लो में किसी भी रनटाइम लॉजिक को परफ़ॉर्म करने के लिए नहीं किया जाना चाहिए. ऐसा इसलिए होता है, क्योंकि:

  • KeyValueMaps, OAuth ऐक्सेस टोकन जैसी इकाइयों या एपीआई प्रॉक्सी से किसी अन्य मकसद के लिए जानकारी ऐक्सेस करने के लिए, मैनेजमेंट एपीआई का इस्तेमाल करने से मैनेजमेंट सर्वर पर डिपेंडेंसी होती है.
  • मैनेजमेंट सर्वर, Edge रनटाइम कॉम्पोनेंट का हिस्सा नहीं होते हैं. इसलिए, हो सकता है कि वे इस्तेमाल के लिए उपलब्ध न हों.
  • हो सकता है कि उसी नेटवर्क या डेटा सेंटर में मैनेजमेंट सर्वर का प्रावधान भी न किया गया हो. इसलिए, हो सकता है कि रनटाइम के दौरान, नेटवर्क के इंतज़ार का समय लागू हो.
  • मैनेजमेंट सर्वर में सेव की गई एंट्री को लंबे समय के लिए कैश मेमोरी में सेव किया जाता है. इसलिए, अगर हम कम समय में कुछ लिखें और पढ़ें, तो शायद हम एपीआई प्रॉक्सी में तुरंत नया डेटा न देख पाएं.
  • रनटाइम के दौरान नेटवर्क बार-बार होने की रफ़्तार बढ़ाता है.

नीचे दिए गए कोड सैंपल में, KeyValueMap से जानकारी पाने के लिए कस्टम JavaScript कोड के ज़रिए मैनेजमेंट एपीआई कॉल किया जाता है:

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

अगर मैनेजमेंट सर्वर उपलब्ध नहीं है, तो मैनेजमेंट एपीआई कॉल शुरू करने वाला JavaScript कोड काम नहीं करता. इस वजह से, एपीआई अनुरोध काम नहीं करता.

असर

  • रनटाइम के दौरान मैनेजमेंट सर्वर पर ज़्यादा डिपेंडेंसी दिखाता है. मैनेजमेंट सर्वर में किसी भी तरह की गड़बड़ी होने पर, एपीआई कॉल पर असर पड़ेगा.
  • मैनेजमेंट एपीआई के लिए उपयोगकर्ता के क्रेडेंशियल, स्थानीय तौर पर या किसी सुरक्षित स्टोर में सेव किए जाने चाहिए. जैसे, एन्क्रिप्ट (सुरक्षित) की गई केवीएम.
  • नेटवर्क पर मैनेजमेंट सेवा शुरू करने की वजह से परफ़ॉर्मेंस पर असर पड़ सकता है.
  • ऐसा हो सकता है कि मैनेजमेंट सर्वर में कैश मेमोरी की समयसीमा खत्म होने से, अपडेट की गई वैल्यू तुरंत न दिखें.

सबसे सही तरीका

रनटाइम के दौरान, KeyValueMaps, API प्रॉडक्ट, DeveloperApps, डेवलपर, उपभोक्ता कुंजियों वगैरह से जानकारी पाने के ज़्यादा असरदार तरीके हैं. डेटा इस्तेमाल करने के कुछ उदाहरण यहाँ दिए गए हैं:

  • KeyValueMaps से जानकारी ऐक्सेस करने के लिए, KeyValueMapOperations की नीति का इस्तेमाल करें. यहां एक सैंपल कोड दिया गया है, जिसमें 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 का इस्तेमाल करके किसी डेवलपर ऐप्लिकेशन के नाम और create_by जानकारी को वापस पाने का तरीका बताया गया है:
      <!-- /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. AccessEntity नीति का इस्तेमाल करके, DeveloperApp की प्रोफ़ाइल वापस पाएं:
        <!-- /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. ExtractVariables नीति की मदद से, DeveloperApp से appId को एक्सट्रैक्ट करें:
        <!-- /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>
        

इसके बारे में और पढ़ें