আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
যেকোনো অ্যাপ্লিকেশন প্রোগ্রামিং মডেলে প্রসেসিংয়ের প্রবাহ নিয়ন্ত্রণ করার একটি উপায় থাকে। একটি এপিআই প্রক্সিতে, এই কাজটি ফ্লো (flow) ব্যবহার করে করা হয়। ফ্লো-তে আপনি লজিক, কন্ডিশন স্টেটমেন্ট, এরর হ্যান্ডলিং ইত্যাদি যোগ করতে পারেন। কী ঘটবে এবং কখন ঘটবে, তা নিয়ন্ত্রণ করতে আপনি ফ্লো ব্যবহার করেন।
ফ্লো হলো এপিআই অনুরোধ প্রক্রিয়াকরণ পথের ধারাবাহিক পর্যায়সমূহ। যখন আপনি প্রক্সি লজিক যোগ করেন, যেমন একটি এপিআই কী যাচাই করার জন্য, তখন আপনি ফ্লো দ্বারা নির্দিষ্ট অনুক্রমের একটি ধাপ হিসাবে সেই লজিকটি যোগ করেন। যখন আপনি লজিকটি কখন এবং কীভাবে কার্যকর হবে তা নির্দিষ্ট করার জন্য একটি শর্ত নির্ধারণ করেন, তখন আপনি সেই শর্তটি একটি ফ্লো-তে যোগ করেন।
নিম্নলিখিত ফ্লো কনফিগারেশন উদাহরণটি এমন একটি ফ্লো সংজ্ঞায়িত করে যেখানে 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>প্রবাহ নির্বাহ ক্রম ডিজাইন করা
আপনি ফ্লোগুলোকে এমনভাবে গঠন করেন যাতে প্রসেসিং পাথ বরাবর লজিকগুলো সঠিক ক্রমে কার্যকর হতে পারে।
কোথায় লজিক যোগ করবেন তা ঠিক করার সময়, আপনাকে প্রথমে বেছে নিতে হবে যে এটি একটি প্রক্সি এন্ডপয়েন্টে যোগ করবেন নাকি টার্গেট এন্ডপয়েন্টে। একটি এপিআই প্রক্সি তার কোডকে দুটি ভাগে ভাগ করে: একটি হলো সেই কোড যা প্রক্সির ক্লায়েন্টের সাথে যোগাযোগ করে (প্রক্সি এন্ডপয়েন্ট) এবং অন্যটি হলো ঐচ্ছিক কোড যা প্রক্সির ব্যাকএন্ড টার্গেটের (যদি থাকে) সাথে যোগাযোগ করে (টার্গেট এন্ডপয়েন্ট)।
উভয় প্রান্তবিন্দুতেই প্রবাহ রয়েছে, যেমনটি এখানে বর্ণনা করা হয়েছে:
| এন্ডপয়েন্ট টাইপ | বর্ণনা | প্রবাহ সমর্থিত |
|---|---|---|
| প্রক্সিএন্ডপয়েন্ট | এতে ক্লায়েন্টের সবচেয়ে কাছের এপিআই প্রক্সি ফ্লোগুলো থাকে। এখানে এমন লজিক কাজ করার সুযোগ দেওয়া হয়, যা প্রথমে ক্লায়েন্টের অনুরোধের ওপর এবং সবশেষে ক্লায়েন্টের প্রতিক্রিয়ার ওপর কাজ করে। | প্রিফ্লো, শর্তাধীন ফ্লো, পোস্টফ্লো, পোস্টক্লায়েন্টফ্লো |
| টার্গেটএন্ডপয়েন্ট | ব্যাকএন্ড রিসোর্সের সবচেয়ে কাছের এপিআই প্রক্সি ফ্লোগুলো এতে থাকে। কোনো ব্যাকএন্ড রিসোর্সের জন্য অনুরোধ প্রস্তুত করা এবং তারপর তার প্রতিক্রিয়া পরিচালনা করার লজিকের জন্য এখানে জায়গা রয়েছে। | প্রিফ্লো, শর্তসাপেক্ষ ফ্লো, পোস্টফ্লো |
আপনি XML ব্যবহার করে ফ্লো কনফিগার করেন, যা নির্দিষ্ট করে দেয় কী ঘটবে এবং কোন ক্রমে ঘটবে। নিম্নলিখিত চিত্রটি দেখায় কিভাবে একটি প্রক্সি এন্ডপয়েন্ট এবং টার্গেট এন্ডপয়েন্টের মধ্যে ফ্লো-গুলো ক্রমানুসারে সাজানো থাকে:

প্রক্সি এন্ডপয়েন্ট এবং টার্গেট এন্ডপয়েন্ট প্রতিটিতে এমন ফ্লো রয়েছে যা আপনি নিম্নলিখিত ক্রমে সাজাতে পারেন:
| অবস্থান | প্রবাহের ধরণ | বর্ণনা |
|---|---|---|
| ১ | প্রিফ্লো | যখন আপনাকে নিশ্চিত করতে হয় যে অন্য কিছু ঘটার আগে নির্দিষ্ট কোনো কোড কার্যকর হবে, তখন এটি কাজে আসে। PreFlow-টি যদি কোনো টার্গেট এন্ডপয়েন্টে থাকে, তবে এটি প্রক্সি এন্ডপয়েন্টের PostFlow-এর পরে এক্সিকিউট হয়। |
| ২ | শর্তাধীন প্রবাহ | শর্তসাপেক্ষ যুক্তির স্থান। এটি PreFlow-এর পরে এবং PostFlow-এর আগে কার্যকর হয়। প্রতিটি সেগমেন্টে কেবল একটি কন্ডিশনাল ফ্লো এক্সিকিউট হয়—প্রথম সেই ফ্লোটি, যার কন্ডিশনটি ট্রু হিসেবে ইভ্যালুয়েট হয়। এর মানে হলো, আপনি নিম্নলিখিত প্রতিটির অংশ হিসেবে একটি করে কন্ডিশনাল ফ্লো এক্সিকিউট করতে পারেন:
|
| ৩ | পোস্টফ্লো | ডেটা লগ করা, অনুরোধ প্রক্রিয়াকরণের সময় কিছু ঘটলে বিজ্ঞপ্তি পাঠানো ইত্যাদির জন্য এটি একটি ভালো জায়গা। এটি কন্ডিশনাল ফ্লো এবং প্রিফ্লো-এর পরে কার্যকর হয়। যদি PostFlow-টি কোনো প্রক্সি এন্ডপয়েন্টে থাকে এবং একটি টার্গেট এন্ডপয়েন্টও থাকে, তাহলে টার্গেট এন্ডপয়েন্টের PreFlow-এর আগে প্রক্সি এন্ডপয়েন্টের PostFlow-টি এক্সিকিউট হয়। |
| ৪ | পোস্টক্লায়েন্টফ্লো (শুধুমাত্র প্রক্সি ফ্লো) | ক্লায়েন্টকে প্রতিক্রিয়া ফেরত পাঠানোর পর বার্তা লগ করার একটি কার্যপ্রবাহ। |
প্রিফ্লো ব্যবহার করে কোড প্রথমে এক্সিকিউট করা
যখন আপনাকে নিশ্চিত করতে হয় যে অন্য কিছু ঘটার আগে নির্দিষ্ট কোনো কোড কার্যকর হবে, তখন একটি প্রিফ্লো (PreFlow) কার্যকর হয়।
একটি প্রক্সি এন্ডপয়েন্টে, ক্লায়েন্টকে প্রমাণীকরণ এবং ক্লায়েন্টদের ট্র্যাফিক সীমিত করার কোডের জন্য প্রিফ্লো একটি চমৎকার জায়গা। একটি টার্গেট এন্ডপয়েন্টে, যেখানে ব্যাকএন্ড টার্গেটে অনুরোধ পাঠানোর প্রস্তুতি শুরু হয়, সেখানে অনুরোধ পাঠানোর প্রস্তুতির প্রথম ধাপগুলোর জন্য প্রিফ্লো উপযোগী।
উদাহরণস্বরূপ, আপনি সাধারণত এমন কোনো ক্লায়েন্টকে পরিষেবা দিতে চাইবেন না যে তার কোটা অতিক্রম করেছে। এই প্রয়োজনীয়তাগুলো পূরণের জন্য, আপনি প্রি-ফ্লো (PreFlow) সেগমেন্টে নিরাপত্তা এবং কোটা পলিসিগুলো রাখেন। এর ফলে, পরবর্তী কোনো কন্ডিশনাল ফ্লো-তে কোনো শর্ত মূল্যায়নে ব্যর্থ হওয়া নিয়ে আপনাকে চিন্তা করতে হবে না। এই ফ্লো-এর পলিসিগুলো অন্য যেকোনো প্রক্রিয়াকরণের আগে সর্বদা কার্যকর হবে।
নিম্নলিখিত উদাহরণে, প্রসেসিং কন্ডিশনাল ফ্লো-তে যাওয়ার আগে SpikeArrest এবং Quota পলিসিগুলো কার্যকর হয়।
<PreFlow name="MyPreFlow">
<Request>
<Step>
<Name>Spike-Arrest</Name>
</Step>
<Step>
<Name>Quota</Name>
</Step>
</Request>
<Response/>
</PreFlow>শর্তসাপেক্ষ প্রবাহের মাধ্যমে শর্তসাপেক্ষে কোড কার্যকর করা
একটি প্রিফ্লো এবং একটি পোস্টফ্লো-এর মধ্যে, আপনি এমন ফ্লো রাখতে পারেন যা শর্তসাপেক্ষে কার্যকর হয়। এটি আপনাকে একাধিক লজিকের ক্রম কনফিগার করার সুযোগ দেয়, কিন্তু আপনার প্রক্সির অবস্থার উপর ভিত্তি করে শুধুমাত্র একটিই কার্যকর হয়। একটি শর্তসাপেক্ষ ফ্লো ঐচ্ছিক, যদি আপনি প্রিফ্লো বা পোস্টফ্লো-তে সমস্ত লজিক কার্যকর করতে পারেন এবং কোনো শর্তের প্রয়োজন না হয় (অন্য কথায়, এন্ডপয়েন্টের মাধ্যমে শুধুমাত্র একটি পথই সমর্থিত)।
প্রতিটি ফ্লো একটি শর্ত নির্দিষ্ট করে, যা বিভিন্ন স্টেট ভ্যালু পরীক্ষা করে। এর মাধ্যমে শর্তের উপর ভিত্তি করে এক্সিকিউশন কার্যকরভাবে বিভক্ত হয়। উদাহরণস্বরূপ, আপনি হয়তো শুধুমাত্র তখনই XML থেকে JSON-এ রূপান্তর করতে চাইতে পারেন, যখন অনুরোধকারী অ্যাপটি কোনো মোবাইল ডিভাইসে চলছে।
এখানে, কোটার সীমাবদ্ধতা শুধুমাত্র তখনই কার্যকর করা হয় যখন অনুরোধটি একটি GET অনুরোধ হয় এবং এর URI প্যাটার্নটি হয় /issue/** (অর্থাৎ, /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>শর্ত নির্দিষ্ট করার জন্য আপনি ফ্লো ভ্যারিয়েবল ব্যবহার করেন। শর্তে ভ্যারিয়েবল ব্যবহার সম্পর্কে আরও জানতে, “ফ্লো ভ্যারিয়েবল সহ শর্তসমূহ” দেখুন।
শর্তে প্যাটার্ন ম্যাচিং ব্যবহারের উদাহরণের জন্য, প্যাটার্ন ম্যাচিং দেখুন।
PostFlow ব্যবহার করে মূল লজিকের পরে কোড কার্যকর করা
আপনার এন্ডপয়েন্টের মূল লজিকের পরে এবং এন্ডপয়েন্ট প্রসেসিং শেষ হওয়ার আগে বিভিন্ন অ্যাকশন সম্পাদন করার জন্য পোস্টফ্লো একটি চমৎকার জায়গা। একটি পোস্টফ্লো কন্ডিশনাল ফ্লো এবং প্রিফ্লো-এর পরে এক্সিকিউট হয়।
কিছু ডেটা লগ করা, কোনো ঘটনা ঘটার নোটিফিকেশন পাঠানো, রেসপন্স মেসেজের ফরম্যাট পরিবর্তন করা ইত্যাদির জন্য পোস্টফ্লো একটি ভালো জায়গা।
নিম্নলিখিত উদাহরণে, SetResponseHeaders নামক একটি AssignMessage পলিসি, Apigee Edge ক্লায়েন্টের কাছে প্রতিক্রিয়া ফেরত পাঠানোর আগে, প্রতিক্রিয়া বার্তার হেডারগুলো সেট করে।
<PostFlow>
<Response>
<Step>
<Name>SetResponseHeaders</Name>
</Step>
</Response>
</PostFlow>ক্লায়েন্ট PostClientFlow-এর মাধ্যমে আপনার প্রক্সির প্রতিক্রিয়া পাওয়ার পরে কোড কার্যকর করা।
একটি PostClientFlow-তে নিম্নলিখিত পলিসিগুলো অন্তর্ভুক্ত থাকতে পারে:
* FlowCallout পলিসি শুধুমাত্র সেইসব শেয়ার্ড ফ্লো-কে কল করতে পারে, যেগুলো নিজেরা PostClientFlow-তে থাকার শর্ত পূরণ করে (অর্থাৎ, শুধুমাত্র সামঞ্জস্যপূর্ণ পলিসি ধারণ করে)।
যদি আপনি একটি PostClientFlow অন্তর্ভুক্ত করেন, তাহলে ক্লায়েন্টের কাছে প্রতিক্রিয়া পাঠানোর পরে সেটিই হবে সর্বশেষ সম্পাদিত ফ্লো।
চূড়ান্ত লগিংয়ের জন্য PostClientFlow ভালো। এছাড়াও, আপনি রেসপন্স মেসেজের শুরু এবং শেষের টাইমস্ট্যাম্প লগ করতে পারেন।
এখানে একটি PostClientFlow-এর উদাহরণ দেওয়া হলো, যার সাথে একটি MessageLogging পলিসি সংযুক্ত রয়েছে।
...
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>
<PostClientFlow>
<Request/>
<Response>
<Step>
<Name>Message-Logging-1</Name>
</Step>
</Response>
</PostClientFlow>
...ভিডিও: ফোর মিনিট ভিডিও ফর ডেভেলপারস (4MV4D) সিরিজের এই সংক্ষিপ্ত ভিডিওটি দেখুন, যেখানে মেসেজলগিং পলিসি ব্যবহার করে কীভাবে একটি পোস্টক্লায়েন্টফ্লো (PostClientFlow) তৈরি করতে হয় তা দেখানো হয়েছে।
আরও তথ্যের জন্য দেখুন:
- এপিআই প্রক্সি কনফিগারেশন রেফারেন্স
- টিউটোরিয়াল : Apigee Edge - পোস্ট ক্লায়েন্ট ফ্লো কমিউনিটি আর্টিকেল
ফ্লোতে লজিক যোগ করা
যখন আপনি আপনার প্রক্সিতে লজিক যোগ করেন, তখন আপনি আপনার প্রক্সির ফ্লো-গুলিতে পলিসি যোগ করার মাধ্যমে তা করেন। ঠিক যেমন ফ্লো-গুলি একটি ক্রমানুসারে চলে (এই টপিকে বর্ণিত PreFlow, তারপর Flow, তারপর PostFlow), তেমনি একটি ফ্লো-এর বিষয়বস্তুও একটি ক্রমানুসারে চলে।
নিম্নলিখিত উদাহরণ ফ্লো কনফিগারেশনটি তিনটি পলিসিকে রেফারেন্স করে (যা অন্যত্র তাদের নিজস্ব 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 Trace টুলটি একটি অনুরোধের পর আপনার এপিআই প্রক্সির লজিক কীভাবে কার্যকর হয়, তা গ্রাফিক্যালভাবে দেখার সুযোগ দেয়। টুলটি অনুরোধ এবং প্রতিক্রিয়ার মধ্যবর্তী প্রক্রিয়াকরণ চিত্রিত করে। এটি বিশেষভাবে প্রি-ফ্লো, কন্ডিশনাল ফ্লো এবং পোস্ট-ফ্লো-এর মধ্যকার বিভাজন চিত্রিত করে না।
প্রক্সি ট্রেসিং সম্পর্কে আরও জানতে, ট্রেস টুল ব্যবহার দেখুন।
প্রবাহে ত্রুটি পরিচালনা
একটি এপিআই প্রক্সিতে ফ্লো সহ বিভিন্ন জায়গা থেকে ফল্ট রিপোর্ট করা যায়।
নিম্নলিখিত উদাহরণটি একটি টার্গেট এন্ডপয়েন্টের প্রিফ্লো (PreFlow) থেকে নেওয়া রেসপন্স স্ট্যানজা — অন্য কথায়, এটি সেই কোড যা একটি ব্যাকএন্ড টার্গেট থেকে রেসপন্স পাওয়ার সাথে সাথেই এক্সিকিউট হয়। এই উদাহরণে, টার্গেট থেকে আসা রেসপন্সটি 200 (সফল) না হলে একটি ফল্ট (fault) দেখানো হয়।
<PreFlow name="PreFlow">
<Response>
<Step>
<Name>RaiseFault</Name>
<Condition>(response.status.code GreaterThan "200")</Condition>
</Step>
</Response>
</PreFlow>ত্রুটি পরিচালনা সম্পর্কে আরও জানতে, ত্রুটি পরিচালনা দেখুন।