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

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

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

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

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

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

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

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

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

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

एंटीपैटर्न

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

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

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

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>
    
  • API प्रॉडक्ट, डेवलपर ऐप्लिकेशन, डेवलपर, उपभोक्ता कुंजियों वगैरह के बारे में जानकारी ऐक्सेस करने के लिए. में जाकर, इनमें से कोई भी काम किया जा सकता है:
    • अगर आपके एपीआई प्रॉक्सी फ़्लो में VerifyAPIKey नीति दी गई है, तो जानकारी को ऐक्सेस किया जा सकता है इस नीति के हिस्से के तौर पर, अपने-आप भरे गए फ़्लो वैरिएबल का इस्तेमाल करके. यहां सैंपल कोड दिया गया है, जिसमें JavaScript का इस्तेमाल करके, डेवलपर ऐप्लिकेशन के नाम और created_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"));
      
    • अगर आपके एपीआई प्रॉक्सी फ़्लो में कोई VerifyAPIKey नीति नहीं है, तो ऐक्सेस इकाई और एक्सट्रैक्ट वैरिएबल का इस्तेमाल करके एपीआई प्रॉडक्ट, डेवलपर ऐप्लिकेशन वगैरह की प्रोफ़ाइल नीतियां:
      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>
        

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