ফ্লোয়ের মাধ্যমে কীভাবে প্রক্সি এক্সিকিউট করা হয় তা নিয়ন্ত্রণ করা

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

যেকোনও অ্যাপ্লিকেশন প্রোগ্রামিং মডেলে প্রসেসিংয়ের ফ্লো কন্ট্রোল করার একটি উপায় থাকে। API প্রক্সিতে, এটি ফ্লোয়ের মাধ্যমে করা হয়। ফ্লোতে আপনি লজিক, কন্ডিশন স্টেটমেন্ট, সমস্যার সমাধান এবং আরও অনেক কিছু যোগ করেন। কী ঘটবে এবং কখন ঘটবে তা নিয়ন্ত্রণ করতে আপনি ফ্লো ব্যবহার করেন।

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

নিচে দেওয়া ফ্লো কনফিগারেশনের উদাহরণে এমন একটি ফ্লোকে সংজ্ঞায়িত করা হয়েছে যেখানে VerifyAPIKey নীতি যদি ইনকামিং অনুরোধের পাথ / দিয়ে শেষ হয় এবং অনুরোধের HTTP ক্রিয়া GET হয়, তাহলেই এক্সিকিউট করা হয়।

<Flow name="Get Food Carts">
    <Description>Get Food Carts</Description>
    <Request>
        <Step>
            <Name>Verify-API-Key</Name>
        </Step>
    </Request>
    <Condition>(proxy.pathsuffix MatchesPath "/") and (request.verb = "GET")</Condition>
</Flow>

ফ্লোয়ের <Name> এলিমেন্টে Verify-API-Key ভ্যালু ব্যবহার করা হয় XML-এর মাধ্যমে প্রক্সিতে কনফিগার করা অন্য কোনও নীতি অন্তর্ভুক্ত করতে, যেমন নিম্নলিখিত:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key">
    <DisplayName>Verify API Key</DisplayName>
    <Properties/>
    <APIKey ref="request.header.x-api-key"/>
</VerifyAPIKey>

ফ্লো এক্সিকিউশন সিকোয়েন্স ডিজাইন করা

আপনি ফ্লো এমনভাবে স্ট্রাকচার করেন যাতে প্রসেসিং পাথ বরাবর সঠিক সিকোয়েন্সে লজিক এক্সিকিউট করতে পারেন।

কোথায় লজিক যোগ করবেন তা ঠিক করার সময়, প্রথমে আপনাকে বেছে নিতে হবে যে সেটি কোনও প্রক্সি এন্ডপয়েন্টে যোগ করবেন নাকি টার্গেট এন্ডপয়েন্টে। API প্রক্সি তার কোডকে দু'ভাগে ভাগ করে, একটি হল প্রক্সির ক্লায়েন্টের (প্রক্সি এন্ডপয়েন্ট) সাথে ইন্টার‍্যাক্ট করা কোড এবং অন্যটি হল প্রক্সির ব্যাকএন্ড টার্গেটের সাথে ইন্টার‍্যাক্ট করা ঐচ্ছিক কোড, যদি থাকে (টার্গেট এন্ডপয়েন্ট)।

দুটি এন্ডপয়েন্টেই ফ্লো থাকে, যেমন এখানে বর্ণনা করা হয়েছে:

এন্ডপয়েন্টের ধরন বিবরণ যেসব ফ্লো কাজ করে
ProxyEndpoint ক্লায়েন্টের সবচেয়ে কাছাকাছি API প্রক্সি ফ্লো থাকে। ক্লায়েন্টের অনুরোধে প্রথমে এবং ক্লায়েন্টকে উত্তর দেওয়ার সময় শেষে লজিক প্রয়োগ করার সুযোগ দেয়। PreFlow, শর্তসাপেক্ষ ফ্লো, PostFlow, PostClientFlow
TargetEndpoint ব্যাকএন্ড রিসোর্সের সবচেয়ে কাছাকাছি API প্রক্সি ফ্লো থাকে। ব্যাকএন্ড রিসোর্সের জন্য অনুরোধ তৈরি করতে এবং সেটির থেকে পাওয়া উত্তর হ্যান্ডেল করতে জায়গা প্রদান করে। PreFlow, কনডিশনাল ফ্লো, PostFlow

কী হওয়া উচিত এবং কোন ক্রমে হওয়া উচিত তা নির্দিষ্ট করে XML-এর মাধ্যমে আপনি ফ্লো কনফিগার করেন। নিচের ছবিতে দেখানো হয়েছে যে কীভাবে কোনও প্রক্সি এন্ডপয়েন্ট ও টার্গেট এন্ডপয়েন্টের মধ্যে ফ্লো পরপর সাজানো হয়:

HTTP ক্লায়েন্টের থেকে অনুরোধ প্রক্সি এন্ডপয়েন্টের মাধ্যমে ব্যাকএন্ডের টার্গেট এন্ডপয়েন্টে গিয়ে HTTP পরিষেবাতে পৌঁছায়। প্রতিটি অনুরোধ ও উত্তর প্যানেলে প্রিফ্লো, কন্ডিশনাল ফ্লো ও পোস্ট ফ্লো দেখানো হয়। এছাড়াও, প্রক্সি এন্ডপয়েন্ট ও টার্গেট এন্ডপয়েন্টের উদাহরণ দেওয়া হয়েছে।

প্রক্সি এন্ডপয়েন্ট ও টার্গেট এন্ডপয়েন্ট, দু'টিতেই ফ্লো থাকে যা আপনি নিম্নলিখিত ক্রম অনুসারে সাজাতে পারেন:

অবস্থান ফ্লোয়ের ধরন বিবরণ
1 PreFlow

অন্য কিছু হওয়ার আগে নির্দিষ্ট কোড এক্সিকিউট করা নিশ্চিত করতে চাইলে এটি কাজে লাগে।

PreFlow টার্গেট এন্ডপয়েন্টে থাকলে, এটি প্রক্সি এন্ডপয়েন্টের PostFlow-এর পরে এক্সিকিউট হয়।

2 কন্ডিশনাল ফ্লো

কন্ডিশনাল লজিক প্রয়োগ করার জায়গা। PreFlow-এর পরে এবং PostFlow-এর আগে এক্সিকিউট হয়।

প্রতিটি সেগমেন্টে শুধুমাত্র একটি কন্ডিশনাল ফ্লো এক্সিকিউট করা হয়--যে ফ্লোয়ের কন্ডিশন সত্য হিসেবে মূল্যায়ন করা হয়। এর অর্থ হল, আপনি নিম্নলিখিত প্রতিটি বিকল্পের অংশ হিসেবে একটি করে শর্তাধীন ফ্লো এক্সিকিউট করতে পারবেন:
  • ProxyEndpoint-এর অনুরোধ পাইপলাইন
  • TargetEndpoint-এর অনুরোধ পাইপলাইন
  • ProxyEndpoint-এর উত্তর পাইপলাইন
  • TargetEndpoint-এর রেসপন্স পাইপলাইন
3 PostFlow

ডেটা লগ করা, অনুরোধ প্রসেস করার সময় কিছু ঘটলে বিজ্ঞপ্তি পাঠানো ইত্যাদি ভাল জায়গা। কন্ডিশনাল ফ্লো ও প্রিফ্লোর পরে এক্সিকিউট হয়।

PostFlow যদি কোনও প্রক্সি এন্ডপয়েন্টে থাকে এবং কোনও টার্গেট এন্ডপয়েন্ট থাকে, তাহলে টার্গেট এন্ডপয়েন্ট PreFlow-এর আগে প্রক্সি এন্ডপয়েন্ট PostFlow এক্সিকিউট হয়।

4 PostClientFlow (শুধুমাত্র প্রক্সি ফ্লো) ক্লায়েন্টকে উত্তর পাঠানোর পরে মেসেজ লগ করার ফ্লো।

প্রিফ্লো সহ কোড এক্সিকিউট করা প্রথম

অন্য কিছু হওয়ার আগে নির্দিষ্ট কোড এক্সিকিউট করা নিশ্চিত করতে চাইলে, PreFlow কাজে লাগে।

প্রক্সি এন্ডপয়েন্টে, ক্লায়েন্টকে যাচাই করে এবং ক্লায়েন্ট থেকে ট্রাফিক সীমিত করে এমন কোডের জন্য PreFlow হল একটি দুর্দান্ত জায়গা। টার্গেট এন্ডপয়েন্টে, যেখানে ব্যাকএন্ড টার্গেটে অনুরোধ পাঠানোর প্রস্তুতি শুরু হয়, সেখানে অনুরোধ পাঠানোর প্রস্তুতি নেওয়ার প্রথম ধাপ হিসেবে PreFlow ভাল।

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

নিচের উদাহরণে, কন্ডিশনাল ফ্লোতে প্রসেস করার আগে SpikeArrest ও কোটা নীতি প্রয়োগ করা হয়।

<PreFlow name="MyPreFlow">
    <Request>
        <Step>
            <Name>Spike-Arrest</Name>
        </Step>
        <Step>
            <Name>Quota</Name>
        </Step>
    </Request>
    <Response/>
</PreFlow>

কন্ডিশনাল ফ্লো সহ কন্ডিশনাল কোড এক্সিকিউট করা

PreFlow ও PostFlow-এর মধ্যে, আপনি এমন ফ্লো রাখতে পারেন যা শর্তসাপেক্ষে এক্সিকিউট হয়। এটি আপনাকে লজিকের একাধিক সিকোয়েন্স কনফিগার করার সুযোগ দেয়, কিন্তু আপনার প্রক্সির স্ট্যাটাসের উপর ভিত্তি করে শুধুমাত্র একটিই এক্সিকিউট করা হয়। আপনি যদি PreFlow বা PostFlow-তে সমস্ত লজিক এক্সিকিউট করতে পারেন এবং কোনও শর্তের প্রয়োজন না হয়, তাহলে কন্ডিশনাল ফ্লো ঐচ্ছিক (অন্য কথায়, এন্ডপয়েন্টের মাধ্যমে শুধুমাত্র একটি পাথ সাপোর্ট করে)।

প্রতিটি ফ্লোতে এমন একটি শর্ত উল্লেখ করা হয় যা বিভিন্ন স্টেট ভ্যালু পরীক্ষা করে। এটি কার্যকরভাবে শর্তের উপর ভিত্তি করে এক্সিকিউশনকে ব্রাঞ্চ করে। যেমন, আপনি হয়ত শুধুমাত্র তখনই XML থেকে JSON-এ কনভার্ট করতে চাইবেন যখন অনুরোধকারী অ্যাপটি মোবাইল ডিভাইসে চলছে।

এখানে, কোটা সংক্রান্ত বিধিনিষেধ তখনই প্রয়োগ করা হয় যদি অনুরোধটি GET অনুরোধ হয় এবং তাতে /issue/** URI প্যাটার্ন থাকে (/issue/ with anything in the URI after the last forward slash)।

<Flow name="MyFlow">
    <Description/>
    <Request>
        <Step>
            <Name>Quota</Name>
        </Step>
    </Request>
    <Response/>
    <Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition>
</Flow>

শর্ত নির্দিষ্ট করতে আপনি ফ্লো ভেরিয়েবল ব্যবহার করেন। কন্ডিশনে ভেরিয়েবল ব্যবহার করা সম্পর্কে আরও জানতে, ফ্লো ভেরিয়েবল সহ কন্ডিশন দেখুন।

কন্ডিশনে প্যাটার্ন ম্যাচিং ব্যবহারের উদাহরণ দেখতে, প্যাটার্ন ম্যাচিং দেখুন।

PostFlow সহ মূল লজিকের পরে কোড এক্সিকিউট করা

আপনার এন্ডপয়েন্টের মূল লজিক এবং এন্ডপয়েন্ট প্রসেসিং শেষ হওয়ার আগে অ্যাকশন পারফর্ম করার জন্য PostFlow হল একটি দারুণ জায়গা। কন্ডিশনাল ফ্লো ও প্রিফ্লোর পরে PostFlow এক্সিকিউট হয়।

কিছু ডেটা লগ করা, কিছু ঘটনা ঘটেছে বলে বিজ্ঞপ্তি পাঠানো, উত্তর মেসেজের ফর্ম্যাট পরিবর্তন করা ইত্যাদি কাজের জন্য PostFlow খুব ভাল জায়গা।

নিম্নলিখিত উদাহরণে, SetResponseHeaders নামের একটি AssignMessage নীতি, Apigee Edge ক্লায়েন্টকে উত্তর পাঠানোর আগে উত্তরের মেসেজের হেডার সেট করে।

<PostFlow>
    <Response>
        <Step>
            <Name>SetResponseHeaders</Name>
        </Step>
    </Response>
 </PostFlow>

PostClientFlow সহ আপনার প্রক্সির উত্তর ক্লায়েন্ট পাওয়ার পরে কোড এক্সিকিউট করা

PostClientFlow-তে নিম্নলিখিত নীতি অন্তর্ভুক্ত থাকতে পারে:

* FlowCallout নীতি শুধুমাত্র শেয়ার করা ফ্লোকে কল করতে পারে যেগুলি PostClientFlow-তে থাকার জন্য নির্ধারিত মানদণ্ড পূরণ করে (অর্থাৎ, শুধুমাত্র মানানসই নীতি থাকে)।

আপনি একটি যোগ করলে, PostClientFlow হল এক্সিকিউট করা শেষ ফ্লো, এটি ক্লায়েন্টকে উত্তর পাঠানোর পরে এক্সিকিউট করা হয়।

ফাইনাল লগিংয়ের জন্য PostClientFlow ভালো। এছাড়াও, আপনি উত্তরের মেসেজের জন্য শুরু ও শেষের টাইমস্ট্যাম্প লগ করতে পারবেন।

MessageLogging নীতি সংযুক্ত PostClientFlow-এর একটি উদাহরণ এখানে দেওয়া হল।

    ...
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <PostClientFlow>
        <Request/>
        <Response>
            <Step>
                <Name>Message-Logging-1</Name>
            </Step>
        </Response>
    </PostClientFlow>
    ...

ভিডিও: ডেভেলপারদের জন্য চার মিনিটের ভিডিও (4MV4D) সিরিজের MessageLogging নীতি ব্যবহার করে কীভাবে PostClientFlow তৈরি করতে হয় তা এই ছোট ভিডিওতে দেখানো হয়েছে, দেখে নিন।

আরও তথ্যের জন্য এগুলি দেখুন:

ফ্লোতে লজিক যোগ করা

আপনার প্রক্সিতে লজিক যোগ করার সময়, প্রক্সির ফ্লোতে নীতি যোগ করে তা করা হয়। ঠিক যেভাবে ফ্লো একটি সিকোয়েন্সে এক্সিকিউট হয় (এই বিষয়ে বর্ণনা করা হয়েছে এমন প্রিফ্লো, তারপর ফ্লো, তারপর পোস্টফ্লো), সেইভাবে ফ্লোয়ের কন্টেন্ট একটি সিকোয়েন্সে এক্সিকিউট হয়।

নিম্নলিখিত ফ্লো কনফিগারেশনের উদাহরণে তিনটি নীতির রেফারেন্স দেওয়া হয়েছে (যেগুলি তাদের নিজস্ব XML ফাইলে অন্য কোথাও কনফিগার করা হয়েছে)। Verify-API-Key-এর উল্লেখ করা নীতিটি Remove-API-Key-এর উল্লেখ করা নীতির আগে প্রয়োগ করা হয়; এই দু'টি নীতিই Quota-এর প্রতিনিধিত্ব করা নীতি অনুসরণ করে।

<Flow name="Get Food Cart Menus">
    <Description>Get Food Cart Menus</Description>
    <Request>
        <Step>
            <Name>Verify-API-Key</Name>
        </Step>
        <Step>
            <Name>Remove-API-Key</Name>
        </Step>
        <Step>
            <Name>Quota</Name>
        </Step>
    </Request>
    <Condition>(proxy.pathsuffix MatchesPath "/") and (request.verb = "GET")</Condition>
</Flow>

Apigee Edge কনসোলে এই নীতিগুলির ক্রমকে আইকনের একটি সারি হিসেবে দেখানো হয়, যেখানে প্রতিটি আইকন নীতিকে প্রতিনিধিত্ব করে।

Apigee Edge কনসোলে এই নীতিগুলির ক্রমকে আইকনের একটি সারি হিসেবে দেখানো হয়, যেখানে প্রতিটি আইকন একটি নীতিকে বোঝায়। অনুরোধের পাথে দেখানো আইকনের মধ্যে এগুলি অন্তর্ভুক্ত: API কী যাচাই করুন, API কী সরিয়ে দিন এবং কোটা

ফ্লো ডিবাগ করা

Apigee Edge Trace টুল, কোনও অনুরোধের পরে আপনার API প্রক্সি কীভাবে এক্সিকিউট হয় তা দেখার জন্য একটি গ্রাফিক্যাল উপায় প্রদান করে। অনুরোধ ও উত্তরের মধ্যে প্রসেসিংয়ের বিষয়টি টুলটি ব্যাখ্যা করে। এটি PreFlow, কন্ডিশনাল ফ্লো এবং PostFlow-এর মধ্যে পার্থক্য স্পষ্টভাবে দেখায় না।

প্রক্সি ট্রেস করা সম্পর্কে আরও জানতে, ট্রেস টুল ব্যবহার করা দেখুন।

ফ্লোতে হওয়া সমস্যার সমাধান করা

আপনি ফ্লো সহ API প্রক্সির বিভিন্ন জায়গা থেকে ফল্ট সংক্রান্ত সমস্যা জানাতে পারবেন।

নিচে দেওয়া উদাহরণটি হল টার্গেট এন্ডপয়েন্টে PreFlow থেকে পাওয়া উত্তরের স্ট্যাঞ্জা -- অন্য কথায়, এটি হল সেই কোড যা ব্যাকএন্ড টার্গেট থেকে উত্তর পাওয়ার সাথে সাথেই এক্সিকিউট হয়। এই উদাহরণে, টার্গেট থেকে পাওয়া উত্তর ২০০ (সফল) না হলে, একটি ফল্ট তৈরি হয়।

<PreFlow name="PreFlow">
    <Response>
        <Step>
            <Name>RaiseFault</Name>
            <Condition>(response.status.code GreaterThan "200")</Condition>
        </Step>
    </Response>
</PreFlow>

সমস্যা সমাধান সম্পর্কে আরও জানতে, সমস্যার সমাধান করা দেখুন।