অ্যান্টিপ্যাটার্ন: নো টার্গেট এপিআই প্রক্সিতে একটি ব্যাকএন্ড পরিষেবা চালু করতে পরিষেবা কলআউট নীতি ব্যবহার করুন

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

একটি API প্রক্সি ব্যাকএন্ড পরিষেবাগুলির জন্য একটি পরিচালিত সম্মুখভাগ। একটি মৌলিক এপিআই প্রক্সি কনফিগারেশন একটি প্রক্সিএন্ডপয়েন্ট (এপিআই প্রক্সির URL সংজ্ঞায়িত করে) এবং একটি টার্গেটএন্ডপয়েন্ট (ব্যাকএন্ড পরিষেবার URL সংজ্ঞায়িত করে) নিয়ে গঠিত।

Apigee Edge এই প্যাটার্নের উপরে পরিশীলিত আচরণ তৈরি করার জন্য অনেক নমনীয়তা প্রদান করে। উদাহরণস্বরূপ, আপনি ব্যাকএন্ড পরিষেবাতে পাঠানোর আগে API একটি ক্লায়েন্ট অনুরোধকে কীভাবে প্রক্রিয়া করে তা নিয়ন্ত্রণ করতে নীতিগুলি যোগ করতে পারেন, বা ক্লায়েন্টের কাছে ফরোয়ার্ড করার আগে ব্যাকএন্ড পরিষেবা থেকে প্রাপ্ত প্রতিক্রিয়া ম্যানিপুলেট করতে পারেন। আপনি পরিষেবা কলআউট নীতিগুলি ব্যবহার করে অন্যান্য পরিষেবাগুলিকে আহ্বান করতে পারেন, Javascript কোড যোগ করে কাস্টম আচরণ যোগ করতে পারেন, এবং এমনকি একটি API প্রক্সি তৈরি করতে পারেন যা একটি ব্যাকএন্ড পরিষেবা চালু করে না৷

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

একটি টার্গেট এন্ডপয়েন্টের কোন রুট ছাড়াই একটি API প্রক্সিতে একটি ব্যাকএন্ড পরিষেবা চালু করতে পরিষেবা কলআউটগুলি ব্যবহার করা প্রযুক্তিগতভাবে সম্ভব, কিন্তু এর ফলে বহিরাগত পরিষেবার কার্যকারিতা সম্পর্কে বিশ্লেষণ ডেটা হারিয়ে যায়৷

একটি API প্রক্সি যাতে টার্গেট রুট ধারণ করে না এমন ক্ষেত্রে কার্যকর হতে পারে যেখানে আপনাকে TargetEndpoint এ অনুরোধ বার্তা ফরোয়ার্ড করার প্রয়োজন নেই। পরিবর্তে, প্রক্সিএন্ডপয়েন্ট সমস্ত প্রয়োজনীয় প্রক্রিয়াকরণ করে। উদাহরণস্বরূপ, প্রক্সিএন্ডপয়েন্ট API পরিষেবার কী/মান স্টোরে একটি লুকআপ থেকে ডেটা পুনরুদ্ধার করতে পারে এবং কোনও ব্যাকএন্ড পরিষেবা চালু না করেই প্রতিক্রিয়া ফিরিয়ে দিতে পারে।

আপনি একটি API প্রক্সিতে একটি নাল রুট সংজ্ঞায়িত করতে পারেন, যেমনটি এখানে দেখানো হয়েছে:

<RouteRule name="noroute"/>

একটি নাল রুট ব্যবহার করে একটি প্রক্সি একটি "নো টার্গেট" প্রক্সি, কারণ এটি একটি টার্গেট ব্যাকএন্ড পরিষেবা চালু করে না।

টেকনিক্যালি একটি নো টার্গেট প্রক্সিতে একটি পরিষেবা কলআউট যোগ করা সম্ভব একটি বহিরাগত পরিষেবা শুরু করার জন্য, যেমনটি নীচের উদাহরণে দেখানো হয়েছে:

<!-- /antipatterns/examples/service-callout-no-target-1.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request>
            <Step>
                <Name>ServiceCallout-InvokeBackend</Name>
            </Step>
        </Request>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/no-target-proxy</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="noroute"/>
</ProxyEndpoint>

যাইহোক, প্রক্সি বাহ্যিক পরিষেবার আচরণ (যেমন প্রক্রিয়াকরণের সময় বা ত্রুটির হার) সম্পর্কে বিশ্লেষণী তথ্য প্রদান করতে পারে না, এটি বহিরাগত পরিষেবার কর্মক্ষমতা মূল্যায়ন করা কঠিন করে তোলে।

প্রভাব

  • বাহ্যিক পরিষেবার সাথে মিথস্ক্রিয়া সম্পর্কিত বিশ্লেষণ তথ্য (ত্রুটির কোড, প্রতিক্রিয়া সময়, লক্ষ্য কর্মক্ষমতা, ইত্যাদি) অনুপলব্ধ
  • পরিষেবা কলআউট আহ্বান করার আগে বা পরে প্রয়োজনীয় যে কোনও নির্দিষ্ট যুক্তি সামগ্রিক প্রক্সি লজিকের অংশ হিসাবে অন্তর্ভুক্ত করা হয়েছে, এটি বোঝা এবং পুনরায় ব্যবহার করা কঠিন করে তোলে।

ভাল অভ্যাস

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

নিম্নলিখিত প্রক্সি কনফিগারেশন উপরের উদাহরণের মতো একই আচরণ প্রয়োগ করে, কিন্তু সর্বোত্তম অনুশীলন অনুসরণ করে:

<!-- /antipatterns/examples/service-callout-no-target-2.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/simple-proxy-with-route-to-backend</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
    </RouteRule>
</ProxyEndpoint>

ম্যাশআপ পরিস্থিতি সমর্থন করতে পরিষেবা কলআউটগুলি ব্যবহার করুন, যেখানে আপনি টার্গেট এন্ডপয়েন্ট আহ্বান করার আগে বা পরে বাহ্যিক পরিষেবাগুলি শুরু করতে চান৷ পরিষেবা কলআউট টার্গেট এন্ডপয়েন্ট ইনভোকেশন প্রতিস্থাপন করার জন্য নয়।

আরও পড়া