অ্যান্টিপ্যাটার্ন: কোনও টার্গেট API প্রক্সি না থাকলে, ব্যাকএন্ড পরিষেবা ইনভোক করতে পরিষেবা কলআউট নীতি ব্যবহার করা

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

API প্রক্সি হল ব্যাকএন্ড পরিষেবার জন্য ম্যানেজ করা ফেকাড। একটি প্রাথমিক API প্রক্সি কনফিগারেশনে একটি ProxyEndpoint (API প্রক্সির URL নির্ধারণ করে) এবং একটি TargetEndpoint (ব্যাকএন্ড পরিষেবার URL নির্ধারণ করে) থাকে।

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

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

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

টার্গেট রুট নেই এমন API প্রক্সি সেইসব ক্ষেত্রে কাজে লাগতে পারে যেখানে আপনাকে TargetEndpoint-এ অনুরোধ মেসেজ ফরওয়ার্ড করার প্রয়োজন নেই। পরিবর্তে, ProxyEndpoint সব প্রয়োজনীয় প্রসেসিং করে। যেমন, ProxyEndpoint, 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 প্রক্সির টার্গেট এন্ডপয়েন্ট হিসেবে সংজ্ঞায়িত করা হয়। টার্গেট এন্ডপয়েন্টে কোনও রাউটিং নিয়ম না থাকলে, কোনও প্রক্সি ServiceCallout নীতি ব্যবহার করে ব্যাকএন্ড পরিষেবা ইনভোক করতে পারবে না।

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

<!-- /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>

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

আরও পড়ুন