একটি প্রক্সি কিভাবে প্রবাহের সাথে নির্বাহ করে তা নিয়ন্ত্রণ করা

আপনি 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 প্রক্সি তার কোডকে প্রক্সির ক্লায়েন্ট (প্রক্সি এন্ডপয়েন্ট) এর সাথে ইন্টারঅ্যাক্ট করে এমন কোড এবং ঐচ্ছিক কোডের মধ্যে ভাগ করে যা প্রক্সির ব্যাকএন্ড টার্গেটের সাথে ইন্টারঅ্যাক্ট করে, যদি থাকে (টার্গেট এন্ডপয়েন্ট)।

উভয় প্রান্তবিন্দুতে প্রবাহ রয়েছে, যেমন এখানে বর্ণনা করা হয়েছে:

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

আপনি এক্সএমএল দিয়ে প্রবাহ কনফিগার করেন যা নির্দিষ্ট করে কি ঘটতে হবে এবং কোন ক্রমে। নিম্নলিখিত চিত্রটি দেখায় কিভাবে প্রক্সি এন্ডপয়েন্ট এবং টার্গেট এন্ডপয়েন্টের মধ্যে ক্রমানুসারে ক্রমানুসারে প্রবাহিত হয়:

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

প্রক্সি এন্ডপয়েন্ট এবং টার্গেট এন্ডপয়েন্ট প্রতিটিতে ফ্লো থাকে যা আপনি নিম্নলিখিত ক্রম অনুসারে সাজাতে পারেন:

অবস্থান প্রবাহের ধরন বর্ণনা
1 প্রিফ্লো

দরকারী যখন আপনাকে নিশ্চিত করতে হবে যে অন্য কিছু ঘটার আগে নির্দিষ্ট কোড কার্যকর হয়।

যদি প্রিফ্লো একটি টার্গেট এন্ডপয়েন্টে থাকে, তাহলে এটি প্রক্সি এন্ডপয়েন্টের পোস্টফ্লো-এর পরে কার্যকর হয়।

2 শর্তাধীন প্রবাহ

শর্তযুক্ত যুক্তির জায়গা। PreFlow এর পরে এবং PostFlow এর আগে এক্সিকিউট করে।

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

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

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

4 PostClientFlow (শুধুমাত্র প্রক্সি ফ্লো) ক্লায়েন্টের কাছে প্রতিক্রিয়া ফেরত দেওয়ার পরে লগিং বার্তাগুলির জন্য একটি প্রবাহ।

প্রিফ্লো দিয়ে প্রথমে কোড এক্সিকিউট করা

একটি প্রিফ্লো দরকারী যখন আপনাকে নিশ্চিত করতে হবে যে অন্য কিছু ঘটার আগে নির্দিষ্ট কোড কার্যকর হয়।

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

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

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

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

একটি শর্তসাপেক্ষ প্রবাহের সাথে শর্তসাপেক্ষে কোড চালানো

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

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

এখানে, কোটা সীমাবদ্ধতা শুধুমাত্র তখনই প্রয়োগ করা হয় যদি অনুরোধটি /issue/** এর URI প্যাটার্ন সহ একটি GET অনুরোধ হয় (/issue/ শেষ ফরোয়ার্ড স্ল্যাশের পরে URI-তে যেকোনো কিছু সহ)।

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

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

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

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

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

একটি পোস্টফ্লো কিছু ডেটা লগ করার একটি ভাল জায়গা, কিছু ঘটেছে এমন একটি বিজ্ঞপ্তি পাঠাতে, প্রতিক্রিয়া বার্তার বিন্যাসকে রূপান্তরিত করতে এবং আরও অনেক কিছু।

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

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

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

একটি PostClientFlow নিম্নলিখিত নীতিগুলি অন্তর্ভুক্ত করতে পারে:

* FlowCallout নীতি শুধুমাত্র শেয়ার্ড ফ্লোকে কল করতে পারে যেগুলি নিজেরাই 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 প্রক্সির লজিক একটি অনুরোধ অনুসরণ করে কিভাবে কার্যকর হয়। টুল অনুরোধ এবং প্রতিক্রিয়া মধ্যে প্রক্রিয়াকরণ চিত্রিত. এটি প্রিফ্লো, কন্ডিশনাল ফ্লো এবং পোস্টফ্লো-এর মধ্যে বিচ্ছেদকে বিশেষভাবে ব্যাখ্যা করে না।

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

প্রবাহে ত্রুটিগুলি পরিচালনা করা

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

নিম্নলিখিত উদাহরণ হল একটি লক্ষ্য এন্ডপয়েন্টে একটি প্রিফ্লো থেকে প্রতিক্রিয়া স্তবক -- অন্য কথায়, এটি এমন একটি কোড যা ব্যাকএন্ড টার্গেট থেকে প্রতিক্রিয়া পাওয়ার সাথে সাথেই কার্যকর করে। উদাহরণে, লক্ষ্য থেকে প্রতিক্রিয়া 200 (সাফল্য) না হলে একটি ত্রুটি উত্থাপিত হয়।

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

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