এক্সট্রাক্ট ভেরিয়েবল নীতি

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

কী

ExtractVariables পলিসিটি কোনো রিকোয়েস্ট বা রেসপন্স থেকে কন্টেন্ট এক্সট্র্যাক্ট করে এবং সেই কন্টেন্টকে একটি ভ্যারিয়েবলের মান হিসেবে সেট করে। আপনি মেসেজের যেকোনো অংশ এক্সট্র্যাক্ট করতে পারেন, যার মধ্যে হেডার, URI পাথ, JSON/XML পেলোড, ফর্ম প্যারামিটার এবং কোয়েরি প্যারামিটার অন্তর্ভুক্ত। এই পলিসিটি মেসেজ কন্টেন্টের উপর একটি টেক্সট প্যাটার্ন প্রয়োগ করে কাজ করে এবং কোনো মিল খুঁজে পেলে, নির্দিষ্ট মেসেজ কন্টেন্ট দিয়ে একটি ভ্যারিয়েবল সেট করে দেয়।

যদিও আপনি প্রায়শই কোনো অনুরোধ বা প্রতিক্রিয়া বার্তা থেকে তথ্য বের করার জন্য এই পলিসিটি ব্যবহার করেন, তবে আপনি এটি অন্যান্য উৎস থেকেও তথ্য বের করতে ব্যবহার করতে পারেন, যার মধ্যে AccessEntity পলিসি দ্বারা তৈরি এনটিটি, XML অবজেক্ট বা JSON অবজেক্ট অন্তর্ভুক্ত।

নির্দিষ্ট বার্তার বিষয়বস্তু বের করার পর, আপনি অনুরোধ ও প্রতিক্রিয়া প্রক্রিয়াকরণের অংশ হিসেবে অন্যান্য পলিসিতে ভেরিয়েবলটি উল্লেখ করতে পারেন।

ভিডিও

ExtractVariables পলিসি সম্পর্কে আরও জানতে নিম্নলিখিত ভিডিওগুলো দেখুন।

ভিডিও বর্ণনা
XML পেলোড থেকে ভেরিয়েবল বের করুন এক্সট্র্যাক্ট ভ্যারিয়েবল পলিসি ব্যবহার করে একটি এক্সএমএল পেলোড থেকে ভ্যারিয়েবল এক্সট্র্যাক্ট করুন।
JSON পেলোড থেকে ভেরিয়েবল বের করুন এক্সট্র্যাক্ট ভ্যারিয়েবল পলিসি ব্যবহার করে একটি JSON পেলোড থেকে ভ্যারিয়েবলগুলো বের করুন।
প্যারামিটার থেকে ভেরিয়েবল বের করুন কোয়েরি, হেডার, ফর্ম বা ইউআরআই প্যারামিটারের মতো প্যারামিটারগুলো থেকে ভেরিয়েবল বের করুন।
বহু-মান পরামিতি থেকে ভেরিয়েবল বের করুন বহু-মান পরামিতি থেকে চলক নিষ্কাশন করুন।
কোয়েরি প্যারামিটার থেকে ভেরিয়েবল বের করুন (ক্লাসিক এজ) ক্লাসিক এজ UI ব্যবহার করে কোয়েরি প্যারামিটার থেকে ভেরিয়েবল বের করুন।
XML বা JSON পেলোড থেকে ভেরিয়েবল বের করুন (ক্লাসিক এজ) ক্লাসিক এজ UI ব্যবহার করে XML বা JSON পেলোড থেকে ভেরিয়েবল বের করুন।

নমুনা

এই পলিসি কোডের নমুনাগুলো দেখায় কিভাবে নিম্নলিখিত ধরণের আর্টিফ্যাক্টগুলো থেকে ভেরিয়েবল বের করতে হয়:

গিটহাব

এই লিঙ্কগুলো কার্যকরী এপিআই প্রক্সি স্যাম্পলের দিকে নির্দেশ করে, যা আপনি Edge-এ ডেপ্লয় ও রান করতে পারবেন। এগুলো ExtractVariables ব্যবহার করে এবং GitHub-এ Apigee-র api-platform-samples রিপোজিটরিতে অবস্থিত। README-গুলোতে ব্যাখ্যা করা আছে যে প্রতিটি ক্ষেত্রে ExtractVariables কীভাবে ব্যবহৃত হয় এবং প্রতিটি স্যাম্পল কীভাবে ডেপ্লয় ও রান করতে হয়।

ইউআরআই

<ExtractVariables name="ExtractVariables-1">
   <DisplayName>Extract a portion of the url path</DisplayName>
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/accounts/{id}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

উপরের নমুনা পলিসি কোডটি বিবেচনা করুন। <URIPath> এলিমেন্টটি ExtractVariables পলিসিকে URI পাথ থেকে তথ্য এক্সট্র্যাক্ট করতে নির্দেশ দেয়। <Pattern> এলিমেন্টটি URI পাথে প্রয়োগ করার জন্য প্যাটার্নটি নির্দিষ্ট করে। প্যাটার্নটিকে একটি সাধারণ টেমপ্লেট হিসেবে গণ্য করা হয়, যেখানে কার্লি ব্র্যাকেটগুলো URI পাথের পরিবর্তনশীল অংশকে নির্দেশ করে।

যে ভেরিয়েবলটি সেট করা হবে তার নাম <VariablePrefix> এলিমেন্টে নির্দিষ্ট করা মান এবং <Pattern> এলিমেন্টে কার্লি ব্র্যাকেট {} এর মধ্যে থাকা মান দ্বারা নির্ধারিত হয়। এই দুটি মানকে মাঝখানে একটি ডট দিয়ে যুক্ত করা হয়, যার ফলে উদাহরণস্বরূপ urirequest.id এর মতো একটি ভেরিয়েবলের নাম তৈরি হয়। যদি কোনো <VariablePrefix> এলিমেন্ট না থাকে, তাহলে ভেরিয়েবলের নামটি কেবল কার্লি ব্র্যাকেটের মধ্যে থাকা মানটিই হয়।

উপরের নমুনা পলিসি কোডটি নিম্নলিখিত আগত অনুরোধের সাথে কাজ করছে বলে বিবেচনা করুন:

GET http://org1-test.apigee.net/svc1/accounts/12797282

ধরা যাক, এপিআই প্রক্সির বেসপাথ হলো /svc1 । যখন Apigee Edge এই আগত অনুরোধের উপর উপরের ExtractVariables পলিসি কোডটি প্রয়োগ করে, তখন এটি urirequest.id ভেরিয়েবলটির মান 12797282 সেট করে। Apigee Edge পলিসিটি কার্যকর করার পর, প্রসেসিং ফ্লো-এর পরবর্তী পলিসি বা কোড urirequest.id নামের ভেরিয়েবলটি থেকে 12797282 স্ট্রিং মানটি পেতে পারে।

উদাহরণস্বরূপ, নিম্নলিখিত AssignMessage পলিসিটি একটি নতুন অনুরোধ বার্তার পেলোডে সেই ভেরিয়েবলের মান এম্বেড করে:

<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignPayload">
 <DisplayName>AssignPayload</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <IdExtractedFromURI>{urirequest.id}</IdExtractedFromURI>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
</AssignMessage>

কোয়েরি প্যারামিটার

<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="code">
      <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

উপরের নমুনা পলিসি কোডটি নিম্নলিখিত আগত অনুরোধের সাথে কাজ করছে বলে বিবেচনা করুন:

GET http://org1-test.apigee.net/accounts/12797282?code=DBN88271

যখন Apigee Edge এই আগত অনুরোধটিতে উপরের ExtractVariables পলিসি কোডটি প্রয়োগ করে, তখন এটি queryinfo.dbncode ভেরিয়েবলটির মান 88271 সেট করে। Apigee Edge পলিসিটি কার্যকর করার পর, প্রসেসিং ফ্লো-এর পরবর্তী পলিসি বা কোড queryinfo.dbncode নামের ভেরিয়েবলটি থেকে 88271 স্ট্রিং ভ্যালুটি পেতে পারে।

আপনি এখন আপনার প্রক্সিতে queryinfo.dbncode ভেরিয়েবলটি অ্যাক্সেস করতে পারবেন। উদাহরণস্বরূপ, নিম্নলিখিত AssignMessage পলিসিটি এটিকে রিকোয়েস্টের পেলোডে কপি করে:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetQP</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractQP>{queryinfo.dbncode}</ExtractQP>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

একাধিক প্যারামিটার

<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="w">
      <Pattern ignoreCase="true">{firstWeather}</Pattern>
   </QueryParam>
   <QueryParam name="w.2">
     <Pattern ignoreCase="true">{secondWeather}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

ধরা যাক, আপনার এপিআই ডিজাইন আপনাকে একই নামের একাধিক কোয়েরি প্যারামিটার নির্দিষ্ট করার সুযোগ দেয়। আপনি এই পলিসি ব্যবহার করে 'w' কোয়েরি প্যারামিটারের একাধিক ইনস্ট্যান্সের মান বের করতে পারেন। ExtractVariables পলিসিতে এই কোয়েরি প্যারামিটারগুলোকে রেফারেন্স করার জন্য, আপনি ইনডেক্স ব্যবহার করেন, যেখানে কোয়েরি প্যারামিটারের প্রথম ইনস্ট্যান্সটির কোনো ইনডেক্স নেই, দ্বিতীয়টি ইনডেক্স ২-এ, তৃতীয়টি ইনডেক্স ৩-এ, ইত্যাদি।

উপরের নমুনা পলিসি কোডটি নিম্নলিখিত আগত অনুরোধের সাথে কাজ করছে বলে বিবেচনা করুন:

GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago

যখন Apigee Edge এই আগত অনুরোধে উপরের ExtractVariables পলিসি কোডটি প্রয়োগ করে, তখন এটি queryinfo.firstWeather ভেরিয়েবলটির মান Boston এবং queryInfo.secondWeather ভেরিয়েবলটির মান Chicago সেট করে দেয়।

আপনি এখন আপনার প্রক্সিতে queryinfo.firstWeather এবং queryinfo.secondWeather ভেরিয়েবলগুলো অ্যাক্সেস করতে পারবেন। উদাহরণস্বরূপ, নিম্নলিখিত AssignMessage পলিসিটি এটিকে রিকোয়েস্টের পেলোডে কপি করে:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetQP</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1>
    <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

হেডার

<ExtractVariables name='ExtractVariable-OauthToken'>
  <Source>request</Source>
  <Header name="Authorization">
    <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
  </Header>
  <VariablePrefix>clientrequest</VariablePrefix>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

ধরা যাক, আপনার API OAuth v2.0 বেয়ারার টোকেন ব্যবহার করে। উপরের নমুনা পলিসি কোডটি বিবেচনা করুন, যা এমন একটি OAuth v2.0 টোকেন বহনকারী অনুরোধের সাথে কাজ করছে, যেটিতে এই ধরনের একটি হেডার অন্তর্ভুক্ত রয়েছে: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

এপিআই ডিজাইনার হিসেবে, ধরুন আপনি ক্যাশ লুকআপে একটি কী (key) হিসেবে টোকেন ভ্যালুটি ব্যবহার করতে চান (পুরো হেডারটি নয়)। টোকেনটি এক্সট্র্যাক্ট করার জন্য আপনি উপরের ExtractVariables পলিসি কোডটি ব্যবহার করতে পারেন।

যখন Apigee Edge উপরের ExtractVariables পলিসি কোডটি এই হেডারে প্রয়োগ করে, তখন এটি clientrequest.oauthtoken ভেরিয়েবলটিকে TU08xptfFfeM7aS0xHqlxTgEAdAM -এ সেট করবে।

আপনি এখন আপনার প্রক্সিতে clientrequest.oauthtoken ভেরিয়েবলটি অ্যাক্সেস করতে পারবেন। উদাহরণস্বরূপ, নিম্নলিখিত AssignMessage পলিসিটি এটিকে রিকোয়েস্টের পেলোডে কপি করে:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetHeader</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractHeader>{clientrequest.oauthtoken}</ExtractHeader>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

JSON

<ExtractVariables name="ExtractVariables-3">
   <Source>response</Source>
   <JSONPayload>
      <Variable name="latitude" type="float">
         <JSONPath>$.results[0].geometry.location.lat</JSONPath>
      </Variable>
      <Variable name="longitude" type="float">
         <JSONPath>$.results[0].geometry.location.lng</JSONPath>
      </Variable>
   </JSONPayload>
   <VariablePrefix>geocoderesponse</VariablePrefix>
</ExtractVariables>
<JSONPayload> $

নিম্নলিখিত JSON প্রতিক্রিয়া পেলোডটি বিবেচনা করুন:

{
  "results": [{
    "geometry": {
      "location": {
        "lat": 37.42291810,
        "lng": -122.08542120
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "northeast": {
          "lat": 37.42426708029149,
          "lng": -122.0840722197085
        },
        "southwest": {
          "lat": 37.42156911970850,
          "lng": -122.0867701802915
        }
      }
    }
  }]
}

যখন Apigee Edge এই JSON মেসেজটিতে উপরের ExtractVariables পলিসি কোডটি প্রয়োগ করে, তখন এটি geocoderesponse.latitude এবং geocoderesponse.longitude নামে দুটি ভ্যারিয়েবল সেট করে। উভয় ভ্যারিয়েবলই geocoderesponse এর একই ভ্যারিয়েবল প্রিফিক্স ব্যবহার করে। এই ভ্যারিয়েবলগুলোর সাফিক্স <Variable> এলিমেন্টের name অ্যাট্রিবিউটের মাধ্যমে স্পষ্টভাবে নির্দিষ্ট করা থাকে।

geocoderesponse.latitude ভ্যারিয়েবলটির মান হয় 37.42291810geocoderesponse.longitude ভ্যারিয়েবলটির মান হয় -122.08542120

আপনি এখন আপনার প্রক্সিতে geocoderesponse.latitude ভেরিয়েবলটি অ্যাক্সেস করতে পারবেন। উদাহরণস্বরূপ, নিম্নলিখিত AssignMessage পলিসিটি এটিকে রেসপন্সের 'latitude' নামের একটি হেডারে কপি করে:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
  <DisplayName>GetJSONVar</DisplayName>
  <Add>
    <Headers>
      <Header name="latitude">{geocoderesponse.latitude}</Header>
    </Headers>
  </Add>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

এক্সএমএল

<ExtractVariables name="ExtractVariables-4">
   <Source>response</Source>
   <XMLPayload>
      <Namespaces>
         <Namespace prefix="dir">urn:43BFF88D-D204-4427-B6BA-140AF393142F</Namespace>
      </Namespaces>
      <Variable name="travelmode" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/@mode</XPath>
      </Variable>
      <Variable name="duration" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:value</XPath>
      </Variable>
      <Variable name="timeunit" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:text</XPath>
      </Variable>
   </XMLPayload>
   <VariablePrefix>directionsresponse</VariablePrefix>
</ExtractVariables>
<XMLPayload>

নিম্নলিখিত XML প্রতিক্রিয়া পেলোডটি বিবেচনা করুন:

<Directions xmlns="urn:43BFF88D-D204-4427-B6BA-140AF393142F">
   <status>OK</status>
   <route>
      <summary>I-40 W</summary>
      <leg>
         <step mode="DRIVING">
            <start_location>
               <lat>41.8507300</lat>
               <lng>-87.6512600</lng>
            </start_location>
            <end_location>
               <lat>41.8525800</lat>
               <lng>-87.6514100</lng>
            </end_location>
            <duration>
                <value>19</value>
                <text>minutes</text>
            </duration>
         </step>
      </leg>
   </route>
</Directions>

যখন Apigee Edge এই XML মেসেজটিতে উপরের ExtractVariables পলিসি কোডটি প্রয়োগ করে, তখন এটি তিনটি ভ্যারিয়েবল সেট করে: directionsresponse.travelmode, directionsresponse.duration , এবং directionsresponse.timeunit । সবগুলো ভ্যারিয়েবলই directionsresponse নামক একই ভ্যারিয়েবল প্রিফিক্স ব্যবহার করে। এই ভ্যারিয়েবলগুলোর সাফিক্স <Variable> এলিমেন্টের name অ্যাট্রিবিউটের মাধ্যমে স্পষ্টভাবে নির্দিষ্ট করে দেওয়া হয়।

directionsresponse.travelmode ভেরিয়েবলটির মান DRIVING হয়। directionsresponse.duration ভেরিয়েবলটির মান 19 হয়। directionsresponse.timeunit ভেরিয়েবলটির মান minutes হয়।

আপনি এখন আপনার প্রক্সিতে directionresponse.travelmode ভেরিয়েবলটি অ্যাক্সেস করতে পারবেন। উদাহরণস্বরূপ, নিম্নলিখিত AssignMessage পলিসিটি এটিকে রেসপন্সের 'tmode' নামের একটি হেডারে কপি করে:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
  <DisplayName>GetXMLVar</DisplayName>
  <Add>
    <Headers>
      <Header name="tmode">{directionsresponse.travelmode}</Header>
    </Headers>
  </Add>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

এপিআই ডেভেলপাররা এমন এপিআই প্রক্সি তৈরি করেন যা মেসেজের বিষয়বস্তু, যেমন হেডার, ইউআরআই পাথ, পেলোড এবং কোয়েরি প্যারামিটারের ওপর ভিত্তি করে ভিন্নভাবে আচরণ করে। প্রায়শই, প্রক্সিটি কোনো কন্ডিশন স্টেটমেন্টে ব্যবহারের জন্য এই বিষয়বস্তুর কিছু অংশ নিষ্কাশন করে। এটি করার জন্য ExtractVariables পলিসি ব্যবহার করুন।

ExtractVariables পলিসি নির্ধারণ করার সময়, আপনি বেছে নিতে পারেন:

  • যে ভেরিয়েবলগুলো সেট করতে হবে তাদের নাম
  • ভেরিয়েবলগুলির উৎস
  • কতগুলি ভেরিয়েবল বের করে সেট করতে হবে

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

কন্টেন্ট-ভিত্তিক অ্যানালিটিক্স রিপোর্ট তৈরি করতে ExtractVariables কীভাবে ব্যবহার করা যায় তা দেখতে, “কাস্টম অ্যানালিটিক্স ব্যবহার করে এপিআই বার্তার কন্টেন্ট বিশ্লেষণ করুন” দেখুন।

পরিধি

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

  • প্রিফ্লো: প্রক্সিএন্ডপয়েন্ট এবং টার্গেটএন্ডপয়েন্ট (অনুরোধ এবং প্রতিক্রিয়া)
  • পোস্টফ্লো: প্রক্সিএন্ডপয়েন্ট এবং টার্গেটএন্ডপয়েন্ট (অনুরোধ এবং প্রতিক্রিয়া)
  • PostClientFlow: ProxyEndpoint (শুধুমাত্র প্রতিক্রিয়া, মেসেজ লগিং নীতি ব্যবহার করে)
  • ত্রুটি প্রবাহ

মিলকরণ এবং ভেরিয়েবল তৈরি সম্পর্কে

ExtractVariables পলিসিটি কোনো অনুরোধ বা প্রতিক্রিয়া থেকে তথ্য সংগ্রহ করে এবং সেই তথ্য একটি ভেরিয়েবলে লিখে রাখে। আপনি যে ধরনের তথ্য সংগ্রহ করতে পারেন, যেমন URI পাথ বা XML ডেটা, তার প্রত্যেকটির জন্য আপনাকে মেলানোর প্যাটার্ন এবং সংগৃহীত তথ্য ধারণ করার জন্য ব্যবহৃত ভেরিয়েবলের নাম নির্দিষ্ট করে দিতে হয়।

তবে, প্যাটার্ন ম্যাচিং কীভাবে কাজ করে তা তথ্য নিষ্কাশনের উৎসের উপর নির্ভর করে। নিম্নলিখিত বিভাগগুলিতে তথ্যের দুটি মৌলিক বিভাগ বর্ণনা করা হয়েছে যা আপনি নিষ্কাশন করতে পারেন।

URI পাথ, কোয়েরি প্যারামিটার, হেডার, ফর্ম প্যারামিটার এবং ভেরিয়েবল মেলানো

URI পাথ, কোয়েরি প্যারামিটার, হেডার, ফর্ম প্যারামিটার এবং ভেরিয়েবল থেকে তথ্য বের করার সময়, এক বা একাধিক ম্যাচ করার প্যাটার্ন নির্দিষ্ট করতে <Pattern> ট্যাগ ব্যবহার করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত পলিসি উদাহরণটি URI পাথের জন্য একটি একক ম্যাচিং প্যাটার্ন দেখাচ্ছে:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

এই উদাহরণে, urirequest.pathSeg ভেরিয়েবলটি proxy.pathsuffix-এর "/a/"-এর পরে যা কিছু থাকে, তা দিয়ে সেট করা হয়। উদাহরণস্বরূপ, ধরুন আপনার API প্রক্সির বেস পাথ হলো /basepath/v1http://myCo.com/basepath/v1/a/b- তে একটি ইনবাউন্ড রিকোয়েস্ট এলে ভেরিয়েবলটি "b" দিয়ে সেট করা হয়।

একাধিক প্যাটার্ন নির্দিষ্ট করা

আপনি <Pattern> ট্যাগ অনুযায়ী একাধিক প্যাটার্ন নির্দিষ্ট করতে পারেন, যেখানে:

  • সমস্ত প্যাটার্ন মিলছে কিনা তা পরীক্ষা করা হয়।
  • যদি কোনো প্যাটার্নই না মেলে, তাহলে পলিসিটি কোনো কাজ করে না এবং ভেরিয়েবলটি তৈরি হয় না।
  • যদি একাধিক প্যাটার্ন মিলে যায়, তবে দীর্ঘতম পথ খণ্ডযুক্ত প্যাটার্নটি নিষ্কাশনের জন্য ব্যবহার করা হয়।
  • যদি দুটি মিলে যাওয়া প্যাটার্নের দীর্ঘতম পাথ সেগমেন্ট একই হয়, তাহলে এক্সট্র্যাকশনের জন্য পলিসিতে প্রথমে নির্দিষ্ট করা প্যাটার্নটি ব্যবহার করা হয়।

পরবর্তী উদাহরণে, আপনি এমন একটি পলিসি তৈরি করবেন যাতে URI পাথের জন্য তিনটি মিলে যাওয়া প্যাটার্ন রয়েছে:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

ধরা যাক, /basepath/v1 বেসপাথযুক্ত একটি এপিআই প্রক্সির ক্ষেত্রে, এপিআই প্রক্সিতে আসা ইনবাউন্ড রিকোয়েস্ট ইউআরএলটি এই ধরনের হয়ে থাকে:

http://myCo.com/basepath/v1/a/b

এই উদাহরণে, প্রথম প্যাটার্নটি URI-এর সাথে মেলে এবং urirequest.pathSeg ভেরিয়েবলটির মান "b" সেট করা হয়েছে।

যদি অনুরোধ URL হয়:

http://myCo.com/basepath/v1/a/b/c/d

...তারপর তৃতীয় প্যাটার্নটি মিলে যায় এবং urirequest.pathSeg ভেরিয়েবলটির মান "d" সেট করা হয়।

একাধিক ভেরিয়েবল দিয়ে প্যাটার্ন নির্দিষ্ট করা

আপনি ম্যাচিং প্যাটার্নে একাধিক ভেরিয়েবল নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, আপনি দুটি ভেরিয়েবল সহ একটি ম্যাচিং প্যাটার্ন নির্দিষ্ট করেন:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/{pathSeg1}/c/{pathSeg2}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

আবার ধরে নিই, একটি এপিআই প্রক্সির বেস পাথ হলো /basepath/v1 , তাহলে ইনবাউন্ড রিকোয়েস্ট ইউআরএলটি হবে:

http://myCo.com/basepath/v1/a/b/c/d

... urirequest.pathSeg1 ভেরিয়েবলটির মান 'b' এবং urirequest.pathSeg2 ভেরিয়েবলটির মান 'd' সেট করা হয়েছে।

প্যাটার্নে একাধিক দৃষ্টান্ত মেলানো

একই নামের কোনো আইটেমের একাধিক উপস্থিতি থাকলেও আপনি প্যাটার্ন মেলাতে পারেন। উদাহরণস্বরূপ, আপনি এমন একটি অনুরোধ করতে পারেন যাতে একই নামের একাধিক কোয়েরি প্যারামিটার বা একাধিক হেডার থাকে। নিম্নলিখিত অনুরোধটিতে "w" নামের দুটি কোয়েরি প্যারামিটার রয়েছে:

http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2

ExtractVariables পলিসিতে এই কোয়েরি প্যারামিটারগুলোকে রেফারেন্স করতে ইনডেক্স ব্যবহার করা হয়, যেখানে কোয়েরি প্যারামিটারের প্রথম ইনস্ট্যান্সটির কোনো ইনডেক্স থাকে না, দ্বিতীয়টি ইনডেক্স ২-এ, তৃতীয়টি ইনডেক্স ৩-এ, ইত্যাদি। উদাহরণস্বরূপ, নিম্নলিখিত পলিসিটি রিকোয়েস্ট থেকে 'w' নামের দ্বিতীয় কোয়েরি প্যারামিটারের মান এক্সট্র্যাক্ট করে:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <QueryParam name="w.2">
      <Pattern ignoreCase="true">{secondW}</Pattern>
   </QueryParam>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

urirequest.secondW ভেরিয়েবলটির মান "2" সেট করা হয়। যদি অনুরোধ থেকে দ্বিতীয় কোয়েরি প্যারামিটারটি বাদ দেওয়া হয়, তাহলে urirequest.secondW ভেরিয়েবলটি খালি থাকে। অনুরোধে একই নামের একাধিক আইটেম থাকলে ইনডেক্সিং ব্যবহার করুন।

প্যাটার্নে বিশেষ অক্ষর ব্যবহার করা

URI পাথ মেলানোর সময়, আপনি প্যাটার্নে "*" এবং "**" ওয়াইল্ডকার্ড অক্ষর ব্যবহার করতে পারেন, যেখানে:

  • "*" চিহ্নটি পাথের যেকোনো একটি অংশকে নির্দেশ করে।
  • "**" পাথের একাধিক অংশকে মেলায়।

উদাহরণস্বরূপ, আপনি <URIPath> এলিমেন্টে প্যাটার্নগুলো নিচে দেখানো উপায়ে নির্দিষ্ট করেন:

<URIPath>
  <Pattern ignoreCase="true">/a/*/{id}</Pattern>
  <Pattern ignoreCase="true">/a/**/{id}</Pattern>
</URIPath>

প্রথম প্যাটার্নটি পাথসাফিক্স (বেসপ্যাথের পরে URI পাথের অংশ) সহ অনুরোধগুলির সাথে মেলে, যেমন "/a/b/c", "/a/foo/bar", ইত্যাদি। দ্বিতীয় প্যাটার্নটি "/a/"-এর পরে যেকোনো সংখ্যক পাথ সেগমেন্টের সাথে মেলে, যেমন "/a/foo/bar/baz/c", সেইসাথে "/a/b/c" এবং "/a/foo/bar"-এর সাথেও মেলে।

কোয়েরি প্যারামিটার, হেডার এবং ফর্ম প্যারামিটারে প্যাটার্ন নির্দিষ্ট করার সময়, "*" চিহ্নটি যেকোনো সংখ্যক অক্ষর মেলানোর জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি হেডার মেলানোর সময়, প্যাটার্নটি এভাবে নির্দিষ্ট করুন:

*;charset={encoding}

এই প্যাটার্নটি "text/xml;charset=UTF-16" এবং "application/xml;charset=ASCII" মানগুলোর সাথে মেলে।

ExtractVariables পলিসিতে পাঠানো ভ্যালুতে যদি "{"-এর মতো কোনো বিশেষ ক্যারেক্টার থাকে, তবে সেটিকে এস্কেপ করার জন্য "%" ক্যারেক্টারটি ব্যবহার করুন। নিচের উদাহরণটিতে প্যাটার্নের মধ্যে থাকা "{" এবং "}" ক্যারেক্টারগুলোকে এস্কেপ করা হয়েছে, কারণ এগুলো কোয়েরি প্যারামিটারের ভ্যালুতে আক্ষরিক ক্যারেক্টার হিসেবে ব্যবহৃত হয়েছে:

<QueryParam>
  <Pattern ignoreCase="true">%{user%} {name}</Pattern>
</QueryParam>

এই উদাহরণে, প্যাটার্নটি "{user} Steve" মানটির সাথে মেলে, কিন্তু "user Steve" মানটির সাথে মেলে না।

JSON এবং XML মেলানো

JSON এবং XML থেকে ডেটা এক্সট্র্যাক্ট করার সময়, আপনাকে পলিসিতে এক বা একাধিক <Variable> ট্যাগ উল্লেখ করতে হয়। <Variable> ট্যাগটি সেই ডেস্টিনেশন ভেরিয়েবলের নাম নির্দিষ্ট করে যেখানে এক্সট্র্যাক্ট করা তথ্য সংরক্ষণ করা হয়, এবং এক্সট্র্যাক্ট করা তথ্যের JsonPath (JSON) বা XPATH (XML) নির্দেশ করে।

পলিসির সমস্ত <Variable> ট্যাগ মূল্যায়ন করা হয়, ফলে আপনি একটিমাত্র পলিসি থেকেই একাধিক ভেরিয়েবল পূরণ করতে পারেন। যদি <Variable> ট্যাগটি JSON বা XML-এর কোনো বৈধ ফিল্ড হিসেবে মূল্যায়ন না হয়, তাহলে সংশ্লিষ্ট ভেরিয়েবলটি তৈরি করা হয় না।

নিম্নলিখিত উদাহরণটি একটি ExtractVariables পলিসি দেখায় যা একটি রেসপন্সের JSON বডি থেকে দুটি ভেরিয়েবল পূরণ করে:

<ExtractVariables name="ExtractVariables-3">
   <Source>response</Source>
   <JSONPayload>
      <Variable name="latitude" type="float">
         <JSONPath>$.results[0].geometry.location.lat</JSONPath>
      </Variable>
      <Variable name="longitude" type="float">
         <JSONPath>$.results[0].geometry.location.lng</JSONPath>
      </Variable>
   </JSONPayload>
   <VariablePrefix>geocoderesponse</VariablePrefix>
</ExtractVariables>

একই ভেরিয়েবলে একাধিক জায়গায় লেখা

সেট করার জন্য ভেরিয়েবলের নাম বাছাই করার সময় সতর্ক থাকুন। পলিসিটি প্রথম এক্সট্র্যাকশন প্যাটার্ন থেকে শেষটি পর্যন্ত ক্রমানুসারে কার্যকর হয়। যদি পলিসিটি একাধিক স্থান থেকে একই ভেরিয়েবলে কোনো মান লেখে, তবে পলিসির সর্বশেষ লেখাটিই ভেরিয়েবলটির মান নির্ধারণ করবে। (হয়তো আপনি এটাই চান।)

উদাহরণস্বরূপ, আপনি এমন একটি টোকেন মান বের করতে চান যা কোয়েরি প্যারামিটার বা হেডারে পাঠানো যেতে পারে, যেমনটি নিচে দেখানো হয়েছে:

<!-- If token only in query param, the query param determines the value.
     If token is found in both the query param and header, header sets value. -->
<QueryParam name="token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</QueryParam>

<!-- Overwrite tokenValue even if it was found in query parameter. -->
<Header name="Token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</Header>

যখন কোন মিল হয় না তখন কী ঘটবে তা নিয়ন্ত্রণ করা

প্যাটার্নটি না মিললে, সংশ্লিষ্ট ভেরিয়েবলটি তৈরি হয় না। ফলে, অন্য কোনো পলিসি যদি ভেরিয়েবলটিকে রেফারেন্স করে, তবে তা একটি ত্রুটির কারণ হতে পারে।

একটি উপায় হলো, যে পলিসিটি ভেরিয়েবলটিকে রেফারেন্স করে, সেখানে <IgnoreUnresolvedVariables> কে true তে সেট করা, যাতে পলিসিটি যেকোনো সমাধান-অযোগ্য ভেরিয়েবলকে একটি খালি স্ট্রিং (null) হিসেবে গণ্য করে।

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

উপাদান রেফারেন্স

এলিমেন্ট রেফারেন্সটি ExtractVariables পলিসির উপাদান এবং অ্যাট্রিবিউটগুলো বর্ণনা করে।

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
   <DisplayName>Extract Variables 1</DisplayName>
   <Source clearPayload="true|false">request</Source>
   <VariablePrefix>myprefix</VariablePrefix>
   <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
   <URIPath>
      <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   </URIPath>
   <QueryParam name="code">
      <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
   </QueryParam>
   <Header name="Authorization">
      <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
   </Header>
   <FormParam name="greeting">
      <Pattern>hello {user}</Pattern>
   </FormParam>
   <Variable name="request.content">
       <Pattern>hello {user}</Pattern>
   </Variable>
   <JSONPayload>
      <Variable name="name">
         <JSONPath>{example}</JSONPath>
      </Variable>
   </JSONPayload>
   <XMLPayload stopPayloadProcessing="false">
      <Namespaces/>
      <Variable name="name" type="boolean">
         <XPath>/test/example</XPath>
      </Variable>
   </XMLPayload>
</ExtractVariables>

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

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">

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

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
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 বৈশিষ্ট্যের মান ব্যবহার করা হবে।

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

<উৎস> উপাদান

(ঐচ্ছিক) যে ভেরিয়েবলটি পার্স করা হবে তা নির্দিষ্ট করে। <Source> এর ডিফল্ট মান হলো messagemessage এর মানটি প্রসঙ্গ-সংবেদনশীল। একটি রিকোয়েস্ট ফ্লো-তে, message রিকোয়েস্ট মেসেজে রূপান্তরিত হয়। একটি রেসপন্স ফ্লো-তে, message রেসপন্স মেসেজে রূপান্তরিত হয়।

যদিও আপনি প্রায়শই কোনো অনুরোধ বা প্রতিক্রিয়া বার্তা থেকে তথ্য বের করার জন্য এই পলিসিটি ব্যবহার করেন, আপনি এটি যেকোনো ভেরিয়েবল থেকে তথ্য বের করতেও ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি এটি AccessEntity পলিসি দ্বারা তৈরি কোনো এনটিটি থেকে, Service Callout পলিসি দ্বারা ফেরত আসা ডেটা থেকে, অথবা কোনো XML বা JSON অবজেক্ট থেকে তথ্য বের করতে ব্যবহার করতে পারেন।

যদি <Source> সমাধান করা না যায়, অথবা এটি কোনো বার্তা-বহির্ভূত প্রকারে সমাধান হয়, তাহলে পলিসিটি সাড়া দিতে ব্যর্থ হবে।

<Source clearPayload="true|false">request</Source>
ডিফল্ট: বার্তা
উপস্থিতি: ঐচ্ছিক
প্রকার: স্ট্রিং

বৈশিষ্ট্য

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

<Source>-এ নির্দিষ্ট করা পেলোড থেকে ডেটা এক্সট্র্যাক্ট করার পর তা মুছে ফেলতে চাইলে, এটিকে true- তে সেট করুন।

ExtractVariables কার্যকর হওয়ার পর যদি উৎস বার্তাটির আর প্রয়োজন না হয়, শুধুমাত্র তখনই <clearPayload> বিকল্পটি ব্যবহার করুন। এটিকে ' true' সেট করলে বার্তাটি দ্বারা ব্যবহৃত মেমরি মুক্ত হয়ে যায়।

মিথ্যা

ঐচ্ছিক বুলিয়ান

<VariablePrefix> উপাদান

(ঐচ্ছিক) সম্পূর্ণ ভেরিয়েবলের নামটি তৈরি করা হয় <VariablePrefix> , একটি ডট এবং <Pattern> বা <Variable> এলিমেন্টের মধ্যে {কার্লি ব্র্যাকেটের} ভেতরে আপনার দেওয়া নামটি যুক্ত করে। উদাহরণস্বরূপ: myprefix.id , myprefix.dbncode , বা myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

উদাহরণস্বরূপ, ধরা যাক name-এর মান হলো 'user'।

  • যদি <VariablePrefix> নির্দিষ্ট করা না থাকে, তাহলে নিষ্কাশিত মানগুলি user নামের একটি ভেরিয়েবলে বরাদ্দ করা হয়।
  • যদি <VariablePrefix> হিসেবে myprefix নির্দিষ্ট করা হয়, তাহলে নিষ্কাশিত মানগুলো myprefix.user নামের একটি ভেরিয়েবলে বরাদ্দ করা হয়।
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: স্ট্রিং

<IgnoreUnresolvedVariables> উপাদান

(ঐচ্ছিক) যেকোনো সমাধান-অযোগ্য ভেরিয়েবলকে একটি খালি স্ট্রিং (নাল) হিসাবে গণ্য করতে এটিকে ' true সেট করুন। যদি আপনি চান যে কোনো রেফারেন্সকৃত ভেরিয়েবল সমাধান-অযোগ্য হলে পলিসিটি একটি ত্রুটি (error) দেখাবে, তাহলে এটিকে ' false সেট করুন।

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
ডিফল্ট: মিথ্যা
উপস্থিতি: ঐচ্ছিক
প্রকার: বুলিয়ান

যদি কোনো <XMLPayload> এ একটি XPath রেফারেন্স অমীমাংসিত থাকে, তাহলে পলিসিটি নিম্নলিখিত ত্রুটিটি দেখায়:

{
   "fault":{
      "faultstring":"Unresolved xpath path in policy policy_name.",
      "detail":{
         "errorcode":"steps.extractvariables.InvalidXPath"
      }
   }
}

<URIPath> উপাদান

(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের টেবিলের 'Presence' সারিটি দেখুন।) একটি অনুরোধের উৎস বার্তার proxy.pathsuffix থেকে একটি মান বের করে। প্যাটার্নটিতে যে পাথটি প্রয়োগ করা হয় তা হলো proxy.pathsuffix, যার মধ্যে API প্রক্সির বেসপ্যাথ অন্তর্ভুক্ত থাকে না। যদি উৎস বার্তাটি ' response ' ধরনের বার্তায় পরিণত হয়, তাহলে এই এলিমেন্টটি কোনো কাজ করে না।

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
</URIPath>

একাধিক <Pattern> এলিমেন্ট ব্যবহার করা সম্ভব:

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক। তবে, আপনাকে অবশ্যই নিম্নলিখিতগুলির মধ্যে অন্তত একটি অন্তর্ভুক্ত করতে হবে: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> , অথবা <XMLPayload>.
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি প্রকার
উপেক্ষা করুন প্যাটার্ন মেলানোর সময় কেস উপেক্ষা করার নির্দেশ দেয়।

মিথ্যা

ঐচ্ছিক বুলিয়ান

<QueryParam> উপাদান

(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের সারণির 'উপস্থিতি' সারিটি দেখুন।) একটি অনুরোধ উৎস বার্তার নির্দিষ্ট কোয়েরি প্যারামিটার থেকে একটি মান নিষ্কাশন করে। যদি উৎস বার্তাটি ' প্রতিক্রিয়া ' বার্তা প্রকারে সমাধান হয়, তাহলে এই উপাদানটি কিছুই করে না।

<QueryParam name="code">
   <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>

যদি একাধিক কোয়েরি প্যারামিটারের নাম একই হয়, তাহলে প্যারামিটারগুলোকে রেফারেন্স করতে ইনডেক্স ব্যবহার করুন:

<QueryParam name="w.2">
   <Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক। তবে, আপনাকে অবশ্যই নিম্নলিখিতগুলির মধ্যে অন্তত একটি অন্তর্ভুক্ত করতে হবে: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> , অথবা <XMLPayload>.
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি প্রকার
নাম কোয়েরি প্যারামিটারের নাম নির্দিষ্ট করে। যদি একাধিক কোয়েরি প্যারামিটারের নাম একই হয়, তবে ইনডেক্সড রেফারেন্সিং ব্যবহার করুন, যেখানে কোয়েরি প্যারামিটারের প্রথমটির কোনো ইনডেক্স থাকে না, দ্বিতীয়টি ইনডেক্স ২-এ, তৃতীয়টি ইনডেক্স ৩-এ, ইত্যাদি।

প্রযোজ্য নয়

প্রয়োজনীয় স্ট্রিং

<হেডার> উপাদান

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

<!-- The name is the actual header name. -->
<Header name="Authorization">
<!-- Provide a name for your new custom variable here. -->
   <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
</Header>

যদি একাধিক হেডারের নাম একই হয়, তাহলে অ্যারের মধ্যে থাকা স্বতন্ত্র হেডারগুলোকে নির্দেশ করতে ইনডেক্স ব্যবহার করুন:

<Header name="myHeader.2">
   <Pattern ignoreCase="true">{secondHeader}</Pattern>
</Header>

অথবা অ্যারের সমস্ত হেডার তালিকাভুক্ত করতে নিম্নলিখিতটি ব্যবহার করুন:

<Header name="myHeader.values">
   <Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক। তবে, আপনাকে অবশ্যই নিম্নলিখিতগুলির মধ্যে অন্তত একটি অন্তর্ভুক্ত করতে হবে: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> , অথবা <XMLPayload>.
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি প্রকার
নাম যে হেডার থেকে আপনি মানটি বের করবেন, তার নাম নির্দিষ্ট করে। যদি একাধিক হেডারের নাম একই হয়, তাহলে ইনডেক্সড রেফারেন্সিং ব্যবহার করুন, যেখানে হেডারের প্রথমটির কোনো ইনডেক্স থাকে না, দ্বিতীয়টি ইনডেক্স ২-এ, তৃতীয়টি ইনডেক্স ৩-এ, ইত্যাদি। অ্যারের সমস্ত হেডার পেতে .values ​​ব্যবহার করুন।

প্রযোজ্য নয়

প্রয়োজনীয় স্ট্রিং

<ফর্মপ্যারাম> উপাদান

(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের সারণির 'উপস্থিতি' সারিটি দেখুন।) নির্দিষ্ট অনুরোধ বা প্রতিক্রিয়া বার্তার নির্দিষ্ট ফর্ম প্যারামিটার থেকে একটি মান নিষ্কাশন করে। ফর্ম প্যারামিটারগুলি কেবল তখনই নিষ্কাশন করা যাবে যখন নির্দিষ্ট বার্তার ' Content-Type হেডারটি application/x-www-form-urlencoded হবে।

<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক। তবে, আপনাকে অবশ্যই নিম্নলিখিতগুলির মধ্যে অন্তত একটি অন্তর্ভুক্ত করতে হবে: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> , অথবা <XMLPayload>.
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি প্রকার
নাম ফর্ম প্যারামিটারটির নাম, যেখান থেকে আপনি মানটি গ্রহণ করেন।

প্রযোজ্য নয়

প্রয়োজনীয় স্ট্রিং

<পরিবর্তনশীল> উপাদান

(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের সারণির 'উপস্থিতি' সারিটি দেখুন।) এমন একটি ভেরিয়েবলের নাম নির্দিষ্ট করে যেখান থেকে একটি মান বের করতে হবে।

<Variable name="myVar">
    <Pattern>hello {user}</Pattern>
</Variable>

ভেরিয়েবল থেকে দুটি মান বের করতে:

<Variable name="myVar">
   <Pattern>hello {firstName} {lastName}</Pattern>
</Variable>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক। তবে, আপনাকে অবশ্যই নিম্নলিখিতগুলির মধ্যে অন্তত একটি অন্তর্ভুক্ত করতে হবে: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> , অথবা <XMLPayload>.
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি প্রকার
নাম যে ভেরিয়েবল থেকে মানটি বের করতে হবে তার নাম।

প্রযোজ্য নয়

প্রয়োজনীয় স্ট্রিং

<JSONPayload> উপাদান

(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের সারণির 'উপস্থিতি' সারিটি দেখুন।) এটি সেই JSON-ফরম্যাট করা বার্তাটি নির্দিষ্ট করে, যেখান থেকে ভেরিয়েবলের মান নিষ্কাশন করা হবে। JSON নিষ্কাশন শুধুমাত্র তখনই করা হয় যখন বার্তার ' Content-Type' হেডারটি 'application/json' হয়।

<JSONPayload>
   <Variable name="name" type="string">
      <JSONPath>{example}</JSONPath>
   </Variable>
</JSONPayload>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক। তবে, আপনাকে অবশ্যই নিম্নলিখিতগুলির মধ্যে অন্তত একটি অন্তর্ভুক্ত করতে হবে: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> , অথবা <XMLPayload>.
প্রকার: প্রযোজ্য নয়

<JSONPayload>/<Variable> উপাদান

(JSONPayload এলিমেন্টের মধ্যে আবশ্যক।) এটি সেই ভেরিয়েবলকে নির্দিষ্ট করে যেখানে নিষ্কাশিত মানটি বরাদ্দ করা হয়। একাধিক ভেরিয়েবল পূরণ করার জন্য আপনি <JSONPayload> এলিমেন্টের মধ্যে একাধিক <Variable> ট্যাগ অন্তর্ভুক্ত করতে পারেন।

<Variable name="name" type="string">
   <JSONPath>{example}</JSONPath>
</Variable>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: JSONPayload এলিমেন্টের মধ্যে এটি আবশ্যক।
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

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

যে ভেরিয়েবলে নিষ্কাশিত মানটি বরাদ্দ করা হবে, তার নাম নির্দিষ্ট করে।

নাম

প্রয়োজনীয় স্ট্রিং
প্রকার ভেরিয়েবল 'value'-এর ডেটা টাইপ নির্দিষ্ট করে। প্রযোজ্য নয় ঐচ্ছিক

স্ট্রিং। নিম্নলিখিতগুলি থেকে নির্বাচন করুন:

  • স্ট্রিং
  • বুলিয়ান
  • পূর্ণসংখ্যা
  • দীর্ঘ
  • ভাসতে
  • দ্বিগুণ
  • নোডসেট (যা JSON খণ্ডাংশ ফেরত দেয়)

<JSONPayload>/<Variable>/<JSONPath> উপাদান

(JSONPayload:Variable এলিমেন্টের মধ্যে আবশ্যক।) একটি JSON-ফরম্যাট করা বার্তা থেকে মান নিষ্কাশন করতে ব্যবহৃত JSON পাথ নির্দিষ্ট করে।

<Variable name="name">
   <JSONPath>$.rss.channel.title</JSONPath>
</Variable>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: প্রয়োজনীয়
প্রকার: স্ট্রিং

<XMLPayload> উপাদান

(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের সারণির 'Presence' সারিটি দেখুন।) এটি সেই XML-ফরম্যাট করা বার্তাটি নির্দিষ্ট করে যেখান থেকে ভেরিয়েবলের মান নিষ্কাশন করা হবে। XML পেলোডগুলি কেবল তখনই নিষ্কাশন করা হয় যখন বার্তাটির Content-Type হেডারটি text/xml , application/xml , বা application/*+xml হয়।

<XMLPayload stopPayloadProcessing="false">
  <Namespaces>
     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     <Namespace prefix="gmail">http://mail.google.com</Namespace>
  </Namespaces>
  <Variable name="name" type="boolean">
     <XPath>/apigee:test/apigee:example</XPath>
  </Variable>
</XMLPayload>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক। তবে, আপনাকে অবশ্যই নিম্নলিখিতগুলির মধ্যে অন্তত একটি অন্তর্ভুক্ত করতে হবে: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> , অথবা <XMLPayload>.
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

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

একটি ভেরিয়েবল পূরণ হওয়ার পর XPath মূল্যায়ন বন্ধ করতে এটিকে ' true সেট করুন। এর মানে হলো, পলিসি দ্বারা শুধুমাত্র একটি ভেরিয়েবল পূরণ করা হবে।

মিথ্যা

ঐচ্ছিক বুলিয়ান

<XMLPayload>/<Namespaces> উপাদান

(ঐচ্ছিক) XPath মূল্যায়নে ব্যবহৃত নেমস্পেস নির্দিষ্ট করে। যদি আপনি আপনার XPath এক্সপ্রেশনে নেমস্পেস ব্যবহার করেন, তবে আপনাকে অবশ্যই এখানে নেমস্পেসগুলো ঘোষণা করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে।

<XMLPayload stopPayloadProcessing="false">
  <Namespaces>
     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     <Namespace prefix="gmail">http://mail.google.com</Namespace>
  </Namespaces>
  <Variable name="legName" type="string">
    <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
  </Variable>
</XMLPayload>

আপনি যদি আপনার XPath এক্সপ্রেশনে নেমস্পেস ব্যবহার না করেন, তাহলে আপনি <Namespaces> এলিমেন্টটি বাদ দিতে বা কমেন্ট আউট করতে পারেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<XMLPayload stopPayloadProcessing="false">
  <!-- <Namespaces/> -->
  <Variable name="legName" type="string">
    <XPath>/Directions/route/leg/name</XPath>
  </Variable>
</XMLPayload>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: স্ট্রিং

বৈশিষ্ট্য

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

নেমস্পেস প্রিফিক্স।

প্রযোজ্য নয়

প্রয়োজনীয় স্ট্রিং

<XMLPayload>/<Variable> উপাদান

(ঐচ্ছিক) সেই ভেরিয়েবলটি নির্দিষ্ট করে যেখানে নিষ্কাশিত মানটি বরাদ্দ করা হবে।

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

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

যে ভেরিয়েবলে নিষ্কাশিত মানটি বরাদ্দ করা হবে, তার নাম নির্দিষ্ট করে।

নাম

প্রয়োজনীয় স্ট্রিং
প্রকার ভেরিয়েবল 'value'-এর ডেটা টাইপ নির্দিষ্ট করে। বুলিয়ান ঐচ্ছিক

স্ট্রিং। নিম্নলিখিতগুলি থেকে নির্বাচন করুন:

  • স্ট্রিং
  • বুলিয়ান
  • পূর্ণসংখ্যা
  • দীর্ঘ
  • ভাসতে
  • দ্বিগুণ
  • নোডসেট (একটি XML খণ্ড ফেরত দেয়)

<XMLPayload>/<Variable>/<XPath> উপাদান

(XMLPayload:Variable এলিমেন্টের মধ্যে আবশ্যক।) ভেরিয়েবলের জন্য নির্ধারিত XPath নির্দিষ্ট করে। শুধুমাত্র XPath 1.0 এক্সপ্রেশন সমর্থিত।

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>

নেমস্পেস সহ উদাহরণ। আপনি যদি আপনার XPath এক্সপ্রেশনে নেমস্পেস ব্যবহার করেন, তাহলে আপনাকে অবশ্যই পলিসির <XMLPayload><Namespaces> সেকশনে নেমস্পেসগুলো ডিক্লেয়ার করতে হবে।

<Variable name="name" type="boolean">
   <XPath>/foo:test/foo:example</XPath>
</Variable>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: প্রয়োজনীয়
প্রকার: স্ট্রিং

ত্রুটির রেফারেন্স

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.extractvariables.ExecutionFailed 500

This error occurs when:

  • The input payload (JSON, XML) is empty.
  • The input (JSON, XML, etc) passed to the policy is invalid or malformed.
steps.extractvariables.ImmutableVariable 500 A variable used in the policy is immutable. The policy was unable to set this variable.
steps.extractvariables.InvalidJSONPath 500 This error occurs if an invalid JSON path is used in the JSONPath element of the policy. For example, if a JSON payload does not have the object Name, but you specify Name as the path in the policy, then this error occurs.
steps.extractvariables.JsonPathParsingFailure 500 This error occurs when the policy is unable to parse a JSON path and extract data from the flow variable specified in Source element. Typically this happens if the flow variable specified in the Source element does not exist in the current flow.
steps.extractvariables.SetVariableFailed 500 This error occurs if the policy could not set the value to a variable. The error generally happens if you try to assign values to multiple variables whose names start with the same words in a nested dot-separated format.
steps.extractvariables.SourceMessageNotAvailable 500 This error occurs if the message variable specified in the Source element of the policy is either:
  • Out of scope (not available in the specific flow where the policy is being executed) or
  • Can't be resolved (is not defined)
steps.extractvariables.UnableToCast 500 This error occurs if the policy was unable to cast the extracted value to a variable. Typically this happens if you attempt to set the value of one data type to a variable of another data type.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
NothingToExtract If the policy does not have any of the elements URIPath, QueryParam, Header, FormParam, XMLPayload, or JSONPayload, the deployment of the API Proxy fails, because there's nothing to extract.
NONEmptyPrefixMappedToEmptyURI This error occurs if the policy has a prefix defined in the Namespace element under the XMLPayload element, but no URI is defined.
DuplicatePrefix This error occurs if the policy has the same prefix defined more than once in the Namespace element under the XMLPayload element.
NoXPathsToEvaluate If the policy does not have the XPath element within the XMLPayload element, then the deployment of the API proxy fails with this error.
EmptyXPathExpression If the policy has an empty XPath expression within the XMLPayload element, then the deployment of the API proxy fails.
NoJSONPathsToEvaluate If the policy does not have the JSONPath element within the JSONPayload element, then the deployment of the API proxy fails with this error.
EmptyJSONPathExpression If the policy has an empty XPath expression within the XMLPayload element, then the deployment of the API proxy fails.
MissingName If the policy does not have the name attribute in any of the policy elements like QueryParam, Header, FormParam or Variable, where it is required, then the deployment of the API proxy fails.
PatternWithoutVariable If the policy does not have a variable specified within the Pattern element, then the deployment of the API proxy fails. The Pattern element requires the name of the variable in which extracted data will be stored.
CannotBeConvertedToNodeset If the policy has an XPath expression where the Variable type is defined as nodeset, but the expression cannot be converted to nodeset, then the deployment of the API proxy fails.
JSONPathCompilationFailed The policy could not compile a specified JSON Path.
InstantiationFailed The policy could not be instantiated.
XPathCompilationFailed If the prefix or the value used in the XPath element is not part of any of the declared namespaces in the policy, then the deployment of the API proxy fails.
InvalidPattern If the Pattern element definition is invalid in any of the elements like URIPath, QueryParam, Header, FormParam, XMLPayload or JSONPayload within the policy, then the deployment of the API proxy fails.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name = "SourceMessageNotAvailable"
extractvariables.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. extractvariables.EV-ParseJsonResponse.failed = true

Example error response

{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse"
   }
}

Example fault rule

<FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name = "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition>
</FaultRule>

স্কিমা

সম্পর্কিত বিষয়

কাস্টম অ্যানালিটিক্স ব্যবহার করে এপিআই বার্তার বিষয়বস্তু বিশ্লেষণ করুন

ভেরিয়েবল রেফারেন্স