এক্সটেনশন কলআউট নীতি

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

একটি API প্রক্সিতে একটি এক্সটেনশন অন্তর্ভুক্ত করতে ExtensionCallout নীতি ব্যবহার করুন৷

একটি এক্সটেনশন Apigee Edge-এর বাহ্যিক একটি নির্দিষ্ট সংস্থানে অ্যাক্সেস প্রদান করে। সম্পদ হতে পারে Google ক্লাউড প্ল্যাটফর্ম পরিষেবা যেমন ক্লাউড স্টোরেজ বা ক্লাউড স্পিচ-টু-টেক্সট । কিন্তু সম্পদটি HTTP বা HTTPS-এর মাধ্যমে অ্যাক্সেসযোগ্য কোনো বাহ্যিক সম্পদ হতে পারে।

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

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

নমুনা

ক্লাউড লগিং এক্সটেনশনের সাথে ব্যবহারের জন্য একটি উদাহরণ নীতি নীচে দেখানো হয়েছে:

<?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>

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

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

এক্সটেনশন কলআউট নীতি সম্পর্কে

যখন আপনি একটি API প্রক্সির মধ্যে থেকে একটি বাহ্যিক সংস্থান অ্যাক্সেস করতে কনফিগার করা এক্সটেনশন ব্যবহার করতে চান তখন ExtensionCallout নীতিটি ব্যবহার করুন৷

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

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

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

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

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

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

  • আপনি যদি প্রাইভেট ক্লাউড গ্রাহকের জন্য একজন Apigee এজ হন, true features.allowExtensionsInPostClientFlow সেট করতে আপডেট অর্গানাইজেশন বৈশিষ্ট্য 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-exposed-by-extension</Action>
ডিফল্ট কোনোটিই নয়
উপস্থিতি প্রয়োজন
টাইপ স্ট্রিং

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

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

<সংযোগকারী> উপাদান

ব্যবহার করার জন্য কনফিগার করা এক্সটেনশনের নাম। এটি একটি পরিবেশ-বিস্তৃত নাম যখন এক্সটেনশনটি পরিবেশে স্থাপনার জন্য কনফিগার করা হয়েছিল।

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

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

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

<ইনপুট> উপাদান

JSON-এ এক্সটেনশনে পাঠানোর অনুরোধের মূল অংশ রয়েছে।

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

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

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

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

<Input> উপাদানটির মানটি সুগঠিত JSON যার বৈশিষ্ট্যগুলি আহ্বান করার জন্য এক্সটেনশন অ্যাকশনে পাঠানোর জন্য মানগুলি নির্দিষ্ট করে৷ উদাহরণ স্বরূপ, Google ক্লাউড লগিং এক্সটেনশন এক্সটেনশনের 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> -এর বিষয়বস্তুকে একটি বার্তা টেমপ্লেট হিসেবে বিবেচনা করা হয়। এর মানে হল যে কোঁকড়া ধনুর্বন্ধনীতে মোড়ানো একটি ভেরিয়েবলের নাম রানটাইমে রেফারেন্সড ভেরিয়েবলের মান দিয়ে প্রতিস্থাপিত হবে।

উদাহরণস্বরূপ, API প্রক্সি কলকারী ক্লায়েন্টের IP ঠিকানা পেতে client.ip ফ্লো ভেরিয়েবল ব্যবহার করতে আপনি পূর্ববর্তী <Input> ব্লকটি পুনরায় লিখতে পারেন:

<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>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 প্রতিক্রিয়া থাকে। (যদি আপনি চান, আপনি এখনও জাভাস্ক্রিপ্ট নীতি ব্যবহার করে একটি পৃথক ধাপে প্রতিক্রিয়া মান পার্স করতে পারেন।)

<আউটপুট> বৈশিষ্ট্য

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

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

কোনোটিই নয়।

ত্রুটি কোড

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

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

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

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

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

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

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

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