অ্যান্টিপ্যাটার্ন: এপিআই প্রক্সি থেকে ম্যানেজমেন্ট এপিআই কল আহ্বান করুন

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান
তথ্য

এজ এর "ম্যানেজমেন্ট APIs" নামে একটি শক্তিশালী ইউটিলিটি রয়েছে যা পরিষেবাগুলি অফার করে যেমন:

  • এপিআই প্রক্সি স্থাপন বা আনডিপ্লোয়িং
  • ভার্চুয়াল হোস্ট, কীস্টোর এবং ট্রাস্টস্টোর ইত্যাদি কনফিগার করা।
  • KeyValueMaps, API পণ্য, ডেভেলপার অ্যাপস, ডেভেলপার, কনজিউমার কী ইত্যাদির মতো সত্তা তৈরি করা, মুছে ফেলা এবং/অথবা আপডেট করা।
  • এই সত্তা সম্পর্কে তথ্য পুনরুদ্ধার করা হচ্ছে

অ্যাপিজি এজ প্ল্যাটফর্মে ম্যানেজমেন্ট সার্ভার নামক একটি উপাদানের মাধ্যমে এই পরিষেবাগুলি অ্যাক্সেসযোগ্য করা হয়। এই পরিষেবাগুলি সহজ ব্যবস্থাপনা API কলগুলির সাহায্যে সহজেই আহ্বান করা যেতে পারে।

কখনও কখনও আমাদের রানটাইমে API প্রক্সি থেকে এই পরিষেবাগুলির এক বা একাধিক ব্যবহার করতে হতে পারে। এর কারণ হল KeyValueMaps, OAuth Access Tokens, API প্রোডাক্ট, ডেভেলপার অ্যাপস, ডেভেলপার, কনজিউমার কী, ইত্যাদির মতো সত্তাগুলি কী-মান জোড়া, কাস্টম বৈশিষ্ট্য বা তার প্রোফাইলের অংশ হিসাবে দরকারী তথ্য ধারণ করে৷

উদাহরণস্বরূপ, রানটাইমে এটিকে আরও নিরাপদ এবং অ্যাক্সেসযোগ্য করতে আপনি KeyValueMap-এ নিম্নলিখিত তথ্য সংরক্ষণ করতে পারেন:

  • ব্যাক-এন্ড টার্গেট ইউআরএল
  • পরিবেশগত বৈশিষ্ট্য
  • ব্যাকএন্ড বা তৃতীয় পক্ষের সিস্টেমের নিরাপত্তা শংসাপত্র

একইভাবে, আপনি রানটাইমে API পণ্যের তালিকা বা বিকাশকারীর ইমেল ঠিকানা পেতে চাইতে পারেন। এই তথ্য বিকাশকারী অ্যাপস প্রোফাইলের অংশ হিসাবে উপলব্ধ হবে৷

Apigee Edge-এর মধ্যে নীতি বা কাস্টম কোডে গতিশীল আচরণ সক্ষম করতে রানটাইমে এই সমস্ত তথ্য কার্যকরভাবে ব্যবহার করা যেতে পারে।

অ্যান্টিপ্যাটার্ন

ম্যানেজমেন্ট এপিআই পছন্দের এবং প্রশাসনিক কাজের জন্য উপযোগী এবং API প্রক্সি ফ্লোতে কোনো রানটাইম লজিক সম্পাদনের জন্য ব্যবহার করা উচিত নয়। এটি কারণ:

  • KeyValueMaps, OAuth অ্যাক্সেস টোকেন বা API প্রক্সি থেকে অন্য কোনো উদ্দেশ্যে সত্তা সম্পর্কে তথ্য অ্যাক্সেস করার জন্য ব্যবস্থাপনা API ব্যবহার করলে ম্যানেজমেন্ট সার্ভারের উপর নির্ভরশীলতা তৈরি হয়।
  • ম্যানেজমেন্ট সার্ভারগুলি এজ রানটাইম উপাদানের একটি অংশ নয় এবং তাই, তারা খুব বেশি উপলব্ধ নাও হতে পারে।
  • ম্যানেজমেন্ট সার্ভারগুলি একই নেটওয়ার্ক বা ডেটা সেন্টারের মধ্যে প্রবিধান নাও হতে পারে এবং তাই রানটাইমে নেটওয়ার্ক লেটেন্সি প্রবর্তন করতে পারে।
  • ম্যানেজমেন্ট সার্ভারগুলিতে এন্ট্রিগুলি দীর্ঘ সময়ের জন্য ক্যাশে করা হয়, তাই আমরা অল্প সময়ের মধ্যে লেখা এবং পড়া সম্পাদন করলে আমরা API প্রক্সিগুলিতে অবিলম্বে সর্বশেষ ডেটা দেখতে সক্ষম নাও হতে পারি।
  • রানটাইমে নেটওয়ার্ক হপস বাড়ায়।

নীচের কোড নমুনায়, KeyValueMap থেকে তথ্য পুনরুদ্ধার করতে কাস্টম জাভাস্ক্রিপ্ট কোডের মাধ্যমে ব্যবস্থাপনা API কল করা হয়:

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

যদি ম্যানেজমেন্ট সার্ভারটি অনুপলব্ধ হয়, তাহলে জাভাস্ক্রিপ্ট কোড যা ম্যানেজমেন্ট এপিআই কলের জন্য ব্যর্থ হয়। এটি পরবর্তীতে API অনুরোধটি ব্যর্থ করে দেয়।

প্রভাব

  • রানটাইম চলাকালীন ম্যানেজমেন্ট সার্ভারের উপর অতিরিক্ত নির্ভরতা প্রবর্তন করে। ম্যানেজমেন্ট সার্ভারে কোনো ব্যর্থতা API কলগুলিকে প্রভাবিত করবে।
  • ম্যানেজমেন্ট API-এর জন্য ব্যবহারকারীর শংসাপত্রগুলি স্থানীয়ভাবে বা কিছু সুরক্ষিত স্টোর যেমন এনক্রিপ্ট করা KVM-এ সংরক্ষণ করা প্রয়োজন।
  • নেটওয়ার্কে ম্যানেজমেন্ট সার্ভিস চালু করার কারণে পারফরম্যান্সের প্রভাব।
  • ম্যানেজমেন্ট সার্ভারে ক্যাশের মেয়াদ দীর্ঘ হওয়ার কারণে আপডেট হওয়া মানগুলি অবিলম্বে দেখতে নাও পেতে পারে।

সর্বোত্তম অনুশীলন

রানটাইমে KeyValueMaps, API পণ্য, ডেভেলপারঅ্যাপস, ডেভেলপার, কনজিউমার কী, ইত্যাদির মতো সত্তা থেকে তথ্য পুনরুদ্ধার করার আরও কার্যকর উপায় রয়েছে। এখানে কয়েকটি উদাহরণ দেওয়া হল:

  • 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 প্রক্সিতে API প্রোডাক্ট, ডেভেলপার অ্যাপস, ডেভেলপার, কনজিউমার কী, ইত্যাদি সম্পর্কে তথ্য অ্যাক্সেস করতে, আপনি নিম্নলিখিতগুলির যেকোনো একটি করতে পারেন:
    • যদি আপনার API প্রক্সি ফ্লোতে একটি VerifyAPIKey নীতি থাকে, তাহলে আপনি এই নীতির অংশ হিসাবে ফ্লো ভেরিয়েবলগুলি ব্যবহার করে তথ্য অ্যাক্সেস করতে পারেন৷ এখানে নমুনা কোড রয়েছে যা দেখায় কিভাবে জাভাস্ক্রিপ্ট ব্যবহার করে একটি বিকাশকারী অ্যাপের নাম এবং তৈরি_তথ্য পুনরুদ্ধার করতে হয়:
      <!-- /antipatterns/examples/2-7.xml -->
      print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name"));
      print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
      
    • যদি আপনার API প্রক্সি ফ্লোতে একটি VerifyAPIKey নীতি না থাকে, তাহলে আপনি অ্যাক্সেস সত্তা এবং এক্সট্র্যাক্ট ভেরিয়েবল নীতিগুলি ব্যবহার করে API পণ্য, বিকাশকারী অ্যাপ, ইত্যাদির প্রোফাইলগুলি অ্যাক্সেস করতে পারেন:
      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>
        

আরও পড়া