আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
কী
ExtractVariables নীতি, অনুরোধ বা উত্তর থেকে কন্টেন্ট এক্সট্র্যাক্ট করে এবং সেই কন্টেন্টে একটি ভেরিয়েবলের ভ্যালু সেট করে। আপনি মেসেজের যেকোনও অংশ এক্সট্র্যাক্ট করতে পারবেন, যার মধ্যে হেডার, URI পাথ, JSON/XML পেলোড, ফর্ম প্যারামিটার ও কোয়েরি প্যারামিটার অন্তর্ভুক্ত। এই নীতি মেসেজ কন্টেন্টে টেক্সট প্যাটার্ন প্রয়োগ করে কাজ করে এবং কোনও মিল খুঁজে পেলে, নির্দিষ্ট মেসেজ কন্টেন্ট সহ একটি ভেরিয়েবল সেট করে।
আপনি সাধারণত কোনও অনুরোধ বা উত্তর মেসেজ থেকে তথ্য এক্সট্র্যাক্ট করার জন্য এই নীতি ব্যবহার করলেও, AccessEntity নীতি, XML অবজেক্ট বা JSON অবজেক্টের মতো অন্যান্য সোর্স থেকে তথ্য এক্সট্র্যাক্ট করার জন্যও এটি ব্যবহার করতে পারেন।
নির্দিষ্ট মেসেজ কন্টেন্ট এক্সট্র্যাক্ট করার পরে, আপনি অনুরোধ ও উত্তর প্রসেস করার অংশ হিসেবে অন্যান্য নীতিতে ভেরিয়েবল রেফারেন্স করতে পারবেন।
ভিডিও
ExtractVariables নীতি সম্পর্কে আরও জানতে, নিম্নলিখিত ভিডিও দেখুন।
| ভিডিও | বিবরণ |
|---|---|
| XML পেলোড থেকে ভেরিয়েবল এক্সট্র্যাক্ট করা | Extract Variable নীতি ব্যবহার করে XML পেলোড থেকে ভেরিয়েবল এক্সট্র্যাক্ট করুন। |
| JSON পেলোড থেকে ভেরিয়েবল এক্সট্র্যাক্ট করুন | Extract Variable নীতি ব্যবহার করে JSON পেলোড থেকে ভেরিয়েবেল এক্সট্র্যাক্ট করুন। |
| প্যারামিটার থেকে ভেরিয়েবল এক্সট্র্যাক্ট করো | কোয়েরি, হেডার, ফর্ম বা URI প্যারামিটারের মতো প্যারামিটার থেকে ভেরিয়েবল এক্সট্র্যাক্ট করুন। |
| একাধিক ভ্যালুযুক্ত প্যারামিটার থেকে ভেরিয়েবল এক্সট্র্যাক্ট করো | একাধিক ভ্যালুযুক্ত প্যারামিটার থেকে ভেরিয়েবল এক্সট্র্যাক্ট করা। |
| কোয়েরি প্যারামিটার (ক্লাসিক এজ) থেকে ভেরিয়েবল এক্সট্র্যাক্ট করা | ক্লাসিক Edge UI ব্যবহার করে কোয়েরি প্যারামিটার থেকে ভেরিয়েবল এক্সট্র্যাক্ট করা। |
| XML বা JSON পেলোড (ক্লাসিক Edge) থেকে ভেরিয়েবল এক্সট্র্যাক্ট করা | ক্লাসিক Edge UI ব্যবহার করে XML বা JSON পেলোড থেকে ভেরিয়েবল এক্সট্র্যাক্ট করুন। |
নমুনা
এইসব নীতি কোড স্যাম্পেল থেকে নিম্নলিখিত ধরনের আর্টিফ্যাক্ট থেকে কীভাবে ভেরিয়েবল এক্সট্র্যাক্ট করতে হয় তা জানতে পারবেন:
GitHub
এইসব লিঙ্ক কার্যকরী API প্রক্সি স্যাম্পেলের দিকে নির্দেশ করে যা আপনি Edge-এ ডেপ্লয় ও রান করতে পারবেন। এগুলি ExtractVariables ব্যবহার করে এবং GitHub-এ Apigee-এর api-platform-samples রিপোজিটরিতে থাকে। README-তে ব্যাখ্যা করা আছে যে প্রতিটি ক্ষেত্রে ExtractVariables কীভাবে ব্যবহার করা হয় এবং কীভাবে প্রতিটি নমুনা ডেপ্লয় ও রান করতে হয়।
- এক্সট্র্যাক্ট এবং ভেরিয়েবল স্যাম্পেল অ্যাসাইন করুন (JSON ও XML মেসেজ থেকে ডেটা এক্সট্র্যাক্ট করুন)
- অ্যাক্সেস entity sample
- পৃষ্ঠা নম্বর ও ক্যাশিং স্যাম্পেল
- টার্গেট URL-এর একটি নমুনা রিডাইরেক্ট করুন
- নীতি কম্পোজিশন মিক্স-আপ স্যাম্পেল
URI
<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 পাথ থেকে তথ্য এক্সট্র্যাক্ট করতে বলে। URI পাথে প্রয়োগ করার প্যাটার্ন
<Pattern> এলিমেন্ট নির্দিষ্ট করে। এই
প্যাটার্নটিকে একটি সাধারণ টেমপ্লেট হিসেবে বিবেচনা করা হয়, যেখানে কার্লি ব্রেসেস URI পাথের পরিবর্তনশীল অংশকে
বোঝায়।
যে ভেরিয়েবল সেট করতে হবে তার নাম
<VariablePrefix> এলিমেন্টে উল্লেখ করা মান এবং <Pattern> এলিমেন্টে কার্লি ব্রেসেস {}
এর মধ্যে থাকা মান থেকে নির্ধারণ করা হয়। দুটি মানকে একটি মধ্যবর্তী ডট দিয়ে যুক্ত করা হয়,
যার ফলে ভেরিয়েবলের নাম urirequest.id হয়, যেমন। কোনও
<VariablePrefix> এলিমেন্ট না থাকলে, কার্লি ব্রেসে আবদ্ধ মানটিই
ভেরিয়েবলের নাম হবে।
নিম্নলিখিত ইনকামিং অনুরোধের সাথে কাজ করার জন্য উপরের স্যাম্পেল নীতি কোডটি বিবেচনা করুন:
GET http://org1-test.apigee.net/svc1/accounts/12797282
ধরে নিন, API প্রক্সির বেসপাথ হল /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>ধরে নিন, আপনার API ডিজাইন আপনাকে একই নামের একাধিক কোয়েরি প্যারামিটার নির্দিষ্ট করতে দেয়। আপনি এই নীতি ব্যবহার করে কোয়েরি প্যারামিটার "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.
API ডিজাইনার হিসেবে, ধরে নিন যে আপনি টোকেন ভ্যালু (কিন্তু সম্পূর্ণ হেডার নয়) ক্যাশে লুক-আপে কী হিসেবে ব্যবহার করতে চান। টোকেন এক্সট্র্যাক্ট করতে, আপনি উপরে দেওয়া 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.42291810. ভেরিয়েবেল geocoderesponse.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>
XML
<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 নীতি সম্পর্কে
API ডেভেলপাররা API প্রক্সি তৈরি করেন যা মেসেজের কন্টেন্টের উপর ভিত্তি করে আলাদা আলাদা আচরণ করে, যার মধ্যে হেডার, URI পাথ, পেলোড ও কোয়েরি প্যারামিটার অন্তর্ভুক্ত। প্রায়শই, প্রক্সি এই কন্টেন্টের কিছু অংশ কন্ডিশন স্টেটমেন্টে ব্যবহারের জন্য এক্সট্র্যাক্ট করে। এটি করতে ExtractVariables নীতি ব্যবহার করুন।
ExtractVariables নীতি নির্ধারণ করার সময়, আপনি এগুলি বেছে নিতে পারবেন:
- সেট করতে হবে এমন ভেরিয়েবলের নাম
- ভেরিয়েবলের সোর্স
- কতগুলি ভেরিয়েবেল এক্সট্র্যাক্ট ও সেট করতে হবে
প্রয়োগ করা হলে, নীতিটি কন্টেন্টে একটি টেক্সট প্যাটার্ন প্রয়োগ করে এবং কোনও মিল খুঁজে পেলে, কন্টেন্ট সহ নির্ধারিত ভেরিয়েবলের ভ্যালু সেট করে। অন্যান্য নীতি ও কোড তারপরে সেইসব ভেরিয়েবল ব্যবহার করতে পারে ডায়নামিক আচরণ চালু করতে অথবা Edge API Analytics-এ ব্যবসার ডেটা পাঠাতে।
কন্টেন্ট-চালিত Analytics রিপোর্ট তৈরি করতে ExtractVariables কীভাবে ব্যবহার করা যেতে পারে তা দেখতে, কাস্টম অ্যানালিটিক্স ব্যবহার করে API মেসেজ কন্টেন্ট বিশ্লেষণ করুন দেখুন।
সুযোগ
ExtractVariables নীতির মাধ্যমে সেট করা ভেরিয়েবলের গ্লোবাল স্কোপ থাকে। অর্থাৎ, ExtractVariables নীতি কোনও নতুন ভেরিয়েবল ডিফাইন করার পরে, আপনি ফ্লোয়ের যেকোনও পর্যায়ে যেকোনও নীতি বা কোড থেকে সেই ভেরিয়েবল অ্যাক্সেস করতে পারবেন (যা ExtractVariables নীতির পরে এক্সিকিউট হয়)। এর মধ্যে এগুলি অন্তর্ভুক্ত:
- PreFlow: ProxyEndpoint ও TargetEndpoint (অনুরোধ ও উত্তর)
- PostFlow: ProxyEndpoint ও TargetEndpoint (অনুরোধ ও উত্তর)
- 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 ভেরিয়েবলটি "/a/"-এর পরে proxy.pathsuffix-এ যা কিছু দেখা যাবে সেটিতে সেট করা হয়েছে। যেমন, ধরে নিন আপনার API প্রক্সির বেস পাথ হল /basepath/v1 । http://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 বেসপাথ সহ API প্রক্সি , API প্রক্সিতে ইনবাউন্ড অনুরোধ URL এই ধরনের হয়:
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 বেস পাথ সহ একটি API প্রক্সি ধরে নিলে, ইনবাউন্ড অনুরোধের জন্য URL:
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
হিসেবে সেট করা যা কোনও নীতি কনফিগার করার জন্য ভেরিয়েবলকে রেফারেন্স করে যাতে
কোনও সমাধান করা যায় না এমন ভেরিয়েবলকে খালি স্ট্রিং (নাল) হিসেবে বিবেচনা করা যায়:
<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 | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
| ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
|---|---|
| উপস্থিতি | ঐচ্ছিক |
| টাইপ | স্ট্রিং |
<Source> এলিমেন্ট
(ঐচ্ছিক) পার্স করার জন্য ভেরিয়েবেল নির্দিষ্ট করে।
<Source>-এর ভ্যালু ডিফল্ট হিসেবে message হয়। message ভ্যালু
প্রসঙ্গ-ভিত্তিক। অনুরোধ ফ্লোতে, message অনুরোধ মেসেজের সমাধান করে। উত্তর
ফ্লোতে, message উত্তর মেসেজ হিসেবে সমাধান করা হয়।
আপনি প্রায়শই এই নীতি ব্যবহার করে অনুরোধ বা উত্তর মেসেজ থেকে তথ্য এক্সট্র্যাক্ট করলেও, আপনি
যেকোনও ভেরিয়েবল থেকে তথ্য এক্সট্র্যাক্ট করতে এটি ব্যবহার করতে পারেন। যেমন, AccessEntity নীতি দ্বারা তৈরি করা কোনও এন্টিটি থেকে তথ্য
এক্সট্র্যাক্ট করতে, Service
Callout নীতি দ্বারা রিটার্ন করা ডেটা থেকে অথবা XML বা JSON অবজেক্ট থেকে তথ্য এক্সট্র্যাক্ট করতে আপনি এটি ব্যবহার করতে পারেন।
<Source> সমাধান করা না গেলে অথবা মেসেজ ছাড়া অন্য কোনও ধরনের সমাধান হলে,
নীতিটি উত্তর দিতে পারবে না।
<Source clearPayload="true|false">request</Source>
| ডিফল্ট: | মেসেজ |
| উপস্থিতি: | ঐচ্ছিক |
| টাইপ: | স্ট্রিং |
অ্যাট্রিবিউট
| অ্যাট্রিবিউট | বিবরণ | ডিফল্ট | উপস্থিতি | ধরন |
|---|---|---|---|---|
| clearPayload |
<Source> থেকে ডেটা এক্সট্র্যাক্ট করার পরে, সেটিতে উল্লেখ করা পেলোড মুছে দিতে চাইলে, true হিসেবে সেট করুন।
|
মিথ্যা |
ঐচ্ছিক | বুলিয়ান |
<VariablePrefix> এলিমেন্ট
(ঐচ্ছিক) সম্পূর্ণ ভেরিয়েবলের নাম তৈরি করতে, <VariablePrefix>, একটি ডট এবং <Pattern> এলিমেন্ট বা <Variable> এলিমেন্টে {curly braces}-এর মধ্যে
আপনার সংজ্ঞায়িত নাম যোগ করুন। যেমন:
myprefix.id, myprefix.dbncode, বা myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
যেমন, ধরে নিন নামের ভ্যালু হল "user"।
<VariablePrefix>উল্লেখ করা না থাকলে, এক্সট্র্যাক্ট করা ভ্যালুগুলিuserনামের ভেরিয়েবলে অ্যাসাইন করা হয়।- myprefix হিসেবে
<VariablePrefix>উল্লেখ করা হলে, এক্সট্র্যাক্ট করা ভ্যালুmyprefix.userনামের ভেরিয়েবলে অ্যাসাইন করা হয়।
| ডিফল্ট: | প্রযোজ্য নয় |
| উপস্থিতি: | ঐচ্ছিক |
| টাইপ: | স্ট্রিং |
<IgnoreUnresolvedVariables> এলিমেন্ট
(ঐচ্ছিক) সমাধান করা যায় না এমন যেকোনও ভেরিয়েবলকে খালি স্ট্রিং
(নাল) হিসেবে গণ্য করতে true-এ সেট করুন। কোনও রেফারেন্স করা
ভেরিয়েবল সমাধান করা না গেলে, নীতিটি যাতে একটি সমস্যা দেখায়, সেই জন্য false হিসেবে সেট করুন।
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
| ডিফল্ট: | মিথ্যা |
| উপস্থিতি: | ঐচ্ছিক |
| টাইপ: | বুলিয়ান |
<XMLPayload>-এ XPath রেফারেন্স সমাধান করা না গেলে, নীতিটি
নিম্নলিখিত সমস্যা দেখায়:
{ "fault":{ "faultstring":"Unresolved xpath path in policy policy_name.", "detail":{ "errorcode":"steps.extractvariables.InvalidXPath" } } }
<URIPath> এলিমেন্ট
(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের টেবিলে 'উপস্থিতি' সারি দেখুন।) অনুরোধ সোর্স মেসেজের proxy.pathsuffix থেকে একটি ভ্যালু এক্সট্র্যাক্ট করে। প্যাটার্নে প্রয়োগ করা পাথ হল proxy.pathsuffix, যার মধ্যে API Proxy-এর basepath অন্তর্ভুক্ত থাকে না। যদি সোর্স মেসেজটি উত্তর মেসেজ টাইপে সমাধান করা হয়, তাহলে এই এলিমেন্টটি কিছুই করে না।
<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>. |
| টাইপ: | প্রযোজ্য নয় |
অ্যাট্রিবিউট
| অ্যাট্রিবিউট | বিবরণ | ডিফল্ট | উপস্থিতি | ধরন |
|---|---|---|---|---|
| ignoreCase | প্যাটার্ন ম্যাচ করার সময় বড় ও ছোট হাতের অক্ষর উপেক্ষা করার কথা উল্লেখ করে। |
মিথ্যা |
ঐচ্ছিক | বুলিয়ান |
<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>. |
| টাইপ: | প্রযোজ্য নয় |
অ্যাট্রিবিউট
| অ্যাট্রিবিউট | বিবরণ | ডিফল্ট | উপস্থিতি | ধরন |
|---|---|---|---|---|
| নাম | কোয়েরি প্যারামিটারের নাম নির্দিষ্ট করে। একাধিক কোয়েরি প্যারামিটারের নাম একই হলে, ইন্ডেক্স করা রেফারেন্স ব্যবহার করুন, যেখানে কোয়েরি প্যারামিটারের প্রথম ইনস্ট্যান্সের কোনও ইন্ডেক্স নেই, দ্বিতীয়টি ইন্ডেক্স ২-এ, তৃতীয়টি ইন্ডেক্স ৩-এ ইত্যাদি। |
প্রযোজ্য নয় |
প্রয়োজনীয় | স্ট্রিং |
<Header> এলিমেন্ট
(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের টেবিলে 'উপস্থিতি' সারি দেখুন।) নির্দিষ্ট অনুরোধ বা উত্তর মেসেজের নির্দিষ্ট 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 ব্যবহার করুন। |
প্রযোজ্য নয় |
প্রয়োজনীয় | স্ট্রিং |
<FormParam> এলিমেন্ট
(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের টেবিলে 'উপস্থিতি' সারি দেখুন।) নির্দিষ্ট অনুরোধ বা উত্তর মেসেজের নির্দিষ্ট ফর্ম প্যারামিটার থেকে একটি ভ্যালু
এক্সট্র্যাক্ট করে। ফর্ম প্যারামিটার
শুধুমাত্র তখনই এক্সট্র্যাক্ট করা যাবে যখন নির্দিষ্ট মেসেজের Content-Type হেডার
application/x-www-form-urlencoded হয়।
<FormParam name="greeting">
<Pattern>hello {user}</Pattern>
</FormParam>| ডিফল্ট: | প্রযোজ্য নয় |
| উপস্থিতি: | ঐচ্ছিক। তবে, আপনাকে অবশ্যই নিম্নলিখিতগুলির মধ্যে অন্তত একটি অন্তর্ভুক্ত করতে হবে:
<URIPath>, <QueryParam>, <Header>,
<FormParam>, <JSONPayload>, অথবা
<XMLPayload>. |
| টাইপ: | প্রযোজ্য নয় |
অ্যাট্রিবিউট
| অ্যাট্রিবিউট | বিবরণ | ডিফল্ট | উপস্থিতি | ধরন |
|---|---|---|---|---|
| নাম | ফর্ম প্যারামিটারের নাম, যেখান থেকে আপনি ভ্যালু এক্সট্র্যাক্ট করেন। |
প্রযোজ্য নয় |
প্রয়োজনীয় | স্ট্রিং |
<Variable> এলিমেন্ট
(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের টেবিলে 'উপস্থিতি' সারি দেখুন।) যে ভেরিয়েবল থেকে ভ্যালু এক্সট্র্যাক্ট করতে হবে তার নাম নির্দিষ্ট করে।
<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 এলিমেন্টের মধ্যে এটি প্রয়োজন। |
| টাইপ: | প্রযোজ্য নয় |
অ্যাট্রিবিউট
| অ্যাট্রিবিউট | বিবরণ | ডিফল্ট | উপস্থিতি | ধরন |
|---|---|---|---|---|
| নাম |
এক্সট্র্যাক্ট করা ভ্যালু যে ভেরিয়েবেলে অ্যাসাইন করা হবে তার নাম উল্লেখ করে। |
নাম |
প্রয়োজনীয় | স্ট্রিং |
| ধরন | ভেরিয়েবল ভ্যালুর ডেটার ধরন নির্দিষ্ট করে। | প্রযোজ্য নয় | ঐচ্ছিক |
স্ট্রিং। এখান থেকে বেছে নিন:
|
<JSONPayload>/<Variable>/<JSONPath> এলিমেন্ট
(JSONPayload:Variable এলিমেন্টের মধ্যে এটি আবশ্যিক।) JSON-ফর্ম্যাট করা মেসেজ থেকে ভ্যালু এক্সট্র্যাক্ট করতে ব্যবহৃত JSON পাথ নির্দিষ্ট করে।
<Variable name="name"> <JSONPath>$.rss.channel.title</JSONPath> </Variable>
| ডিফল্ট: | প্রযোজ্য নয় |
| উপস্থিতি: | প্রয়োজনীয় |
| টাইপ: | স্ট্রিং |
<XMLPayload> এলিমেন্ট
(ঐচ্ছিক, তবে আরও তথ্যের জন্য নিচের টেবিলে 'উপস্থিতি' সারি দেখুন।) 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 মূল্যায়ন বন্ধ করতে |
মিথ্যা |
ঐচ্ছিক | বুলিয়ান |
<XMLPayload>/<Namespaces> element
(ঐচ্ছিক) 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>
| ডিফল্ট: | প্রযোজ্য নয় |
| উপস্থিতি: | ঐচ্ছিক |
| টাইপ: | প্রযোজ্য নয় |
অ্যাট্রিবিউট
| অ্যাট্রিবিউট | বিবরণ | ডিফল্ট | উপস্থিতি | ধরন |
|---|---|---|---|---|
| নাম |
এক্সট্র্যাক্ট করা ভ্যালু যে ভেরিয়েবেলে অ্যাসাইন করা হবে তার নাম উল্লেখ করে। |
নাম |
প্রয়োজনীয় | স্ট্রিং |
| ধরন | ভেরিয়েবল ভ্যালুর ডেটার ধরন নির্দিষ্ট করে। | বুলিয়ান | ঐচ্ছিক |
স্ট্রিং। এখান থেকে বেছে নিন:
|
<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>
| ডিফল্ট: | প্রযোজ্য নয় |
| উপস্থিতি: | প্রয়োজনীয় |
| টাইপ: | স্ট্রিং |
সমস্যার রেফারেন্স
এই নীতি কোনও সমস্যার কারণে ট্রিগার হলে, Edge-এর মাধ্যমে ফেরত আসা ফল্ট কোড ও সমস্যার মেসেজ এবং সেট করা ফল্ট ভেরিয়েবল সম্পর্কে এই বিভাগে বর্ণনা করা হয়েছে। সমস্যা সমাধানের জন্য আপনি যদি ফল্ট রুল ডেভেলপ করেন, তাহলে এই তথ্য জানা আপনার জন্য গুরুত্বপূর্ণ। আরও জানতে, নীতি সংক্রান্ত সমস্যা সম্পর্কে আপনার যা জানা প্রয়োজন এবং ত্রুটি মোকাবেলা করা দেখুন।
রানটাইম সমস্যা
নীতি এক্সিকিউট করার সময় এই সমস্যা হতে পারে।
| সমস্যার কোড | HTTP স্ট্যাটাস | কারণ | এর সমাধান করুন |
|---|---|---|---|
steps.extractvariables.ExecutionFailed |
500 |
এই সমস্যাটি তখন হয় যখন:
|
build |
steps.extractvariables.ImmutableVariable |
500 | নীতিতে ব্যবহৃত ভেরিয়েবল অপরিবর্তনীয়। নীতিটি এই ভেরিয়েবল সেট করতে পারেনি। | |
steps.extractvariables.InvalidJSONPath |
500 | নীতিতে JSONPath এলিমেন্টে ভুল JSON পাথ ব্যবহার করা হলে এই সমস্যা হয়।
যেমন, JSON পেলোডে যদি Name অবজেক্ট না থাকে,
কিন্তু আপনি নীতিতে Name-কে পাথ হিসেবে নির্দিষ্ট করেন, তাহলে এই সমস্যাটি হয়। |
build |
steps.extractvariables.JsonPathParsingFailure |
500 | নীতি JSON পাথ পার্স করতে না পারলে এবং Source এলিমেন্টে উল্লেখ করা ফ্লো ভেরিয়েবল থেকে
ডেটা এক্সট্র্যাক্ট করতে না পারলে এই সমস্যা হয়। Source এলিমেন্টে উল্লেখ করা ফ্লো ভেরিয়েবল বর্তমান
ফ্লোতে না থাকলে সাধারণত এটি
হয়। |
build |
steps.extractvariables.SetVariableFailed |
500 | নীতি কোনও ভেরিয়েবলে মান সেট করতে না পারলে এই সমস্যা হয়। সাধারণত, নেস্টেড ডট-সেপারেটেড ফর্ম্যাটে একই শব্দ দিয়ে শুরু হওয়া একাধিক ভেরিয়েবলে মান অ্যাসাইন করার চেষ্টা করলে এই সমস্যা হয়। | build |
steps.extractvariables.SourceMessageNotAvailable |
500 | এই সমস্যাটি তখনই হয়, যখন নীতির Source এলিমেন্টে উল্লেখ করা মেসেজ
ভেরিয়েবলটি
এইসবের মধ্যে কোনও একটি হয়:
|
build |
steps.extractvariables.UnableToCast |
500 | নীতিটি যদি এক্সট্র্যাক্ট করা মানকে কোনও ভেরিয়েবলে কাস্ট করতে না পারে, তাহলে এই সমস্যাটি হয়। সাধারণত, আপনি যদি একটি ডেটা টাইপের ভ্যালু অন্য ডেটা টাইপের ভেরিয়েবলে সেট করার চেষ্টা করেন, তাহলে এটি ঘটে। | build |
ডিপ্লয়মেন্ট সংক্রান্ত সমস্যা
এই নীতি থাকা কোনও প্রক্সি আপনি প্রয়োগ করলে, এই সমস্যা হতে পারে।
| সমস্যার নাম | কারণ | এর সমাধান করুন |
|---|---|---|
NothingToExtract |
নীতিতে URIPath, QueryParam,
Header, FormParam, XMLPayload অথবা JSONPayload, এইসব এলিমেন্টের কোনওটি না থাকলে, API প্রক্সি ডেপ্লয় করা যায় না, কারণ এক্সট্র্যাক্ট করার মতো কিছু থাকে না। |
build |
NONEmptyPrefixMappedToEmptyURI |
XMLPayload এলিমেন্টের অধীনে Namespace এলিমেন্টে নীতির কোনও প্রিফিক্স
সংজ্ঞায়িত করা থাকলে, কিন্তু কোনও URI সংজ্ঞায়িত করা না থাকলে
এই সমস্যাটি হয়। |
build |
DuplicatePrefix |
XMLPayload এলিমেন্টের অধীনে Namespace এলিমেন্টে একই প্রিফিক্স একাধিকবার
সংজ্ঞায়িত করা থাকলে এই সমস্যা হয়। |
build |
NoXPathsToEvaluate |
নীতিতে XPath এলিমেন্ট না থাকলে
XMLPayload এলিমেন্ট, তাহলে এই সমস্যার কারণে API প্রক্সি ডেপ্লয় করা যায় না।
|
build |
EmptyXPathExpression |
নীতিতে XMLPayload
এলিমেন্টের মধ্যে XPath এক্সপ্রেশন খালি থাকলে, API প্রক্সি ডেপ্লয় করা যায় না। |
build |
NoJSONPathsToEvaluate |
নীতিতে JSONPath এলিমেন্ট না থাকলে
JSONPayload এলিমেন্ট, তাহলে এই সমস্যার কারণে API প্রক্সি ডেপ্লয় করা যায় না। |
build |
EmptyJSONPathExpression |
নীতিতে XPath এক্সপ্রেশন খালি থাকলে
XMLPayload এলিমেন্ট, API প্রক্সি ডেপ্লয় করা যায় না। |
build |
MissingName |
যেখানে প্রয়োজন, সেখানে name অ্যাট্রিবিউট না থাকলে, QueryParam, Header, FormParam বা
Variable-এর মতো কোনও নীতি
এলিমেন্টে API প্রক্সি ডেপ্লয় করা যায় না। |
build |
PatternWithoutVariable |
নীতিতে Pattern এলিমেন্টের মধ্যে কোনও ভেরিয়েবল নির্দিষ্ট করা না থাকলে,
API প্রক্সি ডেপ্লয় করা যায় না। Pattern এলিমেন্টের জন্য এক্সট্র্যাক্ট করা ডেটা যে ভেরিয়েবেলে স্টোর করা হবে,
তার নাম প্রয়োজন। |
build |
CannotBeConvertedToNodeset |
নীতিতে যদি এমন XPath এক্সপ্রেশন থাকে যেখানে Variable type
nodeset হিসেবে সংজ্ঞায়িত করা হয়,
কিন্তু এক্সপ্রেশনটি nodeset-এ কনভার্ট করা না যায়, তাহলে API প্রক্সি ডেপ্লয় করা যায় না। |
build |
JSONPathCompilationFailed |
নীতিটি নির্দিষ্ট JSON পাথ কম্পাইল করতে পারেনি। | |
InstantiationFailed |
নীতিটি ইনস্ট্যানশিয়েট করা যায়নি। | |
XPathCompilationFailed |
XPath এলিমেন্টে ব্যবহৃত প্রিফিক্স বা ভ্যালু যদি নীতির মধ্যে ঘোষণা করা কোনও
নেমস্পেসের অংশ না হয়, তাহলে API প্রক্সি
ডেপ্লয় করা যাবে না। |
build |
InvalidPattern |
নীতির মধ্যে URIPath,
QueryParam, Header, FormParam, XMLPayload
বা JSONPayload-এর মতো কোনও এলিমেন্টে Pattern এলিমেন্টের সংজ্ঞা ভুল হলে, API প্রক্সি ডেপ্লয় করা যায় না।
|
build |
ফল্ট ভেরিয়েবল
এই নীতি রানটাইমে কোনও সমস্যা ট্রিগার করলে, এইসব ভেরিয়েবল সেট করা হয়। আরও তথ্যের জন্য, নীতি সংক্রান্ত সমস্যার ব্যাপারে আপনার কী জানা প্রয়োজন দেখুন।
| ভেরিয়েবল | কোথায় | উদাহরণ |
|---|---|---|
fault.name="fault_name" |
fault_name হল সমস্যার নাম, যা উপরে দেওয়া রানটাইম সংক্রান্ত সমস্যা সারণীতে তালিকাভুক্ত করা আছে। ফল্ট কোডের শেষ অংশটি হল ফল্টের নাম। | fault.name = "SourceMessageNotAvailable" |
extractvariables.policy_name.failed |
policy_name হল সেই নীতির ব্যবহারকারী-নির্দিষ্ট নাম যার কারণে সমস্যা হয়েছে। | extractvariables.EV-ParseJsonResponse.failed = true |
সমস্যার উত্তরের উদাহরণ
{ "fault":{ "detail":{ "errorcode":"steps.extractvariables.SourceMessageNotAvailable" }, "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse" } }
ভুল নিয়মের উদাহরণ
<FaultRule name="Extract Variable Faults"> <Step> <Name>AM-CustomErrorMessage</Name> <Condition>(fault.name = "SourceMessageNotAvailable") </Condition> </Step> <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition> </FaultRule>
স্কিমা
সম্পর্কিত বিষয়
কাস্টম অ্যানালিটিক্স ব্যবহার করে API মেসেজের কন্টেন্ট বিশ্লেষণ করা