ExtensionCallout নীতি

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

API প্রক্সিতে এক্সটেনশন যোগ করতে ExtensionCallout নীতি ব্যবহার করুন।

Apigee Edge-এর বাইরে থাকা নির্দিষ্ট রিসোর্সে অ্যাক্সেস প্রদান করে এক্সটেনশন। Cloud Storage বা Cloud Speech-to-Text-এর মতো Google Cloud Platform পরিষেবা রিসোর্স হতে পারে। তবে, রিসোর্সটি HTTP বা HTTPS-এর মাধ্যমে অ্যাক্সেস করা যায় এমন যেকোনও এক্সটার্নাল রিসোর্স হতে পারে।

এক্সটেনশনের ওভারভিউ পেতে, এক্সটেনশন কী? দেখুন প্রাথমিক টিউটোরিয়ালের জন্য, টিউটোরিয়াল: এক্সটেনশন যোগ করা ও ব্যবহার করা দেখুন।

ExtensionCallout নীতি থেকে কোনও এক্সটেনশন অ্যাক্সেস করার আগে, আপনার Apigee Edge সংগঠনে আগে থেকেই ইনস্টল করা এক্সটেনশন প্যাকেজ থেকে আপনাকে অবশ্যই এক্সটেনশনটি যোগ করতে, কনফিগার করতে এবং ডেপ্লয় করতে হবে।

নমুনা

Cloud Logging এক্সটেনশনের সাথে ব্যবহার করার জন্য নিচে একটি উদাহরণ নীতি দেখানো হল:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="false" enabled="true" name="Logging-Extension">
        <DisplayName>Logging Extension</DisplayName>
        <Connector>cloud-extension-sample</Connector>
        <Action>log</Action>
        <Input>{
                "logName" : "example-log",
                "metadata" : "test-metadata",
                "message" : "This is a test"
        }</Input>
    <Output>cloud-extension-example-log</Output>
</ConnectorCallout>

Cloud Logging এক্সটেনশন ব্যবহার করার সম্পূর্ণ টিউটোরিয়ালের জন্য টিউটোরিয়াল: এক্সটেনশন ব্যবহার করা দেখুন।

উপলভ্য সব এক্সটেনশনের উদাহরণ দেখতে, এক্সটেনশন রেফারেন্স ওভারভিউ দেখুন।

ExtensionCallout নীতি সম্পর্কে

API প্রক্সি থেকে কোনও এক্সটার্নাল রিসোর্স অ্যাক্সেস করার জন্য কনফিগার করা এক্সটেনশন ব্যবহার করতে চাইলে, ExtensionCallout নীতি ব্যবহার করুন।

এই নীতি ব্যবহার করার আগে, আপনার যা প্রয়োজন:

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

PostClientFlow-তে ExtensionCallout নীতি ব্যবহার করা

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

আপনি যদি PostClientFlow থেকে Google Cloud Logging এক্সটেনশন কল করার জন্য ExtensionCallout নীতি ব্যবহার করতে চান, তাহলে নিশ্চিত করুন যে আপনার প্রতিষ্ঠানে features.allowExtensionsInPostClientFlow ফ্ল্যাগ true হিসেবে সেট করা আছে।

  • আপনি যদি পাবলিক ক্লাউডের জন্য Apigee Edge গ্রাহক হন, তাহলে features.allowExtensionsInPostClientFlow ফ্ল্যাগ ডিফল্ট হিসেবে true হিসেবে সেট করা থাকে।

  • আপনি যদি প্রাইভেট ক্লাউডের জন্য Apigee Edge গ্রাহক হন, তাহলে features.allowExtensionsInPostClientFlow ফ্ল্যাগকে true হিসেবে সেট করতে সংস্থা প্রপার্টি আপডেট করুন API ব্যবহার করুন।

PostClientFlow থেকে MessageLogging নীতি কল করার উপর থাকা সব বিধিনিষেধ ExtensionCallout নীতির ক্ষেত্রেও প্রযোজ্য। আরও জানতে ব্যবহার সংক্রান্ত নোট দেখুন।

এলিমেন্ট রেফারেন্স

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="false" enabled="true" name="Extension-Callout-1">
    <DisplayName/>
    <Connector/>
    <Action/>
    <Input/>
    <Output/>
</ConnectorCallout>

<ConnectorCallout> অ্যাট্রিবিউট

<ConnectorCallout name="Extension-Callout-1" continueOnError="false" enabled="true" async="false">

নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
name

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<Action> এলিমেন্ট

নীতিকে আহ্বান করতে হবে এমন এক্সটেনশন-এক্সপোজড অ্যাকশন।

<Action>action-exposed-by-extension</Action>
ডিফল্ট কোনওটিই নয়
উপস্থিতি প্রয়োজনীয়
ধরন স্ট্রিং

প্রতিটি এক্সটেনশন তার নিজস্ব অ্যাকশনের সেট প্রকাশ করে যা এক্সটেনশনটি যে রিসোর্সকে উপস্থাপন করে তার কার্যকারিতা অ্যাক্সেস করার সুবিধা প্রদান করে। আপনি অ্যাকশনকে এমন একটি ফাংশন হিসেবে ভাবতে পারেন যা আপনি এই নীতির মাধ্যমে কল করেন এবং ফাংশনের আর্গুমেন্ট নির্দিষ্ট করতে <Input> এলিমেন্টের কন্টেন্ট ব্যবহার করেন। <Output> এলিমেন্টের মাধ্যমে আপনি যে ভেরিয়েবল নির্দিষ্ট করেন, অ্যাকশনের উত্তর সেখানে স্টোর করা হয়।

এক্সটেনশনের ফাংশনের তালিকা পেতে, এই নীতি থেকে আপনি যে এক্সটেনশন কল করছেন তার রেফারেন্স দেখুন।

<Connector> এলিমেন্ট

ব্যবহার করার জন্য কনফিগার করা এক্সটেনশনের নাম। কোনও এনভায়রনমেন্টে ডিপ্লয় করার জন্য কনফিগার করার সময় এক্সটেনশনকে দেওয়া এনভায়রনমেন্ট-স্কোপ করা নাম এটি।

<Connector>name-of-configured-extension</Connector>

ডিফল্ট কোনওটিই নয়
উপস্থিতি প্রয়োজনীয়
ধরন স্ট্রিং

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

<Input> এলিমেন্ট

এক্সটেনশনে পাঠানোর জন্য অনুরোধের বডি সহ JSON।

<Input><![CDATA[ JSON-containing-input-values ]]></Input>

ডিফল্ট কোনওটিই নয়
উপস্থিতি এক্সটেনশনের উপর নির্ভর করে ঐচ্ছিক বা প্রয়োজনীয়।
ধরন স্ট্রিং

এটি মূলত <Action> এলিমেন্টের মাধ্যমে আপনার নির্দিষ্ট করা অ্যাকশনের একটি আর্গুমেন্ট। আপনি যে এক্সটেনশন ও অ্যাকশন ব্যবহার করছেন তার উপর নির্ভর করে <Input> এলিমেন্টের ভ্যালু আলাদা আলাদা হবে। প্রতিটি অ্যাকশনের প্রপার্টি সম্পর্কে বিস্তারিত জানতে এক্সটেনশন প্যাকেজ ডকুমেন্টেশন দেখুন।

মনে রাখবেন, অনেক <Input> এলিমেন্ট ভ্যালু <![CDATA[]]> সেকশন হিসেবে এনক্লোজ না করা হলেও সঠিকভাবে কাজ করবে, তবে JSON-এর নিয়ম এমন ভ্যালু অনুমোদন করে যা XML হিসেবে পার্স করা যাবে না। পেশাদার পদ্ধতি হিসেবে, রানটাইম পার্সিং সংক্রান্ত সমস্যা এড়াতে JSON-কে CDATA বিভাগ হিসেবে এনক্লোজ করুন।

<Input> এলিমেন্টের ভ্যালু হল ভালভাবে ফর্ম্যাট করা JSON, যার প্রপার্টিগুলি এক্সটেনশন অ্যাকশনকে ইনভোক করার জন্য পাঠানোর ভ্যালু নির্দিষ্ট করে। যেমন, Google Cloud Logging Extension এক্সটেনশনের log অ্যাকশন, যে লগে লিখতে হবে (logName), এন্ট্রির সাথে অন্তর্ভুক্ত করার মেটাডেটা (metadata) এবং লগ মেসেজ (data) নির্দিষ্ট করে এমন ভ্যালু নেয়। এখানে একটি উদাহরণ দেওয়া হল:

<Input><![CDATA[{
    "logName" : "example-log",
    "metadata" : {
        "resource": {
            "type": "global",
            "labels": {
                "project_id": "my-test"
            }
        }
    },
    "message" : "This is a test"
}]]></Input>

<Input> JSON-এ ফ্লো ভেরিয়েবল ব্যবহার করা

<Input>-এর কন্টেন্টকে একটি মেসেজ টেমপ্লেট হিসেবে বিবেচনা করা হয়। এর অর্থ হল, কার্লি ব্রেসে মোড়ানো ভেরিয়েবলের নাম রানটাইমে রেফারেন্স করা ভেরিয়েবলের ভ্যালু দিয়ে পরিবর্তন করা হবে।

যেমন, আপনি <Input> ব্লকটি আবার লিখে client.ip ফ্লো ভেরিয়েবল ব্যবহার করতে পারেন, যাতে API প্রক্সি কল করা ক্লায়েন্টের IP অ্যাড্রেস পাওয়া যায়:

<Input><![CDATA[{
    "logName" : "example-log",
    "metadata" : {
        "resource": {
            "type": "global",
            "labels": {
                "project_id": "my-test"
            }
        }
    },
    "message" : "{client.ip}"
}]]></Input>

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

নিচে দেওয়া <Input> উদাহরণে দুটি ফ্লো ভেরিয়েবল রেফারেন্স আছে:

<Input><![CDATA[{
  "logName" : "example-log",
  "metadata" : {my.log.entry.metadata},
  "message" : "{client.ip}"
}]]></Input>

রানটাইমে, JSON প্রপার্টির ভ্যালু নিম্নলিখিতভাবে সমাধান করা হবে:

  • logName প্রপার্টির ভ্যালু -- স্ট্রিং লিটেরাল example-log.
  • metadata প্রপার্টির ভ্যালু -- my.log.entry.metadata ফ্লো ভেরিয়েবল ভ্যালু কোটেশন চিহ্ন ছাড়া। যদি ভেরিয়েবলের ভ্যালু নিজেই কোনও অবজেক্টের JSON হয়, তাহলে এটি সহায়ক হতে পারে।
  • message প্রপার্টির ভ্যালু -- সাথে কোটেশন চিহ্ন সহ client.ip ফ্লো ভেরিয়েবল ভ্যালু।

<Output> এলিমেন্ট

এক্সটেনশন অ্যাকশনের উত্তর সেভ করে এমন ভেরিয়েবলের নাম।

<Output>variable-name</Output> <!-- The JSON object inside the variable is parsed -->

অথবা

<Output parsed="false">variable-name</Output>  <!-- The JSON object inside the variable is raw, unparsed -->

ডিফল্ট কোনওটিই নয়
উপস্থিতি এক্সটেনশনের উপর নির্ভর করে ঐচ্ছিক বা প্রয়োজনীয়।
ধরন parsed অ্যাট্রিবিউট সেটিংসের উপর নির্ভর করে পার্স করা অবজেক্ট বা স্ট্রিং।

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

এক্সটেনশন রেসপন্স অবজেক্ট JSON ফর্ম্যাটে থাকে। JSON-কে কীভাবে ম্যানেজ করা হবে সেই ব্যাপারে দুটি বিকল্প আছে:

  • পার্স করা (ডিফল্ট): নীতিটি JSON অবজেক্ট পার্স করে এবং JSON ডেটা সহ অটোমেটিক ভেরিয়েবল তৈরি করে। যেমন, JSON-এ "messageId" : 12345; থাকলে এবং আপনার আউটপুট ভেরিয়েবলের নাম extensionOutput হলে, আপনি {extensionOutput.messageId} ভেরিয়েবল ব্যবহার করে অন্যান্য নীতিতে সেই মেসেজ আইডি অ্যাক্সেস করতে পারবেন।
  • পার্স করা হয়নি: আউটপুট ভেরিয়েবলে এক্সটেনশন থেকে পাওয়া পার্স না করা JSON উত্তর থাকে। (আপনি চাইলে, জাভাস্ক্রিপ্ট নীতি ব্যবহার করে আলাদা ধাপে এখনও রেসপন্স ভ্যালু পার্স করতে পারবেন।)

<Output> অ্যাট্রিবিউট

অ্যাট্রিবিউট বিবরণ ডিফল্ট উপস্থিতি
পার্স করা হয়েছে এক্সটেনশন থেকে পাওয়া JSON অবজেক্ট পার্স করে, যা JSON অবজেক্টের ডেটাকে অন্যান্য নীতির মাধ্যমে ভেরিয়েবল হিসেবে অ্যাক্সেস করতে দেয়। সত্য ঐচ্ছিক

ফ্লো ভেরিয়েবল

কোনওটিই নয়।

সমস্যার কোড

Apigee Edge নীতি থেকে ফেরত আসা সমস্যার মেসেজগুলি নীতি সংক্রান্ত সমস্যার রেফারেন্সে বর্ণিত একটি সামঞ্জস্যপূর্ণ ফর্ম্যাট অনুসরণ করে।

এই বিভাগে ত্রুটির বার্তা এবং ফ্লো ভেরিয়েবলগুলি বর্ণনা করে যেগুলি সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ আপনি একটি প্রক্সির জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা তা জানার জন্য এই তথ্যটি গুরুত্বপূর্ণ৷ আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷

রানটাইম ত্রুটি

নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷

ত্রুটির নাম HTTP স্থিতি কারণ
কার্যকর করা ব্যর্থ হয়েছে৷ 500 এক্সটেনশনটি একটি ত্রুটির সাথে প্রতিক্রিয়া জানায়৷

স্থাপনার ত্রুটি

আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷

ত্রুটির নাম ঘটে যখন ঠিক করুন
InvalidConnectorInstance <Connector> উপাদানটি খালি।
ConnectorInstanceDoesNotExists <Connector> উপাদানে নির্দিষ্ট করা এক্সটেনশন পরিবেশে বিদ্যমান নেই।
InvalidAction এক্সটেনশনকলআউট নীতিতে <Action> উপাদানটি অনুপস্থিত বা একটি খালি মান সেট করা আছে।
AllowExtensionsInPostClientFlow পোস্ট ক্লায়েন্ট ফ্লোতে এক্সটেনশন কলআউট নীতি থাকা নিষিদ্ধ৷